仅在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"
答案 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盘正在连接生活。