web-dev-qa-db-ja.com

udevとD-Busを使用したUSBデバイスの変更

Ubuntu 10.10で現在プラグインされているUSBデバイスのリストを取得し、udevとD-Busを使用してデバイスがプラグインまたはプラグアウトされるなどの変更を監視しようとしています。

私はD-Busを使用したプログラミングは初めてです。私は1つの例を見ました: " Linux:USBキーボードが接続されているかどうかを検出する方法 "。問題は、HALを使用していることであり、HALが非推奨であることは知っています。

動作するコードをいくつか見つけましたが、USBスティック、メディアプレーヤー、CD-ROMドライブなどのストレージデバイスでのみ動作しています。マウス、キーボード、USBカメラ、充電器など、すべてが必要です。 USBに接続されているもの。

USBデバイスのプラグアンドプラグのD-Busイベントをリッスンするにはどうすればよいですか?

これは基本的に私が今持っているものです( also ):

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

DBusやudevの経験はあまりありませんが、 pyudev は非常に有望です。

2
jamesadney