Les touchpad sont pratiques lorsque l'on ne dispose pas de suffisamment de place pour utiliser une souris. Mais ils sont aussi une source d'ennuis lorsque vous tapez quelque chose que vous perdez le focus chaque fois que vos mains touchent le touchpad. C'est pourquoi je préfère désactiver le touchpad lorsque j'utilise une souris. Voici une méthode pour désactiver automatiquement un touchpad synaptics en utilisant udev et synclient.

Autoriser le contrôle du touchpad

Dans votre fichier /etc/X11/xorg.conf file, rendez-vous dans les sections InputDevice et cherchez un item "Synaptics Touchpad". Ajoutez-y l'option SHMConfig :

Option "SHMConfig" "on"

Ceci va permettre l'utilisation des commandes

~$ synclient TouchPadOff=1

et

~$ synclient TouchPadOff=0

utilisées pour activer ou désactiver le touchpad.

Détecter les événements provenant d'une souris

Au branchement d'une souris, des informations sont enregistrées dans /var/log/syslog:

kernel: usb 3-1: new low speed USB device using uhci_hcd and address 8
kernel: usb 3-1: configuration #1 chosen from 1 choice
kernel: input: Logitech USB Optical Mouse as /class/input/input14
kernel: input: USB HID v1.11 Mouse [Logitech USB Optical Mouse] on usb-0000:00:1d.0-1

Nous allons nous servir de ces informations pour créer une règle udev. D'avantage d'informations sont disponibles avec :

~$ udevadm monitor --kernel
KERNEL[1284501196.096508] add      /devices/pci0000:00/0000:00:1d.0/usb5/5-1 (usb)
KERNEL[1284501196.099346] add      /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0 (usb)
KERNEL[1284501196.099413] add      /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0/0003:046D:C01D.0048 (hid)
KERNEL[1284501196.115797] add      /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0/input/input86 (input)
KERNEL[1284501196.115929] add      /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0/input/input86/mouse2 (input)
KERNEL[1284501196.115974] add      /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0/input/input86/event13 (input)
KERNEL[1284501196.116176] add      /devices/pci0000:00/0000:00:1d.0/usb5/5-1/5-1:1.0/0003:046D:C01D.0048/hidraw/hidraw2 (hidraw)

Création de règles udev

Puisque les modèles de souris sont nombreux il nous faut un script aussi générique que possible. Pour celà la règle udev va récupérer tous les évenements provenant du sous-système "input" et le script s'occupera de regarder le nom de l'équipement pour vérifier qu'il s'agit bien d'une souris.

~$ cat > 90_synaptics_mouse.rules << EOF
# Run switchSynapticsTouchpad.sh when a mouse is plugged (or unplugged)
SUBSYSTEM=="input", ACTION=="*", RUN+="/usr/local/bin/switchSynapticsTouchpad.sh"
EOF

La dernière partie est de créer le script switchSynapticsTouchpad.sh qui va s'occuper d'activer ou désactiver le touchpad en fonction de l'événement reçu.

~$ cat > /usr/local/bin/switchSynapticsTouchpad.sh << EOF
#!/bin/bash
echo "$NAME" | grep -qi "mouse"
if [ $? -eq 0 ]; then
export DISPLAY=:0.0
USER=`who | grep -m 1 $DISPLAY | awk '{print $1}'`
export XAUTHORITY=/home/$USER/.Xauthority
case $ACTION in
add)
/usr/bin/synclient TouchpadOff=1
;;
remove)
/usr/bin/synclient TouchpadOff=0
;;
esac
fi
EOF
~$ chmod +x /usr/local/bin/switchSynapticsTouchpad.sh

Le programme synclient doit avoir accès aux variables d'environnement DISPLAY et XAUTHORITY pour contrôler le driver synaptics sur le serveur X courant. Ici, nous supposons qu'il n'y a qu'un seul utilisateur connecté au serveur X local.

Et voilà, plus de comportement ératique de la souris Wink!