为什么PyUSB/libusb在Linux上需要root(sudo)权限?

ewa*_*all 10 python usb libusb pyusb

我最近一直在玩PyUSB,发现它在Linux上运行得很漂亮(Ubuntu有libusb 0.1和1.0,以及OpenUSB)...但是只有当我用root权限运行程序时(sudo当然).

任何人都可以告诉我为什么它需要提升权限,更重要的是,如果我可以以某种方式更改权限,使其适用于普通用户帐户?

Jaa*_*egh 13

您可以通过创建udev规则来更改USB设备节点的权限.例如,我将以下行添加到文件中/etc/udev/rules.d/

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
Run Code Online (Sandbox Code Playgroud)

这会将设备节点的所有者设置为root:usbusers而不是root:root

将自己添加到usbusers组后,我可以访问该设备.


Jör*_*tag 6

libusb允许您以任意方式操作任意USB设备.例如,您可以格式化外部USB硬盘.

一般来说,所有直接硬件访问都需要root特权,虽然我想实际上root不需要完全特权,你应该没事CAP_SYS_RAWIO.


Rol*_*ony 6

请参阅我在这里给出的答案:
How can I comunicate with this device using pyusb?

即:
为您希望普通用户能够访问的特定设备设置一个 udev 规则文件。这将定义供应商 ID、产品 ID 和组。
可以使用该lsusb命令找到供应商和产品 ID 。

1.创建udev规则文件

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

将它放在一个名为(例如)/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根据我的经验,它也可以是组,具体取决于您插入的内容。