web-dev-qa-db-fra.com

Comment puis-je basculer le pavé tactile en fonction de la connexion d'une souris?

Je souhaite que mon pavé tactile soit désactivé automatiquement lorsqu'une souris externe est connectée et activé lorsqu'il n'y en a pas. J'ai essayé d'utiliser touchpad-indicator mais cela échoue lorsque l'ordinateur a été mis en veille avec une souris connectée et réveillé lorsque la souris est déconnectée.

J'ai essayé de transformer le script suivant en démon pour résoudre ce problème, mais je ne parviens pas à le faire fonctionner:

#!/bin/bash

declare -i TID
declare -i MID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
MID=`xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
if [ $MID -gt 0 ]
then
    xinput disable $TID
else
    xinput enable $TID
fi

J'ai essayé start-stop-daemon -S -x ./myscript.sh -b

et setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &

et Nohup ./myscript 0<&- &>/dev/null & et même ./myscript.sh &

Tous ces éléments renvoient un nombre à 4 chiffres, qui, je suppose, devrait être le PID du processus démarré, mais lorsque je lance lxtask il n'y a pas de processus avec ce PID, même si je coche "afficher tous les processus" ". Et bien sûr, ça ne marche pas!

10
mekkanizer

Le script de base dont vous avez besoin est simplement:

#!/usr/bin/env bash

## Get the touchpad id. The -P means Perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

## Run every second
while :
do
   ## Disable the touchpad if there is a mouse connected
   ## and enable it if there is none.
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    ## wait one second to avoind spamming your CPU
    sleep 1
done

Le script ci-dessus bascule le trackpad selon qu'une souris est connectée ou non. Une fois lancé, il fonctionnera indéfiniment et recherchera une souris toutes les secondes, désactivant ou activant le pavé tactile en conséquence.

Enregistrez maintenant le script sous le nom ~/touchpad.sh, rendez-le exécutable (chmod +x ~/touchpad.sh) et ajoutez-le à vos programmes de démarrage de session à interface graphique. Vous n'avez pas spécifié l'environnement de bureau que vous utilisez, mais comme vous avez mentionné lxtask, je suppose que vous utilisez LXDE. Dans tous les cas, voici les instructions pour LXDE et Unity:

  1. Ajouter le script aux fichiers de démarrage automatique de LXDE

    echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file
    

    Assurez-vous de remplacer "PROFILE" par le nom réel de votre profil LXDE, vous pouvez le découvrir en exécutant ls ~/.config/lxsession/.

  2. Ajouter le script aux fichiers de démarrage automatique de Unity

    Ouvrez Startup Applications (recherchez "Démarrage" dans le tableau de bord)

    enter image description here

    Cliquez sur "Ajouter" puis collez le chemin d'accès à votre script dans le champ de commande:

    enter image description here

10
terdon

Ok, j'ai fait une règle udev pour cela, et c'est, comme @terdon l'a dit, une beaucoup plus propre

Donc, grâce à ce guide , j'ai créé un fichier "touchpad_toggle.rules" dans /etc/udev/rules.d/ (nécessite un accès root) et l'a rempli avec deux lignes:

SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/on.sh"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/off.sh"

N'oubliez pas de remplacer "nom d'utilisateur" par votre nom d'utilisateur!

Le contenu de ces scripts Shell est une version castrée du script dans ma question. Exemple - off.sh:

#!/bin/bash

declare -i TID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
xinput disable $TID

Vous devrez utiliser xinput enable $ TID dans le fichier on.sh

Et n'oubliez pas d'ajouter le script dans ma question (ou celle suggérée par @terdon, mais sans boucle) au démarrage automatique de la session, comme il vous l'a dit dans sa réponse.

C'est ça, mais je dois ajouter une chose:

Si vous avez un pavé tactile Synaptics (j'ai Elantech, ce qui ne me convient pas), vous pouvez remplacer vos scripts (chemins sur lesquels vous écrivez après RUN + =) par une simple commande /usr/bin/synclient TouchpadOff=0 et 1

10
mekkanizer