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

Python 为什么PyUSB/libusb在Linux上需要root(sudo)权限?,python,usb,libusb,pyusb,Python,Usb,Libusb,Pyusb,我最近一直在玩弄它,发现它在Linux上运行得很好(Ubuntu有0.1和1.0,还有)。。。但前提是我以root权限运行程序(当然是使用sudo) 有人能告诉我为什么它需要提升权限,更重要的是,如果我能以某种方式更改权限,使其适用于普通用户帐户吗?libusb允许您以任意方式操作任意USB设备。例如,您可以格式化外部USB硬盘 一般来说,所有直接硬件访问都需要根权限权限,尽管我猜实际上不需要完全根权限权限,但您只需要CAP_SYS_RAWIO就可以了。您可以通过创建udev规则来更改usb设备

我最近一直在玩弄它,发现它在Linux上运行得很好(Ubuntu有0.1和1.0,还有)。。。但前提是我以root权限运行程序(当然是使用
sudo


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

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


一般来说,所有直接硬件访问都需要
根权限
权限,尽管我猜实际上不需要完全
根权限
权限,但您只需要
CAP_SYS_RAWIO
就可以了。您可以通过创建udev规则来更改usb设备节点的权限。 e、 g.我在
/etc/udev/rules.d/

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
这将设备节点的所有者设置为
root:usbusers
,而不是
root:root


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

请参见我在此处给出的答案:

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

一,。 创建一个udev规则文件

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"
将其放入一个名为(例如)/lib/udev/rules.d/50-YourSoftwareName.rules的文件中(在manudev中查找文件命名规则)
注意:使用/etc/udev/rules.d/filename.rules的旧命名约定已更改

二,。 将用户名添加到plugdev组

adduser用户名plugdev

三,。 强制udev系统查看您的更改

sudo udevadm控件--重新加载
(即负-负重新加载)
sudo udevadm触发器

四,。 拔下并重新插入设备 或 重新启动你的机器

最终结果应该是plugdev组的所有成员现在都能够访问该设备

编辑:
请注意,在某些系统上,
plugdev
组可能不是您需要的组。根据我的经验,它也可以是组
input
,这取决于您正在插入的内容。

如何使用PyUSB设置CAP_SYS_RAWIO?
CAP_SYS_RAWIO
可以轻松地获得完整根目录,因此您使用该功能不会获得任何东西。酷。。。我很快就会试一试的!