Remappage clavier avec udev

J'ai un Chromebook. Sur ce Chromebook, j'ai récemment installé un Linux. Assez rapidement je me suis rendu compte que la touche Verr Maj n'existe pas. J'ai essayé plusieurs solutions, aucune n'était aussi efficace et facile à mettre en place que celle que je veux présenter dans cet article.

Il faut savoir que la modification va se faire au niveau du noyau. C'est grâce à cela que la solution est très universelle et fonctionne toujours, que vous soyez sous Wayland ou XWindow ! 😉

Obtenir les scancodes

Premièrement, il faudra obtenir les scancodes de touches pour lesquelles on souhaite modifier l'action assignée. Pour cela, le plus simple sera d'utiliser l'outil evtest.

Event: time 1675863380.817020, -------------- SYN_REPORT ------------
Event: time 1675863381.142036, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
Event: time 1675863381.142036, type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 1
Event: time 1675863381.142036, -------------- SYN_REPORT ------------
Event: time 1675863381.229360, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
Event: time 1675863381.229360, type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 0
Event: time 1675863381.229360, -------------- SYN_REPORT ------------

La valeur qui nous intéresse est celle de la ligne où il est marqué MSC_SCAN. Le scancode pour ma touche Verr Maj est donc 700e3.

Identifier son clavier de manière unique

Deuxièmement, il nous faut identifier de manière unique le clavier dont le mappage on souhaite modifier. La chaîne qu'il faudra adapter doit ressembler à : evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>.

Pour obtenir les ids du clavier visé on peut utiliser la commande cat /proc/bus/input/devices.

Ajouter un fichier de configuration

Maintenant, on doit mettre tout ça ensemble dans un fichier de configuration sous : /etc/udev/hwdb.d/99-custom-keyboard.hwdb (le nom importe peu) :

evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>*
 KEYBOARD_KEY_scancode1=keycode1
 KEYBOARD_KEY_scancode2=keycode2

Les différents keycodes disponibles sont à trouver dans /usr/include/linux/input-event-codes.h. Il faut les transformer en minuscules 💀

Voici mon fichier de configuration pour vous donner une idée :

evdev:input:b0005v3175p9100e0001*
 KEYBOARD_KEY_700e3=capslock

Pour appliquer les modifications il faut exécuter à la suite :

systemd-hwdb update
udevadm trigger

Ou tout simplement rédemarrer votre PC 😺 Bon courage !