我最近一直在玩 PyUSB,发现它在 Linux 上运行良好(Ubuntu 有libusb 0.1 和 1.0,以及OpenUSB)......但前提是我以 root 权限运行程序(sudo
当然,使用 )。
谁能告诉我为什么它需要提升权限,更重要的是,我是否可以以某种方式更改权限以使其适用于普通用户帐户?
您可以通过创建 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 和组。
可以使用该lsusb
命令找到供应商和产品 ID。
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 的所有成员现在都可以访问该设备。
编辑:请注意,在某些系统上,该组plugdev
可能不是您需要的组。根据我的经验,它也可以是组input
,具体取决于您插入的内容。
libusb
允许您以任意方式操作任意 USB 设备。例如,您可以格式化外部 USB 硬盘。
一般来说,所有直接硬件访问都需要root
特权,虽然我猜实际上root
不需要完全特权,你应该只需要CAP_SYS_RAWIO
.