我正在尝试获取 Ubuntu 10.10 中当前插入的 USB 设备的列表并监视发生的变化,例如使用 UDev 和 D-BUS 插入或拔出的设备。我对使用 D-BUS 进行编程还很陌生。我看到一个例子:Linux : How to detect is usb keyboard is plugged and unplugged只有那个使用 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()
如有任何帮助,我们将不胜感激。先感谢您, 卡罗塔·罗密欧
最佳答案
udisks显然,D-Bus 服务仅报告磁盘。
只需直接监控 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()
关于python - USB 设备 UDev 和 D-BUS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5109879/