我正在尝试获取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):
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
该udisks d-巴士服务,很明显,仅报告磁盘。
只需直接监视udev(通过libudev,通过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()