使用 udev 和 D-Bus 更改 USB 设备

使用 udev 和 D-Bus 更改 USB 设备

我正在尝试获取 Ubuntu 10.10 中当前插入的 USB 设备列表并监控发生的变化,例如使用 udev 和 D-Bus 插入或拔出设备。

我对使用 D-Bus 进行编程还很陌生。我看到过一个例子:“Linux:如何检测 USB 键盘是否插入和拔出“。问题是它使用了 HAL,而我知道 HAL 已经被弃用了。

我找到了一些可用的代码,但它只适用于 USB 记忆棒、媒体播放器或 CD-ROM 驱动器等存储设备。我想要所有的东西:鼠标、键盘、USB 摄像头、充电器;任何插入 USB 的东西。

如何监听任何 USB 设备插入和拔出的 D-Bus 事件?

这基本上就是我现在所拥有的():

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()

答案1

我对 DBus 或 udev 没有太多经验,但是皮尤代夫看起来很有希望。

相关内容