Rooot.net

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille
The great thing about a computer notebook is that no matter how much you stuff into it, it doesn't get bigger or heavier.
Home Geek stuff Linux Désactiver un touchpad synaptics lorsqu'une souris est branchée

Désactiver un touchpad synaptics lorsqu'une souris est branchée

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!

Commentaires
Ajouter un nouveau Rechercher
Jeff Duhamel  - http://www.rooot.net/fr/geek-stuff/linux/35-desact   |181.66.156.xxx |2015-05-30 15:20:18
Bonjour,
J'ai appliqué cette méthode, mais j'ai rencontré toutefois un petit
problème:
J'ai été obligé de remplacer explicitement le "$USER" par
mon pseudo utilisateur. sinon, ça ne fonctionne pas et je ne comprend pas
pourquoi.
En appliquant dans un terminal la commande:
"echo `who | grep -m 1
$DISPLAY | awk '{print $1}' ", la réponse est bien "mimo", mon
pseudo d'utilisateur, mais je n'arrive pas à faire la substitution selon votre
méthode sauf en appliquant directement "mimo" á la place de
"$USER". Ce serait sympa de me souffler une solution, car je ne suis pas
un pro avec bash.
Merci d'avance, cordialement.
Ecrire un commentaire
Nom:
Email:
 
Website:
Titre:
BBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Saisissez le code que vous voyez.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."