Si le démon HAL est en cours d'exécution (ce qui est vrai pour la plupart des postes de travail Linux modernes), vous pouvez écouter ses signaux DBus. Voici un exemple pour détecter si une souris USB est branché (je n'ai pas un clavier USB à portée de main):
import gobject
import dbus
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
# enumerate all present mice:
manager = dbus.Interface(bus.get_object("org.freedesktop.Hal",
"/org/freedesktop/Hal/Manager"),
"org.freedesktop.Hal.Manager")
mice = set(manager.FindDeviceByCapability('input.mouse'))
def device_added(sender):
dev = dbus.Interface(bus.get_object("org.freedesktop.Hal", sender),
"org.freedesktop.Hal.Device")
try:
caps = dev.GetProperty('info.capabilities')
if 'input.mouse' in caps:
print "mouse plugged in"
mice.add(sender)
except dbus.DBusException:
pass
def device_removed(sender):
if sender in mice:
print "mouse unplugged"
mice.remove(sender)
bus.add_signal_receiver(device_added, signal_name="DeviceAdded")
bus.add_signal_receiver(device_removed, signal_name="DeviceRemoved")
loop = gobject.MainLoop()
loop.run()
Rien de plus simple que de surveiller les modifications matérielles ne doit pas être si difficile et ne nécessite pas de privilèges root. Voir ma réponse ci-dessous comment faire cela en utilisant DBus et HAL. – abbot