2013-02-25 6 views
3

Я пытаюсь отправить данные на USB-накопитель, используя библиотеку python PyUSB. Код, я использую следующий:PyUSB dev.set_configuration()

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) 

может кто-то ходить мне через эту ошибку и скажите мне, как это исправить

спасибо

+0

Разрешения USB контролируются базовой операционной системой. Вы работаете с Linux или Windows? Если Linux, в какой дистрибутиве вы работаете? Вы всегда можете попробовать запустить приложение с разрешениями суперпользователя/администратора, но в идеале вы захотите избежать этого, если сможете. – Pace

ответ

4

Я только что понял из тегов, которые вы используете Ubuntu. В устройствах Ubuntu USB устройства привязаны к номерам устройств USB. Когда Ubuntu отправляет, он поставляется с глобальными разрешениями для некоторых стандартных устройств (например, флеш-накопителей), чтобы пользователи, не являющиеся root, могли их использовать. Тем не менее, он не разблокирует устройства USB на глобальном уровне, потому что некоторые устройства USB могут быть вредными. Пожалуйста, см. this post, чтобы понять, как изменить конфигурацию Ubuntu (в частности, /etc/udev/rules.d/40-basic-permissions.rules), чтобы ваше устройство могло использоваться пользователями без полномочий root.