Gérer le touchpad d'un ordinateur portable

Sur un ordinateur portable le touchpad est utile mais n'est pas aussi pratique qu'une souris "classique" surtout avec certains logiciels (création ou retouche d'image par exemple). De plus, lors de l'utilisation du clavier il arrive fréquemment que l'on effleure la surface sensitive et que l'on modifie quelque chose accidentellement.

Par défaut, X.org ne gère pas de priorité entre les périphériques, il faut donc utiliser quelques commandes pour désactiver le touchpad si une souris externe est connectée.

La commande qui nous sera utile est xinput, à la fois pour lister notre matériel et pour changer son comportement. Débranchez votre souris externe et lancez la commande suivante dans un terminal :

xinput --list

S'affiche alors la liste des périphériques d'entrée : clavier, webcam, bouton d'alimentation, ... Vous devez trouver quelque chose comme "PS/2 Generic Mouse" ou "SynPS/2 Synaptics TouchPad" dans la section "Virtual core pointer" ; il s'agit de celui qui nous intéresse.

Pour chaque périphérique il est possible de lister ses propriétés, toujours avec la même commande :

xinput --list-props "PS/2 Generic Mouse"

Attention à bien utiliser des guillemets ou à échapper les espaces (avec le caractère \). Autre possibilité, utiliser l'identifiant numérique, mais celui-ci n'est pas toujours consistant après chaque démarrage, il ne pourra donc pas être utilisé de manière systématique.

Dans les propriétés figure une nommée "Enabled", qui de manière logique permet d'activer (valeur un) ou désactiver (valeur zéro) notre matériel, encore une fois par le biais de xinput. Il faut indiquer l'identifiant numérique pour cette propriété (qui lui demeure stable) et la valeur souhaitée :

xinput --set-prop "PS/2 Generic Mouse" 144 0

Et le touchpad est désactivé. Pour revenir au comportement normal, seul le dernier argument change :

xinput --set-prop "PS/2 Generic Mouse" 144 1

Une fois les commandes de désactivation et d'activation validées il reste à mettre en place le mécanisme lié au branchement d'une souris externe. Cela s'effectue via udev qui permet d'exécuter des scripts lors de la modification de la configuration matérielle. Pour la distribution Slackware ces scripts se trouvent dans /etc/udev/rules.d. Les noms de fichiers doivent être préfixés par un numéro pour indiquer leur niveau de priorité et porter l'extension .rules. Dans notre cas, ce nom sera 99-mouse.rules. L'écriture des règles pour udev se situant entre l'art et la science, à défaut de donner toutes les explications, vous trouverez directement le code utilisable ci-dessous :

ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/ellendhel/.Xauthority", RUN+="/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0'"
ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/ellendhel/.Xauthority", RUN+="/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 1'"

Pour que le fichier soit pris en compte, vous devrez recharger les règles pour udev : /etc/rc.d/rc.udev reload

Il est nécessaire de déclarer deux variables d'environnement pour le DISPLAY et le fichier XAUTHORITY du fait que ces commandes soient lancées par l'utilisateur root.

Autre particularité, la gestion d'évènement ne prend en compte que la connexion de la souris ; si le système est démarré avec une souris branchée le script ne sera pas exécuté et les deux périphériques (souris et touchpad) seront actifs.

Enfin, ce script sera à adapter dans le cas où plusieurs personnes utilisent la même machine, le chemin vers le fichier XAUTHORITY devant être changé.

publié le 15 avril 2012