Comment désactiver le touchpad lors de l'utilisation de trackpoint sur un Thinkpad?

21

Les Thinkpad (par exemple X230 que j'utilise) ont à la fois un trackpoint et un pavé tactile. Le pavé tactile est désactivé lors de la frappe.

Cependant, lorsque j'utilise le trackpoint, je touche souvent le pavé tactile également et génère des clics de souris que j'aimerais éviter. Quelqu'un a-t-il une idée de la façon de désactiver les clics de souris sur le pavé tactile lorsque le trackpoint est utilisé?

EDIT: aussi, quelqu'un peut-il expliquer comment fonctionne l'option de désactivation du pavé tactile lors de la frappe? Que fait-on en coulisses? S'agit-il d'une commande de configuration xinput, et si oui, laquelle?

EDIT2: clarification; la désactivation manuelle du pavé tactile (même avec un raccourci) n'est pas le problème ici. Cela devrait fonctionner comme l'option "désactiver le touchpad lors de la frappe", car j'utilise le Touchpad et le Trackpoint de manière interchangeable (le plus souvent, j'utilise le Touchpad pour le défilement et le Trackpoint pour le déplacement du curseur).

janvier
la source
Ce serait intéressant. La disposition du clavier contribue à des gestes parasites gênant le bon fonctionnement. Je ne pense pas que ce soit possible avec les options actuelles, mais peut-être à l'avenir? Je trouve que je dois utiliser deux mains pour taper et pointer, cambrant ma main droite pour éviter de brosser / pousser le trackpad.
fleamour
Pour le moment, j'ai désactivé les clics de souris avec le pavé tactile - je trouve que dans la plupart des cas, j'utilise de toute façon les boutons sur le dessus du pavé tactile.
Janvier

Réponses:

10

Désactiver le pavé tactile lorsque le clavier est en cours d'utilisation

Cette fonction est effectuée par l' syndaemonutilitaire, à partir du xserver-xorg-input-synapticspackage. Vous pouvez définir des options telles que la durée d' inactivité, la fréquence d'interrogation, etc. (voir l' aide à l'exécution ):

Utilisation: syndaemon [-i idle-time] [-m poll-delay] [-d] [-t] [-k]
  -i Combien de secondes attendre après la dernière pression de touche avant
     activer le pavé tactile. (la valeur par défaut est 2,0 s)
  -m Combien de milli-secondes à attendre jusqu'au prochain sondage.
     (la valeur par défaut est 200 ms)
  ...
  -t Désactiver uniquement le tapotement et le défilement, pas les mouvements de souris.

Voici le code source de syndaemon.c.

  • Les fonctions importantes sont keyboard_activity(...)etmain_loop(...)
  • keyboard_activityutilise l'appel de l' API XQueryKeyMap pour obtenir l'état actuel du clavier (1 bit par touche), puis compare l'état au dernier (ancien) état; s'ils sont différents, il renvoie 1
  • main_loopinterroge keyboard_activitytoutes les mmillisecondes, et en fonction du "dernier temps d'activité" et s'il keyboard_activityrenvoie vrai ou faux, il décide de désactiver ou d'activer le pavé tactile.
  • La dp_get_devicefonction illustre comment les périphériques d'entrée X sont énumérés; vous devriez pouvoir modifier cela et la keyboard_activityfonction pour vérifier également toute activité de point de suivi.

  • L' xinputoutil répertorie les appareils et les ID, par exemple "

    ID de pointeur de noyau virtuel = 2 [pointeur principal (3)]
    ⎜ ↳ Noyau du pointeur XTEST noyau virtuel = 4 [pointeur esclave (2)]
    ⎜ ↳ SynPS / 2 Synaptics TouchPad id = 11 [pointeur esclave (2)]
    ⎜ ↳ TPPS / 2 IBM TrackPoint id = 12 [pointeur esclave (2)]

  • Vous pouvez obtenir ceci (l'ID) via la fonction XListInputDevices

  • Après cela, vous devez obtenir un descripteur de périphérique à partir de l'ID à l'aide de XOpenDevice
  • Ensuite, vous utilisez la fonction XQueryDeviceState pour obtenir les coordonnées du pointeur TrackPoint; similaire à la boucle existante, vous l'interrogez de temps en temps et vérifiez si les coordonnées ont changé (c'est-à-dire que le TrackPoint est utilisé), et utilisez-le pour activer ou désactiver le pavé tactile
  • Vous pouvez utiliser l' xinpututilitaire avec le query-statecommutateur et l'ID de périphérique pour vérifier si votre programmation est correcte, par exemple:

    $ xinput query-state 12
    2 cours:
    ButtonClass
    bouton [1] = haut
    bouton [2] = haut
    bouton [3] = haut
    bouton [4] = haut
    bouton [5] = haut
    bouton [6] = haut
    bouton [7] = haut
    Mode ValuatorClass = Proximité relative = In
    évaluateur [0] = 854
    évaluateur [1] = 867
    
  • Vous êtes intéressé par les valeurs de l' évaluateur , qui sont les coordonnées X et Y du TrackPoint
  • Voir la xinputsource pour plus de conseils
  • Pour modifier et reconstruire ce package:

    1. Obtenez la source avec apt-get source...
    2. Apportez vos modifications à tools/syndaemon.c
    3. Désactivez les syndaemoncorrectifs existants en commentant les lignes 118...et124...debian/patches/series
    4. Construisez votre package modifié avec dpkg-buildpackage -us -ucet les fichiers deb seront dans le répertoire parent.
