我一直在玩耍 pyusb 最近,发现它在Linux上工作得很漂亮(Ubuntu有 libusb 0.1和1.0以及 Openusb)...但是,只有我使用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 根据我的经验,取决于您所插入的内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top