2011-11-21 18 views
6

मैं एक स्क्रिप्ट (लिनक्स पर) बनाने की कोशिश कर रहा हूं जो मेरे माउस में एक रोशनी चालू या बंद कर सकता है।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.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" 

एचटीएच!

संपादित करें: नियम जोड़ने से पहले, अपनी स्क्रिप्ट को sudo के साथ चलाने का प्रयास करें। अगर यह इस तरह से काम करेगा तो यह लगभग निश्चित रूप से एक अनुमति सेटिंग है जिसे उपर्युक्त नियम द्वारा तय किया जाएगा।

+0

मुझे अभी भी "usb.core.USBError: संसाधन व्यस्त" मिलता है जब इसे रूट के रूप में चलाया जाता है और नियम जोड़ा जाता है। लेकिन आपका जवाब मुझे सामान्य उपयोगकर्ता के रूप में स्क्रिप्ट चलाने में सक्षम बनाता है :) – IronMonkey

+0

@IronMonkey - हाँ। यह नियम का विचार है: आपको डिवाइस का नियंत्रण सौंपना! :) यदि यह उत्तर आपके लिए उपयोगी था तो इसे ऊपर उठाना न भूलें और आखिरकार इसे स्वीकार करें यदि यह अच्छी तरह से हल करता है। – mac

4

मुझे यह समस्या भी थी। आपका कोड अच्छी तरह से काम करता है अगर आप पहले "set_configuration" करते हैं और केवल इंटरफ़ेस का दावा करते हैं। यह भी सुझाव दिया गया है: http://libusb.sourceforge.net/api-1.0/caveats.html

+0

एक ही समस्या होने के कारण, यह मेरे लिए समस्या का समाधान करता है। उत्तर में दिए गए लिंक से उद्धरण: _ उपरोक्त विधि [सेट कॉन्फ़िगरेशन, फिर दावा इंटरफ़ेस] काम करता है क्योंकि एक बार इंटरफ़ेस का दावा किया जाता है, कोई भी एप्लिकेशन या ड्राइवर कोई अन्य कॉन्फ़िगरेशन चुनने में सक्षम नहीं होता है। यह भी बताता है कि त्रुटि क्यों फेंक दी गई है: मूल कोड ने डिवाइस पर दावा किया, जिससे इसकी कॉन्फ़िगरेशन लॉक हो गई। – jro

संबंधित मुद्दे