为什么Python pyusb usb.core访问因权限而被拒绝,为什么赢得';你不遵守规则吗?
我有一个USB设备,我正试图在linux上使用pyusb 1.0.2(linux tpad 4.15.0-38-generic#41~16.04.1-Ubuntu SMP Wed Oct 10 20:16:04 UTC 2018 x86_64 x86_64 x86_64 GNU/linux)与之对话。运行Python3.5时,我遇到以下错误(本文底部有完整的跟踪): 安装usb并使用lsusb,然后检查:为什么Python pyusb usb.core访问因权限而被拒绝,为什么赢得';你不遵守规则吗?,python,linux,udev,pyusb,Python,Linux,Udev,Pyusb,我有一个USB设备,我正试图在linux上使用pyusb 1.0.2(linux tpad 4.15.0-38-generic#41~16.04.1-Ubuntu SMP Wed Oct 10 20:16:04 UTC 2018 x86_64 x86_64 x86_64 GNU/linux)与之对话。运行Python3.5时,我遇到以下错误(本文底部有完整的跟踪): 安装usb并使用lsusb,然后检查: udevadm info -a -p $(udevadm info -q path -n
udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/006/011)
显示
因此,我在/etc/udev/rules.d/10-local.rules中编写了这样一条规则(仅供参考——我还尝试了“user1”,这是python显示它正在运行的用户,我尝试了这两种方式):=”和“=”:
然后我运行udevadm测试/devices/pci0000:00/0000:00:10.0/usb6/6-1
这表明:
calling: test
version 229
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
=== trie on-disk ===
tool version: 229
file size: 7049340 bytes
header size 80 bytes
strings 1759644 bytes
nodes 5289616 bytes
Load module index
timestamp of '/etc/systemd/network' changed
timestamp of '/lib/systemd/network' changed
Parsed configuration file /lib/systemd/network/99-default.link
Created link configuration context.
timestamp of '/etc/udev/rules.d' changed
Reading rules file: /etc/udev/rules.d/10-local.rules
Reading rules file: /lib/udev/rules.d/40-crda.rules
[removed long list of rule files...]
Skipping empty file: /etc/udev/rules.d/99-usbftdi.rules
rules contain 393216 bytes tokens (32768 * 12 bytes), 33403 bytes strings
25688 strings (211409 bytes), 22263 de-duplicated (181432 bytes), 3426 trie nodes used
GROUP 100 /etc/udev/rules.d/10-local.rules:1
MODE 0777 /etc/udev/rules.d/10-local.rules:1
value '[dmi/id]sys_vendor' is 'LENOVO'
value '[dmi/id]sys_vendor' is 'LENOVO'
IMPORT builtin 'usb_id' /lib/udev/rules.d/50-udev-default.rules:13
IMPORT builtin 'hwdb' /lib/udev/rules.d/50-udev-default.rules:13
MODE 0664 /lib/udev/rules.d/50-udev-default.rules:41
PROGRAM 'mtp-probe /sys/devices/pci0000:00/0000:00:10.0/usb6/6-1 6 11' /lib/udev/rules.d/69-libmtp.rules:1923
starting 'mtp-probe /sys/devices/pci0000:00/0000:00:10.0/usb6/6-1 6 11'
'mtp-probe /sys/devices/pci0000:00/0000:00:10.0/usb6/6-1 6 11'(out) '0'
Process 'mtp-probe /sys/devices/pci0000:00/0000:00:10.0/usb6/6-1 6 11' succeeded.
handling device node '/dev/bus/usb/006/011', devnum=c189:650, mode=0664, uid=0, gid=100
set permissions /dev/bus/usb/006/011, 020664, uid=0, gid=100
setting mode of /dev/bus/usb/006/011 to 020664 failed: Operation not permitted
setting owner of /dev/bus/usb/006/011 to uid=0, gid=100 failed: Operation not permitted
ACTION=add
BUSNUM=006
DEVNAME=/dev/bus/usb/006/011
DEVNUM=011
DEVPATH=/devices/pci0000:00/0000:00:10.0/usb6/6-1
DEVTYPE=usb_device
DRIVER=usb
ID_BUS=usb
ID_MODEL=Concept2_Performance_Monitor_3__PM3_
ID_MODEL_ENC=Concept2\x20Performance\x20Monitor\x203\x20\x28PM3\x29
ID_MODEL_FROM_DATABASE=Performance Monitor 3
ID_MODEL_ID=0001
ID_REVISION=0111
ID_SERIAL=Concept2_Concept2_Performance_Monitor_3__PM3__300118412
ID_SERIAL_SHORT=300118412
ID_USB_INTERFACES=:030000:
ID_VENDOR=Concept2
ID_VENDOR_ENC=Concept2
ID_VENDOR_FROM_DATABASE=Concept2
ID_VENDOR_ID=17a4
MAJOR=189
MINOR=650
PRODUCT=17a4/1/111
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZED=3850171749
Unload module index
Unloaded link configuration context.
但是,执行此操作后,python仍然会报告对USB设备的访问错误
Traceback (most recent call last):
File "/home/user1/PycharmProjects/PyRow/statshow.py", line 22, in <module>
erg = pyrow.pyrow(ergs[0])
File "/home/user1/PycharmProjects/PyRow/pyrow.py", line 61, in __init__
usb.util.claim_interface(erg, INTERFACE)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/util.py", line 205, in claim_interface
device._ctx.managed_claim_interface(device, interface)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 159, in managed_claim_interface
self.managed_open()
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 120, in managed_open
self.handle = self.backend.open_device(self.dev)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/backend/libusb1.py", line 786, in open_device
return _DeviceHandle(dev)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/backend/libusb1.py", line 643, in __init__
_check(_lib.libusb_open(self.devid, byref(self.handle)))
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/backend/libusb1.py", line 595, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)
回溯(最近一次呼叫最后一次):
文件“/home/user1/PycharmProjects/PyRow/statshow.py”,第22行,在
erg=pyrow.pyrow(ergs[0])
文件“/home/user1/PycharmProjects/PyRow/PyRow.py”,第61行,在__
usb.util.claim_接口(erg,接口)
文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/util.py”,第205行,在索赔界面中
设备.\u ctx.托管\u索赔\u接口(设备,接口)
包装中的文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/core.py”,第102行
返回f(自,*args,**kwargs)
文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/core.py”,第159行,在托管接口中
self.managed_open()
包装中的文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/core.py”,第102行
返回f(自,*args,**kwargs)
文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/core.py”,第120行,在managed_open中
self.handle=self.backend.open_设备(self.dev)
文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/backend/libusb1.py”,第786行,在open_设备中
返回设备句柄(dev)
文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/backend/libusb1.py”,第643行,在__
_检查(_lib.libusb_open(self.devid,byref(self.handle)))
文件“/home/user1/PycharmProjects/camera/venv/lib/python3.5/site packages/usb/backend/libusb1.py”,第595行,检查中
提高错误率(_strerror(ret)、ret、libusb\u errno[ret])
usb.core.USBError:[Errno 13]访问被拒绝(权限不足)
我没有办法解决这个问题。有什么建议吗?使用我发现我可以使用plugdev组纠正权限问题
所以在我使用的终端中
groups
groups [myuserid]
并验证了plugdev在那里,并且用户是该组的一部分。然后我在/etc/udev/rules.d/10-local.rules中放入以下行
子系统==“usb”,环境{DEVTYPE}==“usb_设备”,
ATTRS{idVendor}==“17a4”,ATTRS{idProduct}==“0001”,GROUP=“plugdev”,
MODE=“0777”
我不确定devtype和0777或0666是否正确,但这是有效的
进行更改后,我还运行了以下命令来重置系统的规则:
sudo udevadm control --reload
sudo udevadm trigger
Traceback (most recent call last):
File "/home/user1/PycharmProjects/PyRow/statshow.py", line 22, in <module>
erg = pyrow.pyrow(ergs[0])
File "/home/user1/PycharmProjects/PyRow/pyrow.py", line 61, in __init__
usb.util.claim_interface(erg, INTERFACE)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/util.py", line 205, in claim_interface
device._ctx.managed_claim_interface(device, interface)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 159, in managed_claim_interface
self.managed_open()
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/core.py", line 120, in managed_open
self.handle = self.backend.open_device(self.dev)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/backend/libusb1.py", line 786, in open_device
return _DeviceHandle(dev)
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/backend/libusb1.py", line 643, in __init__
_check(_lib.libusb_open(self.devid, byref(self.handle)))
File "/home/user1/PycharmProjects/camera/venv/lib/python3.5/site-packages/usb/backend/libusb1.py", line 595, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)
groups
groups [myuserid]
sudo udevadm control --reload
sudo udevadm trigger