10

我最近一直在玩 PyUSB,发现它在 Linux 上运行良好(Ubuntu 有libusb 0.1 和 1.0,以及OpenUSB)......但前提是我以 root 权限运行程序(sudo当然,使用 )。

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

4

3 回答 3

14

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

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"

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

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

于 2011-12-20T21:46:46.203 回答
7

请参阅我在此处给出的答案:
如何使用 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,具体取决于您插入的内容。

于 2015-08-15T08:20:39.500 回答
6

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

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

于 2010-09-17T20:31:56.733 回答