web-dev-qa-db-fra.com

Comment désactiver le pavé tactile de l'ordinateur portable lorsque la souris est connectée (et ralentir la dernière)?

Je fais pas avoir function keyfn pour ça :( .

Des idées? Peut-être qu'il y a des paramètres ou des commandes?


Les autres sujets n'étaient PAS utiles:

  • gpointing-device-settings (le paramètre de désactivation automatique est décoché);
  • kde-config-touchpad (ne peut pas être installé seul);
  • aucune idée de comment utiliser udevd.
8
Esamo

SOLUTION - pas automatique

Le script ci-dessous, une fois exécuté, sera désactivera le pavé tactile si une souris est connectée et affichera une notification.

touchpad_id=$(xinput | grep -i "touchpad" | cut -f2 | cut -d '=' -f2);


if xinput | grep -i "mouse" | grep -i "pointer"

    then xinput set-prop $touchpad_id "Device Enabled" 0 |
         notify-send "Disabling the touchpad..." ""

    else xinput set-prop $touchpad_id "Device Enabled" 1 |
         notify-send "The touchpad is now enabled." ""

fi

Ajoutons aussi une situation inverse, bien que dans mon cas, le pavé tactile soit activé lors de la déconnexion de la souris. J'ai sauvegardé le script dans un fichier et je l'exécute à partir de la section Unity LauncherTerminal après chaque branchement de la souris.


AVANCÉ

  1. Plus de souris?

    Précisez quelle mouse doit désactiver le pavé tactile en développant la valeur dans le fragment "mouse", en fonction de la liste de périphériques xinput.

  2. La souris effrayée court d'un bord à l'autre?

    Je devais exécuter une commande supplémentaire pour la souris - décroissante cursor acceleration car il est réglé follement sur 10 à chaque connexion. En fait, au bout d’un moment, j’ai créé un script de détection automatique (il obtient l’identifiant de la souris et son avantage pour la vélocité; je ne sais pas pour ce qui est de la performance de cut) ...

    touchpad_id=$(xinput | grep -i "touchpad" | cut -f2 | cut -d '=' -f2);
    mouse_id=$(xinput | grep -i "mouse" | grep -i 'pointer' | cut -f2 | cut -d '=' -f2);
    mouse_prop=$(xinput list-props $mouse_id | grep -i "velocity" | cut -f2 | cut -d '(' -f2 | cut -d ')' -f1 );
    
    
    if xinput | grep -i "mouse" | grep -i "pointer"
    
        then xinput set-prop $touchpad_id "Device Enabled" 0 |
             xinput set-prop $mouse_id $mouse_prop 3 |
             notify-send "Disabling the touchpad..." ""
    
        else xinput set-prop $touchpad_id "Device Enabled" 1 |
             notify-send "The touchpad is now enabled." ""
    
    fi
    

Aujourd'hui, j'ai beaucoup appris à faire ci-dessus: D.


QUELQUE PRO?

  1. Serait utile de savoir comment le rendre automatique.

  2. Aussi curieux de savoir pourquoi la configuration de la souris n’est pas sauvegardée (2.).

5
Esamo

Solution - automatique

Merci à Esamo et à son travail.

Pour ajouter des déclencheurs AUTO pour connecter la souris au démarrage:

Créez le fichier: /etc/udev/rules.d/10-local.rules

Remplissez ce contenu: (remplacez $ USER par votre nom d'utilisateur)

ACTION=="add", SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/home/$USER/.Xauthority", ENV{ID_CLASS}="mouse", RUN+="/home/$USER/scripts/touchpad_switcher.sh false"

ACTION=="remove", SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/home/$USER/.Xauthority", ENV{ID_CLASS}="mouse", RUN+="/home/$USER/scripts/touchpad_switcher.sh true"

Exemple:

ACTION=="add", SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/home/dawid/.Xauthority", ENV{ID_CLASS}="mouse", RUN+="/home/dawid/scripts/touchpad_switcher.sh false"

ACTION=="remove", SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/home/dawid/.Xauthority", ENV{ID_CLASS}="mouse", RUN+="/home/dawid/scripts/touchpad_switcher.sh true"

Ensuite, placez votre script où vous voulez. Je l'ai placé dans ~/scripts

touchpad_switcher.sh

#!/bin/sh
enabled=$1
touchpad_id=$(xinput | grep -i "touchpad" | cut -f2 | cut -d '=' -f2);

if $enabled
then
  xinput set-prop $touchpad_id "Device Enabled" 1 | notify-send "The touchpad is now enabled." ""
else
  xinput set-prop $touchpad_id "Device Enabled" 0 | notify-send "Disabling the touchpad..." ""
fi

N'oubliez pas d'ajouter des autorisations d'exécution:

chmod +x touchpad_switcher.sh

Maintenant, redémarrez simplement! (simplement redémarrer udev ne semble pas fonctionner ...)


Quelques autres trucs utiles:

Quelques infos sur règles udev

Exemple d'ArchLinux

question Simlar

9
Dawid Drozd

Ce que @David Drozd a posté ne fonctionne pas pour moi sur Ubuntu 16.04 .

On dirait que le truc avec xinput ne fonctionne pas dans udev. Seul synclient TouchpadOff=[0|1] a fonctionné. De plus, ACTION="remove" ne fonctionnait pas uniquement.

Je l'ai finalement eu quand ajouté ENV{REMOVE_CMD}="/bin/sh -c '/usr/bin/synclient TouchpadOff=0'"

La solution complète: créez le fichier /etc/udev/rules.d/10-local.rules avec la ligne suivante (remplacez $ USER par votre nom d'utilisateur)

ACTION=="add", SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/home/$USER/.Xauthority", ENV{REMOVE_CMD}="/bin/sh -c '/usr/bin/synclient TouchpadOff=0'", RUN+="/bin/sh -c '/usr/bin/synclient TouchpadOff=1' "
1
afternoon_sister