2011-11-21 19 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() 

これは正常に動作しますが、私が何をしようとした場合:claim_interface(DEV、インタフェース後dev.set_configuration()

を)

スクリプトがエラーを返します: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

これをルートとして実行し、ルールを追加しても、私はまだ "usb.core.USBError:Resource busy"を取得します。しかし、あなたの答えは、私は普通のユーザーとしてスクリプトを実行することができます:) – IronMonkey

+0

@アイロンモンキー - はい。それはルールの考え方です:あなたにデバイスの制御を割り当てる! :)この答えが役に立つ場合は、upv​​oteを忘れずに最終的にそれを受け入れてください。 – mac

4

この問題もありました。 "set_configuration"を最初に実行してからインタフェースを要求した場合、コードは正常に動作します。 http://libusb.sourceforge.net/api-1.0/caveats.html

+0

まったく同じ問題を抱えているので、これは私の問題を解決します。答えのリンクから引用:_上記の方法[set config、then claim interface]は、インターフェースが要求されるとアプリケーションやドライバが別の設定を選択できないために機能します。これはまた、エラーがスローされる理由を説明します。コードがデバイスを要求し、その設定をロックします。 – jro

関連する問題