USB设备UDev和D-BUS

发布于 2021-01-29 18:17:01

我正在尝试获取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

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看