为什么pyusb / libusb在Linux上需要root(sudo)权限?
解决方案
libusb
允许您以任意方式操纵任意USB设备。例如,您可以格式化外部USB HardDisk。
通常,所有直接的硬件访问需要 root
特权,尽管我想这实际上很满意 root
不需要特权,您应该只有 CAP_SYS_RAWIO
.
其他提示
您可以通过创建UDEV规则来更改USB设备节点的权限。例如,我将以下行添加到文件中 /etc/udev/rules.d/
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
这将设备节点的所有者设置为 root:usbusers
而不是 root:root
将自己添加到 usbusers
组,我可以访问设备。
看到我在这里给出的答案:
如何使用PYUSB与此设备交流?
即:
为您希望普通用户能够访问的特定设备设置UDEV规则文件。这将定义供应商ID,产品ID和组。
可以使用该供应商和产品ID找到 lsusb
命令。
1.创建一个UDEV规则文件
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"
将其放入称为(例如)/lib/udev/rules.d/50-yoursoftwarename.rules(在Man Udev中挖掘文件命名规则)的文件中
注意:已更改的旧命名约定/etc/udev/rules.d/filename.rules。
2.将用户名添加到PlugDev组
adduser username plugdev
3.强迫Udev系统查看您的更改
sudo udevadm control --reload
(那就是减去重载)
sudo udevadm trigger
4.拔下并重新启动设备或重新启动机器
最终结果应该是组插件的所有成员现在都可以访问设备。
编辑:请注意,在某些系统上小组 plugdev
可能不是您需要的小组。也可以是小组 input
根据我的经验,取决于您所插入的内容。
不隶属于 StackOverflow