web-dev-qa-db-fra.com

Changement de périphérique USB avec udev et D-Bus

J'essaie d'obtenir une liste des périphériques USB actuellement connectés dans Ubuntu 10.10 et de surveiller les modifications, telles que les périphériques connectés à l'aide de udev et de D-Bus.

Je suis assez nouveau pour programmer avec D-Bus. J'ai vu un exemple: " Linux: Comment détecter si le clavier USB est branché et débranché ". Le problème est qu’il utilise HAL et je sais que HAL est obsolète.

J'ai trouvé du code qui fonctionne, mais il ne fonctionne qu'avec des périphériques de stockage tels que des clés USB, des lecteurs multimédias ou des lecteurs de CD-ROM. Je veux tout: des souris, des claviers, des appareils photo USB, des chargeurs; tout ce qui est branché à l'USB.

Comment puis-je écouter les événements D-Bus pour n'importe quelle prise et débranchement de périphérique USB?

C’est fondamentalement ce que j’ai maintenant ( aussi ):

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

Je n'ai pas beaucoup d'expérience avec DBus ou udev, mais pyudev semble très prometteur.

2
jamesadney