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


3

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

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

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

我已经省略了VID和PID,希望它将仅将规则应用于所有设备。它肯定有一定作用,但是作用却很奇怪:libusb并未检测到5个无法打开的设备,而是现在仅检测到2个-都是USB主机控制器,而不是实际的设备。

如何实现我想要的?


1
恕我直言udev,令人沮丧的是不透明且文档记录很差:我认为您可能需要使用属性SUBSYSTEMS(复数)而不是SUBSYSTEM(单数)。如果您编辑问题以包括设备实际devpath udevadm info --attribute-walk /dev/xxx在哪里的输出,/dev/xxx则也许有人可以给出更好的分析。
钢铁司机

@steeldriver:我没有看到我的设备有/dev/条目,所以我不知道如何udevadm在它上调用。我只有公共汽车,开发人员。编号,VID和PID,如lsusb(和名称)所示。
紫罗兰色长颈鹿

@steeldriver:用SUBSYSTEM S代替SUBSYSTEM似乎没有任何区别。
紫罗兰色长颈鹿2015年

Answers:


1

我同意使用VID / PID进行规则匹配不是一个确定的解决方案。但是,您可以在同一规则中使用多个设备,而不会像以前那样盲目地瞄准所有USB设备。使用实施例DRIVER名称(usb-storageusbhid,..)或KERNEL域名(tty*sd*,..)甚至使用最少的正则表达式(sd[a-z][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树中寻找它们/sys。然后使用--path

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

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

udevadm monitor

1

我处理USB设备的方式是为所有设备授予特定的组访问权限。

作为根:

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

本质上,这是将任何USB设备的读写访问权限授予plugdev组的成员。


我得弄清楚什么是团体,但谢谢:)
Violet Giraffe

每个Linux用户都是至少一个(甚至可能更多)组的成员。因此,例如,如果您的用户名是violetg,则可以执行以下操作:sudo usermod -a -G plugdev violetg将您自己添加到plugdev组,这将使您能够访问usb设备(注销并再次登录后)。
贾斯汀·布什
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.