Es Quick&Dirty, pero anda y creo que es extensible:
http://github.com/pcostesi/dbus-reactor/blob/master/main.py
El decorador "handler" en keyboard está inspirado en pyglet. Uno puede subclasear Keyboard para agregar métodos por default (pero tiene que hacer super(MiClase, self).__init__(bus, debug)).
Tranquilamente puede ser así:
keyboard = Keyboard(bus, debug=True)
keyboard.default('platform')
@keyboard.handler
def on_volume_up():
print "Vol up!! :D"
@keyboard.handler
def on_volume_down():
print "Volume down D:"
O así:
class MyKeyboard(Keyboard):
def on_volume_up(self):
print "Vol up!! :D"
def on_volume_down(self):
print "Volume down D:"
La función __dispatcher es lo que primero se me ocurrió.