2009-06-03 13 views
5

¿Cómo obtengo la lista de propiedades de interfaz de DBus disponibles?Propiedades de interfaz de DBus

Estoy escribiendo un script que estaría rastreando un tipo específico de conexiones de dispositivos usb. Una forma de distinguir las conexiones a ser rastreadas de todas las conexiones usb supongo que es verificar las propiedades de las interfaces de las señales que DBus está enviando en una conexión usb. Me gustaría obtener la lista de todas esas propiedades para elegir la relevante.

Mi código es:

import sys 
    import dbus 
    from dbus.mainloop.glib import DBusGMainLoop 
    import gobject 

    def deviceAdded(udi): 
     device = bus.get_object("org.freedesktop.Hal", udi) 
     device_if = dbus.Interface(device, 'org.freedesktop.Hal.Device') 
     if device_if.GetPropertyString('info.subsystem') == 'usb_device': 
      # 
      # Properties can be accesed like this: 
      # vendor_id = device_if.GetPropertyInteger('usb_device.vendor_id') 
      # 
      # how to get the list of all properties? 
      # 
      # do something 

    def deviceRemoved(udi): 
     # do something 
     pass 

    if __name__ == "__main__": 
    DBusGMainLoop(set_as_default=True) 
    bus = dbus.SystemBus() 

    bus.add_signal_receiver( 
     deviceAdded, 
     'DeviceAdded', 
     'org.freedesktop.Hal.Manager', 
     'org.freedesktop.Hal', 
     '/org/freedesktop/Hal/Manager') 

    bus.add_signal_receiver( 
     deviceRemoved, 
     'DeviceRemoved', 
     'org.freedesktop.Hal.Manager', 
     'org.freedesktop.Hal', 
     '/org/freedesktop/Hal/Manager') 

    loop = gobject.MainLoop() 

    try: 
     loop.run() 
    except KeyboardInterrupt: 
     print "usb-device-tracker: keyboad interrupt received, shutting down" 
     loop.quit() 
     sys.exit(0) 

Respuesta

2

En primer lugar, compruebe la documentación hal y las fuentes, que están siempre a su amigo.

import dbus 
bus = dbus.SystemBus() 
dev = bus.get_object("org.freedesktop.Hal", u'/org/freedesktop/Hal/devices/computer_logicaldev_input') 
iface = dbus.Interface(dev, 'org.freedesktop.Hal.Device') 
props = iface.GetAllProperties() 
print "\n".join(("%s: %s" % (k, props[k]) for k in props)) 

Como último recurso, siempre puede encontrar las propiedades que le interesan con el comando 'lshal'.

2

En general, puede utilizar el método GetAll en la interfaz org.freedesktop.DBus.Properties.

0

Recientemente encontré el mismo problema (no específicamente con Hal). No estoy seguro de si esto tiene validez universal, pero se puede (al menos muy a menudo) recuperar a través de la interfaz org.freedesktop.DBus.Properties (como se sugirió @daf).

bus = dbus.SystemBus() 
device = bus.get_object(...) 

your_interface = 'org.freedesktop.Hal.Device' # for this example 
props_iface = dbus.Interface(device, 'org.freedesktop.DBus.Properties') 
properties = props_iface.GetAll(your_interface) #properties is a dbus.Dictionary 
Cuestiones relacionadas