Alterações no dispositivo USB usando o udev e o D-Bus

5

Estou tentando obter uma lista de dispositivos USB atualmente conectados no Ubuntu 10.10 e monitorar as mudanças que acontecem, como dispositivos sendo conectados ou desconectados usando o udev e o D-Bus.

Eu sou relativamente novo em programar usando o D-Bus. Eu vi um exemplo: " Linux: como detect is usb keyboard está conectado e desconectado ". O problema é que ele usa HAL e sei que o HAL está obsoleto.

Encontrei algum código de trabalho, mas ele está funcionando apenas com dispositivos de armazenamento, como pen drives, players de mídia ou unidades de CD-ROM. Eu quero a coisa toda: ratos, teclados, câmeras USB, carregadores; qualquer coisa que esteja conectada ao USB.

Como posso ouvir os eventos do D-Bus para qualquer plug-in e desconectar o dispositivo USB?

Isso é basicamente o que eu tenho agora ( também ):

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()
    
por kicsyromy 24.02.2011 / 21:17

1 resposta

1

Eu não tenho muita experiência com o DBus ou o udev, mas o pyudev parece muito promissor.

    
por jamesadney 24.02.2011 / 23:42