ish
la source
1
Étant donné que la prime expirera dans trois jours, j'aurais un accord avec vous (à moins qu'une meilleure réponse n'apparaisse): je vous attribuerai la prime si vous me dirigez vers l'API pour interroger un périphérique par l'identifiant xinput et donner un lien vers une page décrivant comment créer un paquet deb à partir de sources modifiées. Ensuite, je serais en mesure d'appliquer cette approche. Serait-ce OK?
Janvier
Désolé, je suis parti. Cela semble bien, je vais essayer de trouver les informations et de modifier la réponse dans quelques heures.
ish
pas de soucis! ça va
janvier
1
Comme promis, vous obtenez la prime. Cependant, je n'accepte pas la réponse, car je dois d'abord coder la solution.
Janvier
1
@Janvier, vous ne savez pas encore si vous avez réussi à coder votre solution? J'ai patché syndaemon pour prendre en charge la surveillance du trackpoint. github.com/eyko/xf86-input-synaptics ( validez ici github.com/eyko/xf86-input-synaptics/commit/… ) Afin de surveiller le TrackPoint, vous devez passer l'indicateur d'option -T lors de l'exécution de syndaemon.
Vince
4

La première chose à faire est de connaître l'ID de votre pavé tactile. Pour ce faire, procédez comme suit

Premier terminal ouvert et exécutez cette commande

~$ xinput --list

Ici, nous obtenons ceci Touchpad id = <id Number>

Après cela, ouvrez les raccourcis clavier, puis ajoutez cette commande ci-dessous avec vos raccourcis clavier.

# Disable Touchpad:
xinput set-prop <id number> 'Device Enabled' 0

# Enable Touchpad:
xinput set-prop <id number> 'Device Enabled' 1

entrez la description de l'image ici entrez la description de l'image ici

nouvel utilisateur
la source
Merci, mais désactiver manuellement le pavé tactile n'est pas le problème ici (même avec un raccourci), et je sais comment le faire. L'idée est de désactiver automatiquement le pavé tactile lorsque Trackpoint est utilisé, de la même manière le pavé tactile est désactivé automatiquement lorsque le clavier est utilisé (voir le paramètre "désactiver le pavé tactile en tapant" dans les paramètres "Souris et pavé tactile").
Janvier
0

Voici une solution low-tech qui pourrait être mauvaise pour la consommation d'énergie (le patch syndaemon -T ne fonctionnait pas pour moi).

#!/bin/sh

TRACKPOINT_DEV="TPPS/2 IBM TrackPoint"
SLEEP_TIME=5

OLD_XY=0,0,
while true; do
  NEW_XY=`xinput query-state "$TRACKPOINT_DEV" |grep valu|awk 'BEGIN { FS = "=" } ; {print $2 ","}'|xargs`
    if [ ! "$OLD_XY" = "$NEW_XY" ]; then
      synclient TouchpadOff=1
    else
      synclient TouchpadOff=0
    fi
    sleep $SLEEP_TIME
    OLD_XY="$NEW_XY"
done

Il doit être un peu chanceux de remarquer que vous utilisez le trackpoint, car il ne peut dire que les coordonnées pendant chaque intervalle de 5 s. En d'autres termes, il est prudent de désactiver le pavé tactile mais ne doit pas le réactiver de manière fiable lorsque le trackpoint est inactif.

Quoi qu'il en soit, cela m'aide beaucoup sur mon ultrabook avec le curseur errant de la presse à paume.

covener
la source