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


    背景

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

    sudo ./MyApp
    
    • 1

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

    ./MyApp
    
    • 1

    会报错:

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

    这个【-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
    
    • 1

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

    /dev/bus/usb/007/002
    
    • 1

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

    sudo chmod 666 /dev/bus/usb/007/002
    
    • 1
  • 相关阅读:
    【数据分享】2010-2020年全球民航交通流量数据
    2019年Java面试题汇总
    js字母大小写转化——两种方式
    【数据结构基础】之树的介绍,生动形象,通俗易懂,算法入门必看
    高并发之网络IO模型
    Python list列表删除元素(4种方法)
    java8基础语法
    C/C++数据结构——树的同构(二叉树)
    使用pip安装模块时,提示MemoryError
    Maven下的依赖管理
  • 原文地址:https://blog.csdn.net/joyopirate/article/details/133166527