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

时间:2010-09-17 19:03:04

标签: python usb libusb pyusb

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

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

3 个答案:

答案 0 :(得分:11)

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

中的文件中
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"

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

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

答案 1 :(得分:5)

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

一般情况下,所有直接硬件访问都需要root权限,但我认为实际上不需要完整的root权限,只需CAP_SYS_RAWIO即可。

答案 2 :(得分:3)

看到我在这里给出的答案:
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"

将此文件放入名为(例如)/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。取决于您插入的内容。