2011-11-21 122 views
6

我正在試圖製作一個腳本(在Linux上),可以打開或關閉我的鼠標光源。pyusb:無法設置配置

這是我的代碼至今:

import usb.core 
import usb.util 
import sys 
interface = 0 
dev = usb.core.find(idVendor=0x1532, idProduct=0x0017) 

def main(): 

     if dev is None: 
      print "device not found" 

     else: 
     print "device found" 
     if dev.is_kernel_driver_active(interface) is True: 
      print "but we need to detach kernel driver" 
      dev.detach_kernel_driver(interface) 
      print "claiming device" 
      usb.util.claim_interface(dev, interface) 


      print "release claimed interface" 
      usb.util.release_interface(dev, interface) 
      print "now attaching the kernel driver again" 
      dev.attach_kernel_driver(interface) 
      print "all done" 
return 0 

if __name__ == '__main__': 
    main() 

這工作正常,但如果我嘗試做一個:dev.set_configuration()

claim_interface後(DEV,接口)

腳本返回錯誤:usb.core.USBError:資源忙

爲什麼我分離內核驅動程序後仍然很忙?

回答

6

不知道這是否會解決,但你的鼠標設置正確的udev規則?我有一個類似的問題與自定義設備的朋友爲我做的,我解決了通過添加規則,如:在我/etc/udev/rules.d文件夾

SUBSYSTEM !="usb_device", ACTION !="add", GOTO="device_rules_end" 
SYSFS{idVendor} =="1532", SYSFS{idProduct} =="0017", SYMLINK+="mydevice" 
MODE="0666", OWNER="<your-username-here>", GROUP="root" 
LABEL="device_rules_end" 

HTH!

編輯:添加規則之前,嘗試用sudo運行腳本。如果它能以這種方式工作,它幾乎肯定是一個權限設置,將由上述規則修復。

+0

我仍然得到。但你的答案讓我能夠以普通用戶的身份運行腳本:) – IronMonkey

+0

@IronMonkey - 是的。這是規則的想法:將設備的控制權分配給您! :)如果這個答案對你有用,不要忘記加註並最終接受它,如果它解決了問題。 – mac

4

我也有這個問題。如果你先設置了「set_configuration」,那麼你的代碼運行良好,然後才聲明該接口。這也是爲了這裏建議:這是根和添加的規則運行的時候:「資源忙usb.core.USBError」 http://libusb.sourceforge.net/api-1.0/caveats.html

+0

有完全相同的問題,這爲我解決了這個問題。從答案中的鏈接引用:_上述方法[set config,然後聲明接口]工作,因爲一旦接口聲明,沒有應用程序或驅動程序能夠選擇其他配置。這也解釋了爲什麼會引發錯誤:原始代碼聲稱該設備,從而鎖定其配置。 – jro