PyUSB dev.set_configuration()
我正在尝试使用Python库PyUSB将数据发送到一个USB闪存盘。我的代码如下:
import usb.core
import usb.util
# find our devices
#dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001)
dev = usb.core.find(idVendor=0x090c, idProduct=0x1000)
# was it found?
if dev is None:
raise ValueError('Device not found')
# set the active configuration. With no arguments, the first
# configuration will be the active one
dev.set_configuration()
# get an endpoint instance
cfg = dev.get_active_configuration()
interface_number = cfg[(0,0)].bInterface_number
alternate_setting = usb.control.get_interface(interface_number)
intf = usb.util.find_descriptor(
cfg, bTnerfaceNumber = interface_number,
bAlternateSettings = alternate_setting
)
ep = usb.util.find_descriptor(
intf,
# match the first OUT endpoint
custom_match = \
lambda e:
usb.util.endpoint_direction(e.bEndpointAddress) == \
usb.util.ENDPOINT_OUT
)
assert ep is not None
# write the data
ep.write('test')
但是我似乎遇到了以下错误:
Traceback (most recent call last):
File "/home/usman/Desktop/c_code/libusb_test_data/pyusb_code/send_data_rev_one.py", line 14, in <module>
dev.set_configuration()
File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 554, in set_configuration
self._ctx.managed_set_configuration(self, configuration)
File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 91, in managed_set_configuration
self.managed_open()
File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 70, in managed_open
self.handle = self.backend.open_device(self.dev)
File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 494, in open_device
_check(_lib.libusb_open(dev.devid, byref(handle)))
File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 403, in _check
raise USBError(_str_error[ret], ret, _libusb_errno[ret])
USBError: [Errno 13] Access denied (insufficient permissions)
有没有人能帮我看看这个错误,并告诉我该怎么解决?
谢谢!
2 个回答
0
在Ubuntu上,你需要做以下操作:
sudo usermod -a -G uucp YOURUSER
sudo usermod -a -G dialout YOURUSER
然后你要执行
sudo echo "SUBSYSTEM==\"usb\", ATTR{idVendor}==\"YOURVENDOR\", ATTR{idProduct}==\"YOURID\", MODE=\"666\"">/etc/udev/rules.d/99-YOURDEVICENAME.rules
在你的例子中:
sudo echo "SUBSYSTEM==\"usb\", ATTR{idVendor}==\"090c\", ATTR{idProduct}==\"1000\", MODE=\"666\"">/etc/udev/rules.d/99-YOURDEVICENAME.rules
4
我刚刚注意到你在使用Ubuntu系统。 在Ubuntu中,USB设备的权限是和设备编号相关的。 当Ubuntu系统出厂时,某些标准设备(比如闪存驱动器)会有一些全局权限,这样普通用户也能使用它们。 不过,Ubuntu并不会对所有USB设备都开放权限,因为有些USB设备可能会带来安全隐患。 如果你想了解如何修改Ubuntu的设置(特别是文件/etc/udev/rules.d/40-basic-permissions.rules),以便让普通用户也能使用你的设备,可以查看这篇帖子。