USB设备UDev和D-BUS [英] USB devices UDev and D-BUS
问题描述
我正在尝试获取Ubuntu 10.10中当前插入的USB设备的列表,并监视发生的更改,例如使用UDev和D-BUS插入或拔出设备.我对使用D-BUS进行编程非常陌生.我看到了一个示例: Linux:如何检测是USB键盘被插入和拔出了吗?只有一个人使用HAL,而我知道HAL已过时.我找到了一些有效的代码,对其进行了一些修改,但仅对存储设备(例如USB棒,媒体播放器或CD-ROM设备)不起作用.我希望鼠标,键盘,usb摄像头能为插入USB的任何东西充电,我希望我的程序对此有所了解.这基本上就是我所拥有的( http://moserei.de/2010/01/08/accessing-devicekit-with-dbus-and-python.html ):
I am trying to get a list of currently plugged in USB devices in Ubuntu 10.10 and monitor changes that happen, like devices being plugged in or out using UDev and D-BUS. I'm fairly new to programming using D-BUS. I saw one example: Linux : How to detect is usb keyboard is plugged and unplugged only that one uses HAL and I know that HAL is deprecated. I found some working code, modified it a bit, only it doesn't work for any device only storage devices such as usb sticks, media players or cd-rom devices. I want the whole thing mice, keyboards, usb cameras chargers anything that is plugged in to the USB I want my program to know about it. This is basically what I have ( http://moserei.de/2010/01/08/accessing-devicekit-with-dbus-and-python.html ):
import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop
def device_added_callback(device):
print 'Device %s was added' % (device)
def device_changed_callback(device):
print 'Device %s was changed' % (device)
#must be done before connecting to DBus
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
proxy = bus.get_object("org.freedesktop.UDisks",
"/org/freedesktop/UDisks")
iface = dbus.Interface(proxy, "org.freedesktop.UDisks.Device")
devices = iface.get_dbus_method('EnumerateDevices')()
print '%s' % (devices)
#addes two signal listeners
iface.connect_to_signal('DeviceAdded', device_added_callback)
iface.connect_to_signal('DeviceChanged', device_changed_callback)
#start the main loop
mainloop = gobject.MainLoop()
mainloop.run()
任何帮助将不胜感激.先感谢您, 卡洛塔·罗密欧(Calota Romeo)
Any help would be apreciated. Thank you in advance, Calota Romeo
推荐答案
udisks 显然,D-Bus服务仅报告磁盘.
The udisks D-Bus service, obviously, only reports disks.
只需直接监视udev(通过libudev,通过 pyudev ).
Just monitor udev directly (through libudev, through pyudev).
import pyudev
context = pyudev.Context()
monitor = pyudev.Monitor.from_netlink(context)
observer = pyudev.pygtk.GUDevMonitorObserver(monitor)
observer.connect('device-added', device_added_callback)
observer.connect('device-changed', device_changed_callback)
monitor.enable_receiving()
mainloop = gobject.MainLoop()
mainloop.run()
这篇关于USB设备UDev和D-BUS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!