【问题标题】:PyUSB dev.set_configuration()PyUSB dev.set_configuration()
【发布时间】:2013-02-11 00:50:17
【问题描述】:

我正在尝试使用 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)

谁能帮我解决这个错误并告诉我如何解决它

谢谢

【问题讨论】:

  • USB 权限由底层操作系统控制。您使用的是 Linux 还是 Windows?如果是 Linux,你正在开发什么发行版?您始终可以尝试使用超级用户/管理员权限运行您的应用程序,但理想情况下,如果可以的话,您会希望避免这种情况。

标签: python ubuntu python-2.7 usb pyusb


【解决方案1】:

我刚刚从标签中意识到您正在使用 Ubuntu。在 Ubuntu 中,USB 设备权限与 USB 设备编号相关联。当 Ubuntu 发布时,它为一些标准设备(例如闪存驱动器)提供了全局权限,以便非 root 用户可以使用这些设备。但是,它不会全局解锁 USB 设备,因为某些 USB 设备可能是有害的。请参阅this post 了解如何修改 Ubuntu 配置(特别是 /etc/udev/rules.d/40-basic-permissions.rules)以允许非 root 用户使用您的设备。

【讨论】:

    【解决方案2】:

    你必须做 - 在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      相关资源
      最近更新 更多