#!/usr/bin/python global DeviceName, AddAction, RemoveAction, bus, hal_manager #DeviceName = 'usb_device_15ca_c3_noserial_if0_logicaldev_input' DevicePattern = r'usb_device.*_input' DeviceCap = 'input.mouse' AddAction = '/usr/bin/gconftool --set --type=bool /desktop/gnome/peripherals/mouse/touchpad_enabled false' RemoveAction = '/usr/bin/gconftool --set --type=bool /desktop/gnome/peripherals/mouse/touchpad_enabled true' import dbus # needed to do anything import dbus.decorators # needed to receive messages import dbus.glib # needed to receive messages import gobject # needed to loop & monitor import os # needed to import re, time DeviceRe = re.compile(DevicePattern, re.IGNORECASE | re.DOTALL) #@dbus.decorators.explicitly_pass_message def add_device(*args, **keywords): Path = args[0].split('/') device_obj = bus.get_object('org.freedesktop.Hal', args[0]) device = dbus.Interface(device_obj, dbus_interface = "org.freedesktop.Hal.Device") cap = device.QueryCapability(DeviceCap) if cap and DeviceRe.match(Path[-1]) : os.system(AddAction) #@dbus.decorators.explicitly_pass_message def remove_device(*args, **keywords): Path = args[0].split('/') try : device_obj = bus.get_object('org.freedesktop.Hal', args[0]) device = dbus.Interface(device_obj, dbus_interface = "org.freedesktop.Hal.Device") cap = device.QueryCapability(DeviceCap) except : # assume true, since device might be already removed cap = True if cap and DeviceRe.match(Path[-1]) : # Device found os.system(RemoveAction) bus = dbus.SystemBus() # connect to system bus hal_manager_obj = bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') hal_manager = dbus.Interface(hal_manager_obj, 'org.freedesktop.Hal.Manager') # Add listeners for all devices being added or removed bus.add_signal_receiver(add_device, 'DeviceAdded', 'org.freedesktop.Hal.Manager', 'org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') bus.add_signal_receiver(remove_device, 'DeviceRemoved', 'org.freedesktop.Hal.Manager', 'org.freedesktop.Hal', '/org/freedesktop/Hal/Manager') # Run remove action once to enable touchpad os.system(RemoveAction) time.sleep(1) # Find mouse first udis = hal_manager.FindDeviceByCapability('input.mouse') for udi in udis : Path = udi.split('/') if DeviceRe.match(Path[-1]) : # Check if this is our prefer mouse os.system(AddAction) break # no need to keep looking # monitor loop = gobject.MainLoop() loop.run()