linux下特定usb设备的权限设置

背景

目前我在Ubuntu下使用一个USB热成像摄像头。需要通过调用它的sdk进行图像的采集,以及获取对应像素点的温度。假设我现在的测试程序名称为MyApp。
当我用下面的命令运行时,程序是正常运行且能从热成像仪采集图像

sudo ./MyApp

但是当我以下面的命令运行时,

./MyApp

会报错:

libiruvc error [libiruvc.c:357/uvc_camera_open] uvc camera open device failed (uvc_error_code:-3)

这个【-3】错误是说热成像仪的权限问题,也就是说需要用root权限才能操作。
然而麻烦的是,在我的正式程序中,需要用到ROS2的库及环境变量一些环境变量。而这些参数无法同步到root用户的环境下。也就是说,不能用sudo启动我的程序,否则我的程序的ROS2部分功能无法使用。
但是不用sudo,热成像仪又用不了,怎么搞?

查找资料

只能修改热成像仪的读写权限了。
热成像的说明书说在linux下,系统会把这个摄像头识别成video设备,识别为/dev/video*。但是实际上我没在/dev目录下找到任video*,那也就意味着我无法直接通过 “chmod 666 /dev/video1”来更改热成像设备的权限。
然后我换一种思路,问了一下chatgpt:

在通过lsusb命令知道了usb设备的基本信息后,如何知道它对应的是/dev或者别的地方的哪个文件节点?

下面是它的回答的截图。它提到一个 /dev/bus/usb 的路径。
在这里插入图片描述
好像我那个没被识别为video的摄像头,就藏在这个/dev/bus/usb 路径下面。

解决方案

先进行lsusb,获取到插到主机上的USB设备的信息:
在这里插入图片描述
上图用红色框框出来的设备,就是我的热成像设备。

Bus 007 Device 002: ID 0bda:5830 Realtek Semiconductor Corp. USB Camera

可以看到,Bus为007,Device为002
那么,对应在 /dev/bus/usb路径下的节点为

/dev/bus/usb/007/002

在这里插入图片描述
然后更改它的权限就行:

sudo chmod 666 /dev/bus/usb/007/002
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值