GNU/Linux et XKB/Xorg offrent une grande souplesse quant il s'agit de devoir modifier la disposition des touches d'un clavier. La longue histoire de l'environnement mais surtout la multitude de plate forme sur lequel il fonctionne, a fait évolué cet aspect jusqu'à fournir un véritable langage de définition avec xkb. Voyons donc comment exploiter cela lorsque l'on tombe sur une machine au clavier peu ou mal reconnu.
Lorsque vous pressez une touche sur votre clavier, disons la touche A, sa position est transmise à Linux par le contrôleur USB (module usbhid) ou par le contrôleur du port PS/2 (module gêrant la puce ancestrale i8042) sous la forme d'un scan code composé de deux chiffres. Dans notre cas Linux recevra 0x10 0x90 (0x signifiant de l'hexadécimal).
A partir de là il y a deux circuits possibles. Le premier est celui qui mène à la console. Dans ce cas, Linux converti le scan code en un key code selon une table prédéfine. Pour notre touche A, cela nous donne 16.
Ensuite ce key code est converti en un caractère ou un contrôle par une table de conversion. Ces tables, ou du moins les fichiers qui les décrivent, se trouve en /usr/lib/kbd/keymaps. C'est ainsi que la touche A devient le code ASCII 97, puis le caractère a affiché dans la console.
Une batterie de commandes permettent de lister le mapping courrant (
Ainsi, si par exemple en utilisant un disque d'urgence (mode rescue), vous vous retrouvez avec un clavier QWERTY, un loadkey fr, peut grandement aider...
Bon, la console c'est bien sympathique mais comment tout cela fonctionne t-il sous X ? Et bien de la même manière, en beaucoup plus complexe. Sous X, le module chargé du clavier est XKB. Comme Linux, XKB s'alimente à la source, aux scan codes. Et comme Linux, il dispose d'une table qui va permettre la conversion de ces scan codes en key codes. Seulement ce ne sont pas les mêmes correspondance, évidement
.
Ainsi notre touche A, a cette fois pour code 24. Grâce à une table, XKB va ensuite transforme ce key code en un key code symbolique. La liste de ces valeurs peut être consultée dans le fichier /usr/share/X11/xkb/keycodes/xfree86 où l'on trouve la ligne :
L'interêt du key code symbolique est qu'il permet de séparer d'un côté les spécificités d'un modèle de clavier, de l'autre, nous allons le voir, la disposition de ce clavier. Par exemple, pour un clavier de Mac, le key code de la touche A est 20, mais pour le mac, comme pour le PC, le key code symbolique est le même, à savoir AD01. Enfin j'utilise le terme symbolique car AD01 n'est pas un chiffre en hexadécimal, mais bien un identifiant. Par exemple le key code symbolique de la touche
Comme évoqué plus haut, le key code symbolique permet la séparation entre spécificité materielles et disposition du clavier. Cela implique qu'il existe une seconde table de conversion qui elle fait le lien entre key code symbolique et un caractère ou contrôle. On apelle cela un Key Sym. Ainsi que le clavier soit celui d'un PC, d'un Mac, ou d'un Amiga, le keySym du key code symbolique AD01 sera toujours a. On peut donc avoir un même fichier de description des positions pour un clavier de AZERTY de Mac et de PC.
D'ailleurs, lorsque sous Gnome vous allez dans le paramétrage du clavier, vous avez bien choisir d'abord un modèle, puis seulement ensuite, une disposition. Il en va de même dans le fichier /etc/X11/xorg.conf :
Ici le modèle physiques (la table key codes / key codes symbolique est celle d'un clavier générique PC104, et la disposition (la table key code symbolique / key sym, est celle d'un clavier AZERTY.
L'ensemble des fichiers responsables des dispositions de clavier est stocké dans le dossier /usr/share/X11/xkb/symbols et une liste des symboles, les key syms disponibles, peut être trouvée ici.
Maintenant, comme pour la console, il est possible de modifier la disposition du clavier, soit de manière temporaire grâce à l'utilitaire xmodmap, soit en créant son propre fichier de conversion et en le chargeant avec via l'interface de Gnome, ou par la commande setxkbmap.
xmodmap ne tombe pas du placard, c'est en fait l'outil d'origine pour modifier la disposition des touches et ce bien avant Xorg, à l'époque de XFree86. Et même si l'utilitaire est amené à disparaître au profit d'xkb, il reste pratique pour hacker rapidement un clavier.
A titre d'exemple, nous allons créer un fichier .xmodmap permettant de rendre accessible les accents sur le clavier QWERTY de U810 et de modifier au passage quelques "erreurs" de design. Cela consiste à :
Voilà, c'est tout et c'est déjà pas mal. Voyons comment cela se traduit en langage xmodmap :
Nous retrouvons dans ce listing nos key code que vous pouvez retrouver grâce à l'utilitaire xev ou encore en utilisant la commande xbindkeys -mk.
Ensuite, nous avons une série de 1 à 4 keySyms. Le premier correspond à la touche pressée, le second à la même touche mais avec Shift, le troisième avec la touche AltGr, et le quatrième correspond à Shift+AltGr.
Le keycode 49 est un peu spécial car faisant appel à ce que l'on appel les touches mortes. Une touche morte est une touche qui ne produit aucun symbole mais qui va altérer la prochaine touche frappée. Ici nous définissons la touche morte qui ajoute l'accent circonflexe, puis le trema avec le Shift.
Dernier point, la définition de la touche pour Mode_Switch qui n'est autre que ALTGR, sur la touche Windows.
Une fois que votre fichier est créé, il se charge très simplement par la commande
Enfin, vous pouvez à tout moment liste la disposition corrante par la commande xmodmap -pke.
Maintenant que nous maîtrisons la méthode des anciens, passons à celle des modernes, via xkb
Dans le cas de l'U810, le clavier est totalement compatible avec un clavier de PC standard, du moins au regard des keycodes. Nous n'avons donc, pour créer notre nouveau clavier, qu'à créer une simple variante d'un clavier QWERTY anglais (GB).
Pour se faire nous allons modifier le fichier /usr/share/X11/xkb/rules/xorg.xml, y chercher le clavier gb, et ajouter dans la section variantlist, notre variante U810 :
Ceci fait, nous allons maintenant modifier le fichier responsable de la translation key codes symboliques / key syms de la disposition gb. Pour cela, il faut cette fois éditer le fichier /usr/share/X11/xkb/symbols/gb pour y ajouter, par exemple à la fin, la définition de notre variante :
On remarque d'emblée que mise à part la syntaxe différente, il existe de grosse similitude avec le langage de xmodmap. La seule différence tient à ce que l'on n'utilise pas directement les key codes, mais le key codes symboliques. Pour le reste, c'est exactement la même chose qu'avec xmodmap avec une définition plus simple de la touche AltGr en passant par le symbole ISO_Level3_Shift.
Maintenant pour tester notre clavier, nous utilisons la commande bien pratique
Et pour revenir à un clavier AZERTY (si par exemple vous avez branché un clavier USB) :
Il est enfin possible, si vous devez comme moi passer régulièrement de l'un à l'autre, d'ajouter ce nouveau clavier dans le paramétrage de Gnome et d'ajouter dans le panneau du bureau, l'applet Indicateur de Claviers.
Voilà, le petit tour dans le monde des touches et des claviers est terminé et l'U810 me permet de saisir des textes en français.
- répondre
dnartreb89 , le 18 July, 2008 - 05:20Super tuto.
Je le verrais bien en copie sur Linuxpédia, pour pouvoir le retrouver hyper facilement. Je risque d'en avoir besoin d'ici quelques mois. xmodmap me permettra d'ajouter des fonctions a ma télécommande qui est reconnue comme un clavier !
Bonne journée à tous !
- répondre
Ulhume, le 18 July, 2008 - 07:36@dnarte Merci
Le problème des *pedia et autres Wiki, c'est qu'ils n'y a pas de protocole automatique de lien avec des articles. Du coup, soit on le pose et on l'oublie, soit je suis obligé de maintenir plusieurs versions du même tuturiel. C'est un peu "lourd".
- répondre
LHB , le 18 July, 2008 - 09:06Un gros travail que tu as fait là!
Bravo et merci!!
- répondre
the_glu , le 18 July, 2008 - 11:12Huhuhu c'est sympa j'ai pu rajouter les accents sur mon EEE (clavier us) avec ça
- répondre
Omne , le 18 July, 2008 - 13:53Merci pour la super doc, ça nous aurait été utile fut un temps
Allez… je le dis que quitte à taper des accents autant le faire sur une disposition ergonomique et opensource ?
Oui, je le dis ! Il faut essayer le dvorak-bépo ! (et virer son clavier décalé).
Toutes les infos sont là : http://www.clavier-dvorak.org/wiki/Pourquoi_apprendre_le_b%C3%A9po
Et l’accueil : http://www.clavier-dvorak.org
- répondre
Ulhume, le 18 July, 2008 - 14:21@Omne si tu regardes bien, j'en parle déjà du dvorak
et je dis aussi que c'est déjà dans la boîte... En gros t'as pas lu quoi 
Maintenant c'est très sympathique mais le clavier c'est peu comme langue étrangère. Il faut l'apprendre, la parler couramment et apprendre à être capable de passer de l'une à l'autre très facilement. Alors pour ceux qui n'utilisent jamais qu'un seul clavier c'est pas un gros problème, mais lorsque tu passes ta vie chez un client, puis un autre etc.... Rien que la disposition du bloc directionnel qui change entre les anciennes et les nouvelles générations de clavier est un merdier à gérer quant tu développes. Alors toutes les touches, y'a de quoi devenir autiste
- répondre
Omne , le 18 July, 2008 - 14:35Si, si, j’ai lu. Mais je fais de la pub (clairement) spécifique pour le bépo car c’est un dvorak francophone. Et contrairement au Leboute (dvorak-f) il est — ainsi que tous ses outils de génération automatique des pilotes — totalement sous licence libre.
Dans la section installation, il y a des pilotes pour tous les os qui peuvent s’utiliser sans être admin de la machine. Donc une clef usb et c’est bon.
Cela dit, il est certain que cela demande un certain investissement lors de l’apprentissage.
De là a en devenir autiste… non ! (je ne suis pas certain qu’on devienne autiste…) On apprend même assez vite, en fait.
- répondre
Ulhume, le 18 July, 2008 - 14:52@Omne il me semble bien que le bepo est déjà dans les définitions standards de xkb non ? Ligne 463 dans ma définition /usr/share/X11/xkb/symbols/fr
Je veux bien que l'on ne devienne pas réellement autiste, mais passes-tu ton temps à changer de clavier d'un client à l'autre ? C'est ça que je crains moi...
- répondre
Omne , le 18 July, 2008 - 15:10Oui, le bépo est dans Xorg, mais une version ancienne. Nous venons de finir la 067 qui sera sans doute une v1-rc1. Et attendons la v1 stricte pour demander le changement dans Xorg.
Je ne suis pas informaticien… mais kiné ! Alors je ne change pas sans cesse de machine. Quand je vais dépanner un pote, j’ai mon pilote sur la clef (et de plus en plus souvent mon typematrix dans le sac).
Mais je suis bien conscient de ce que tu dis. Est-ce pour autant une raison pour garder une dispo de clavier complètement mal foutue ? Ça se discute.
- répondre
Ulhume, le 18 July, 2008 - 16:09@Omne Tu sais que la largeur de la navettes spatiale américaine est liée à la taille de l'arrière train d'un cheval romain...
Ceci dit, l'idée d'avoir son propre clavier est bonne, j'avoue n'y avoir bêtement jamais pensé...
Poster un nouveau commentaire