python - USB 设备 UDev 和 D-BUS

标签 python linux ubuntu dbus udev

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

相关文章:

如果符合特定条件,Python 添加到列表

python - 无法将我的数据写入文件?我看不到错误

python - 检查时间跨度之间的重叠

linux - 新内核是否包含具有所有选项的所有补丁

mongodb - 无法连接到 Ubuntu 上 Golang 中的 Mongo Cloud mongodb 数据库

python - 如何在x轴上显示所有日期值?

c - 对 setjmp/longjmp 使用 volatile 的性能开销

linux - 如何使用 ulimit 限制进程的运行时间?

arrays - 在 shell 脚本中连接数组以创建备份文件路径

c - gdb 库可以使用吗?