Capture d'entrée de clé à partir du périphérique d'événements et mappage (la touche de basculement du pavé tactile n'est pas mappée)

10

J'ai un Lenovo IdeaPad Yoga 13 avec Ubuntu 13.10 installé. L'appareil dispose d'un bouton "Toggle TouchPad" sur le clavier ( F5). Les F*boutons du clavier sont inversés (donc pour l'obtenir F5, je dois appuyer sur Fn+ F5, et F5c'est en fait la touche à bascule).

J'ai découvert que le bouton est en fait lu par le clavier (plutôt que par le pavé tactile comme certains appareils), qui est à /dev/input/event3. Donc, en utilisant, sudo input-events 3j'ai pu comprendre que le bouton envoie le code de numérisation 190:

Sortie de sudo lsinput:

/dev/input/event3
   bustype : BUS_I8042
   vendor  : 0x1
   product : 0x1
   version : 43907
   name    : "AT Translated Set 2 keyboard"
   phys    : "isa0060/serio0/input0"
   bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP

Sortie de sudo input-events 3:

23:13:03.849392: EV_MSC MSC_SCAN 190
23:13:03.849392: EV_SYN code=0 value=0
23:13:03.855413: EV_MSC MSC_SCAN 190
23:13:03.855413: EV_SYN code=0 value=0

Aucun autre programme (tel que xev) ne semble pouvoir le lire à l'exception de input-events. Existe-t-il un moyen de mapper ce bouton pour faire basculer le pavé tactile sur mon ordinateur portable? Si oui, comment puis-je le faire?

Hosh Sadiq
la source

Réponses:

7

Il s'avère que le noyau l'a récupéré, mais s'est plaint qu'il n'était pas reconnu.

Pour toute autre personne ayant ce problème ou souhaitant mapper une clé qui n'est pas lue par le système d'exploitation, lisez la suite.

Ouvrez un terminal et exécutez dmesg | grep -A 1 -i setkeycodes. Cela vous donnera plusieurs entrées comme celle-ci:

[    9.307463] atkbd serio0: Unknown key pressed (translated set 2, code 0xbe on isa0060/serio0).
[    9.307476] atkbd serio0: Use 'setkeycodes e03e <keycode>' to make it known.

Ce qui nous intéresse, c'est la valeur hexadécimale après "setkeycodes", dans ce cas c'est e03e. Si vous en avez plusieurs, vous pouvez exécuter tail -f /var/log/kern.log. Une fois que vous l'avez fait, vous pouvez appuyer sur le bouton que vous recherchez, et cela vous donnera la même ligne que ci-dessus, et encore une fois, nous n'avons besoin que de la valeur hexadécimale. Prenez-en note.

Maintenant, exécutez xmodmap -pke | lesset recherchez le mappage approprié. Dans mon cas, je devais mapper cela pour basculer mon pavé tactile, ce qui signifie que j'étais intéressé par la ligne suivante:

keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle

Si vous ne trouvez pas ce qui vous intéresse, lisez également la réponse @Gilles, car vous pouvez également définir des mappages personnalisés, puis lisez la suite (si le noyau le lit, vous n'aurez pas besoin de l'ajouter à xorg.conf. ré)

Maintenant , je courais la commande suivante: sudo setkeycodes [hexadecimal] [keycode], donc dans mon cas qui est devenu: setkeycodes e03e 199.

Vous pouvez maintenant utiliser la ligne suivante pour tester si cela a fonctionné et / ou vous avez le mappage correct:

xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

Lorsque vous exécutez cette commande, vous devez vous concentrer sur la fenêtre nouvellement ouverte ( xev) et vérifier la sortie de la console. Dans mon cas, cela se lisait comme suit:

207 NoSymbol

C'était évidemment faux, car j'ai demandé le code clé 199, il est donc mappé XF86TouchpadToggle. J'ai vérifié à xmodmap -pkenouveau et j'ai remarqué que c'était en keycode 207fait mappé à NoSymbol, et j'ai remarqué qu'il y avait une différence de décalage de 8, j'ai donc réessayé la setkeycodescommande, mais la clé est mappée keycode 191.

sudo setkeycodes e03e 191

Cela a parfaitement fonctionné.

EDIT - la solution que j'ai fournie pour avoir à travailler sur le démarrage ne fonctionne pas. Je vais comprendre cela demain et mettre à jour cette réponse. Pour l'instant, je suppose que vous pouvez l'exécuter manuellement au démarrage.

Hosh Sadiq
la source
1
comment le rendre permanent de façon sympa? (c'est-à-dire après réinitialisation / démarrage)
vak
4

À première vue, l'appareil est un clavier (reconnu dans le logiciel comme distinct du clavier «de base») mais le serveur X ne l'écoute pas.

Essayez d' ajouter une section d'entrée sous/etc/X11/xorg.conf.d . Autrement dit, créez un répertoire /etc/X11/xorg.conf.ds'il n'existe pas déjà et créez un fichier extra-keyboard-buttonsdans ce répertoire contenant

Section "InputClass"
    Identifier "extra-keyboard-buttons"
    Driver "kbd"
    MatchProduct "AT Translated Set 2 keyboard"
EndSection

Je ne suis pas sûr de cette MatchProductligne; si cela ne fonctionne pas, essayez de jouer avec les MatchXXXdirectives .

Une fois ce fichier correctement configuré, lorsque vous démarrez le serveur X, il doit traiter les événements à partir de ce clavier et vous devez voir les événements dans xevet ailleurs. Notez le code clé (je ne suis pas sûr si le code clé X11 sera le même que le code clé matériel dans ce cas) et associez-lui un nom de clé. Vous pouvez le faire via un fichier appelé .Xmodmapdans votre répertoire personnel contenant

keycode 190 = XF86_Launch5

Vous pouvez désormais définir des raccourcis clavier à l' aide de ces touches.

Pour basculer le pavé tactile, utilisez la commande xinput. Courez xinput listpour voir quels périphériques d'entrée sont disponibles et notez le nom de votre pavé tactile (je l'appellerai ci- Touchpaddessous). Exécutez xinput list-props Touchpadpour répertorier ses propriétés; l'un d'eux devrait être appelé «Device Enabled» avec un numéro à côté (par exemple 135). Le script suivant fera basculer le pavé tactile:

#!/bin/sh
device_name='Touchpad'
property=135
flipped_state=$(xinput list-props "$device_name" |
                awk "/\\($property\\)/ {print 1 - \$NF}")
xinput set-prop "$device_name" "$property" "$flipped_state"

Enregistrez-le dans un fichier ~/bin/toggle-touchpadet rendez-le exécutable ( chmod +x ~/bin/toggle-touchpad). Pour le lier à une clé, installez xbindkeys et configurez-le pour exécuter votre script en mettant les lignes suivantes dans ~/.xbindkeysrc:

"toggle-touchpad"
  XF86_Launch5
Gilles 'SO- arrête d'être méchant'
la source
Merci d'avoir répondu. Cela n'a malheureusement pas fonctionné. Je l'ai fait fonctionner, alors n'hésitez pas à jeter un œil à ma propre réponse! :)
Hosh Sadiq