libusb使用udev-rules在没有sudo的情况下调用

时间:2016-11-14 20:44:23

标签: linux usb udev

仅在Kubuntu 16.04 64位上测试过。我有一个应用程序,源不在我的控制之下。它使用一些libusb调用,最终结果如下:

libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/001/031: Permission denied
libusb: error [_get_usbfs_fd] libusb requires write access to USB device nodes.                                   

以root身份运行上述应用程序时,它按预期工作。 当我更改相关文件的权限时,如:

sudo chmod a+w /dev/bus/usb/001/031

然后应用程序将使用标准用户权限(直到我断开/重新连接我的USB设备)。

现在我正在寻找一种方法,例如每次插入特定的USB设备时自动执行chmod a+w。 可以通过编写特定的udev规则来实现这一点吗?

libusb调用没有root权限的其他解决方案吗?

解决方案:根据David Grayson的回答,我现在在我的规则文件中添加了一行SUBSYSTEM=="usb"。我的规则文件现在终于看起来像这样:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666"

3 个答案:

答案 0 :(得分:4)

我建议您在名为/etc/udev/rules.d的{​​{1}}中添加新文件。它应该包含以下内容:

usb.rules

这将使所有用户都能读写所有USB设备。

您还可以使用Ignacio的答案中提到的SUBSYSTEM=="usb", MODE="0666" idVendor属性将其缩小到特定的USB设备。

答案 1 :(得分:1)

假设Kubuntu 16.04使用PolicyKit,请将以下内容放在/etc/udev/rules.d中的文件中,并将其命名为与已存在的文件类似:

ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"

将两组“xxxx”分别替换为设备的供应商ID和产品ID。

答案 2 :(得分:0)

老歌,但黄金。帮助我解决在 AQEMU 下与虚拟机共享 USB 的问题。非常感谢。 我用这一行添加到 /etc/udev/rules.d 文件 usb.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666"

和虚拟机可以看到U盘正在连接生活。