如何允许软件访问任何USB设备?

我有一个基于libusb的程序,无法在新安装的Ubuntu上打开USB设备,因为它缺少权限。

这个解决方案可能对我有用,但它需要手动指定每个设备 – 我有很多。 所以我尝试了这个(在文件/etc/udev/rules.d/41-cvs-permissions.rules ):

 SUBSYSTEM=="usb", MODE:="0666" 

我省略了VID和PID,希望它只是将规则应用于所有设备。 它肯定有一些效果,但效果相当奇怪:现在libusb只检测到2个,而不是检测到它无法打开的5个设备 – 它们都是USB主机控制器,而不是实际设备。

如何实现我想要的?

我同意使用VID / PID进行规则匹配并不是一个明确的解决方案。 但是,您可以在同一规则中使用多个设备,而无需像您那样盲目地定位所有USB设备。 示例使用DRIVER名称( usb-storageusbhid ,..)或KERNEL名称( tty*sd* ,..),即使使用最小正则表达式( sd[az][0-9]*usb* )。

你应该在他们的属性中寻找相似之处。

  1. 删除所有这些设备
  2. 将当前设备列表保存在/dev

     ls /dev > /tmp/dev_list0.txt 
  3. 插入其中一个目标设备

  4. 将设备列表保存在另一个文件中

     ls /dev > /tmp/dev_list.txt 
  5. 比较文件, >添加的设备, <已删除的设备

     $ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt 85a86,87 > sdc > serial 89a92,93 > sg4 > sg5 93a98 > sr1 194a200,201 > ttyUSB0 > ttyUSB1 

    这是一个3G调制解调器。

  6. 检查所需接口的属性,例如:

     udevadm info --attribute-walk --name=/dev/ttyUSB0 

对所需的所有设备执行相同操作。 如果您无法弄清楚如何,请上传他们的udevadm info --attribute-walk --name=...输出并将它们链接到您的问题。

请注意,并非所有USB设备都在/dev创建节点。 有些你在SYSFS tree /sys寻找它们。 然后使用--path检查它们的属性

 udevadm info --attribute-walk --path=... 

使用与上面相同的步骤,您可以检查通过监视udev事件创建的设备节点:

 udevadm monitor 

我处理USB设备的方法是让特定的组访问所有这些设备。

作为根:

 echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules udevadm control --reload-rules 

基本上它的作用是将任何USB设备的读写访问权限授予plugdev组的成员。