我正在尝试制作一个可以打开或关闭鼠标的脚本(在linux上)。
这是我到目前为止的代码:
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,interface) 之后
脚本返回错误: usb.core.USBError:资源忙
为什么在分离内核驱动程序后它仍然很忙?
答案 0 :(得分:6)
不确定这是否会解决,但是正确设置了鼠标的udev规则吗?我和朋友为我做的自定义设备有类似的问题,我通过添加如下规则来解决:
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"
在我的/etc/udev/rules.d
文件夹中。
HTH!
编辑:在添加规则之前,请尝试使用sudo
运行脚本。如果它会以这种方式工作,那几乎可以肯定是一个权限设置,将由上述规则修复。
答案 1 :(得分:4)
我也有这个问题。如果您首先“set_configuration”并且只声明接口,那么您的代码可以正常运行。这也是此处建议的顺序:http://libusb.sourceforge.net/api-1.0/caveats.html