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)

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

查找资料

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

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

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

解决方案

先进行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

猜你喜欢

转载自blog.csdn.net/joyopirate/article/details/133166527