Apportez votre aide…
Ceci est une ancienne révision du document !
Le clavier et sa relation avec le système
Rappelons que les informations transmises par une touche du clavier au système (pilote clavier, noyau Linux et serveur X) ne sont pas directement liées au symbole graphique ou à l'évènement attaché à cette touche. Par exemple, l'appui sur la touche A de votre clavier ne signifie pas que ce clavier adresse à l'ordinateur quelque code que ce soit représentant le caractère A.
Ce qui est envoyé à l'ordinateur est en réalité une suite de valeur hexadécimales appelées « scan-codes » qui représentent la position physique de la touche sur le clavier et des informations précisant s'il s'agit de l'actionnement ou du relâchement de la touche. C'est le système d'exploitation qui va interpréter ces codes plus ou moins directement et transmettre aux applications un symbole de touche 1).
Ces symboles de touche 2) envoyés aux applications représentent :
- soit des caractères directement affichables, parmi lesquels les lettres et les chiffres ou divers symboles graphiques,
- soit des codes d'évènement ou de fonction que chacune des applications doit interpréter à sa manière.
Dans le détail, les « scan-codes » sont d'abord transformés en codes de touches 3) puis en symboles de touches 4) .
La deuxième étape de l'interprétation fait appel à une table de correspondance entre les codes de touches (qui sont invariants) et les symboles de touches. Cette table de correspondance qui représente la disposition des caractères sur les touches est appelée « agencement de clavier5) » .
Ainsi, si l'agencement choisi est US, la touche marquée A sur votre clavier sera interprétée comme un Q ; si l'agencement choisi est FR la touche sera interprétée comme un A.
Codes de touches (keycodes)
Il existe dans Ubuntu une table (visible ici) qui associe les codes de touche à des noms symboliques censés aider à repérer la touche sur le clavier.
Une ligne de ce fichier sera de la forme :
<AE01> = 10;
Ici cela signifie que la touche alphanumérique (lettre A) est en première position (01) de la ligne E (les lignes sont numérotées de A à E en partant du coté de l'utilisateur et en allant vers l'écran ) et a le code 50.
Une autre ligne de la forme :
<LFSH> = 50;
signifie que la touche majuscule de gauche a le code 50 (LF pour left = gauche et SH pour Shift =Maj) .
Pour faciliter l'utilisation des codes de touche 6) il existe également une table de correspondance (visible ici) qui associe au nom symbolique des touches un nom plus intelligible.
Voici un court extrait de la section "qwerty" de ce fichier:
xkb_keycodes "qwerty" { alias <LatQ> = <AD01>; alias <LatW> = <AD02>;
Pour autant que la section "qwerty" de ce fichier soit expressément spécifiée dans la configuration, la touche <AD01> pourra être désignée également par <LatQ>.
Conversion codes de touche -> symboles de touche
Il existe dans le dossier /usr/share/X11/xkb/symbols, des fichiers qui définissent des tables de correspondance entre les codes de touches et les symboles de touches pour les différentes langues, et dont les sections traitent des différentes variantes de clavier connues, comme par exemple le fichier /usr/share/X11/xkb/symbols/fr pour la langue française.
Ces tables, découpées en sections, se combinent selon des règles d'inclusion et d'ajout bien précises afin que le système puisse ainsi faire face à une combinatoire importante entre types de clavier, langues, variantes.
Pour le cas précis de la redéfinition d'une table de correspondance pour un clavier donné, une table linéaire 7) reprenant l'ensemble des touches sera suffisante.
Par ailleurs, parmi les différentes tables évoquées ci-dessus, celles sélectionnées par l'utilisateur, dans le dialogue des préférences clavier, se combinent au démarrage du système pour former ure table plus vaste dénommée carte du clavier 8).
Si vous n'avez sélectionné qu'une seule table, c'est à dire un seul agencement de clavier, la carte du clavier lui correspondra strictement bien entendu.
Lire la carte du clavier
Si vous voulez, voir la carte du clavier active correspondant à votre seul 9) agencement actuel, saisissez dans un terminal et entrez la commande suivante :
xmodmap -pke | less
Faites défilez les pages avec les flèches de changement de page.
Si vous désirez pouvoir examiner dans le détail cette carte, sauvegardez-là dans un fichier.
Par exemple, si vous souhaitez en disposer sur votre Bureau avec pour nom carte_active vous entrerez la commande :
xmodmap -pke > ~/Bureau/carte_active
.
Touches modificatrices (modifier keys)
Considérez la ligne suivante de la carte du clavier.
keycode 24 = a A æ Æ
Mettez en regard la ligne correspondante issue de la table de correspondance correspondant à votre agencement actuel.
Par exemple pour le clavier français, il s'agira du fichier /usr/share/X11/xkb/symbols/fr dans lequel vous observerez à la section "Autre" :
key <AD01> { [ a, A, æ, Æ ] }; // a A æÆ
Elle sont très cohérentes entre elles et cela paraît normal. Maintenance, dans un éditeur de texte saisissez au clavier la combinaison de touches suivante, en vous basant sur la marquage du clavier, avec les espaces mais sans les parenthèses :
(A) (⇧+A) (Alt Gr+A) (Alt Gr+⇧+A)
Vous obtenez le résultat suivant :
a A æ Æ
Ceci correspond bien à la ligne de définition pour la lettre A du fichier fr et à celle de la carte de clavier active.
Notez que cette façon de réaffecter les touches par des commandes en ligne est perturbante dans la mesure où elle désynchronise la perception que vous avez de votre agencement par les outils graphiques et la réalité.
Nous observons donc par cet exemple, et c'est vrai pour d' autres touches, qu'un même code de touche peut être associé à plusieurs (ici quatre) symboles de touches et que ces symboles de touches sont obtenus en accompagnant l'appui sur la touche par maintien préalable d'autres touches, telles que ⇧, Alt Gr ou la combinaison des deux.
Les touches ⇧ et Alt Gr, qui ne produisent pas d'effet en elles-mêmes mais qui modifient le symbole de touche envoyé par la touche qui les accompagne, sont appelées touches modificatrices 10).
Ceci introduit la notion de niveau de touches avec ici :
- symbole de niveau 1 : a → accessible sans touche modificatrice
- symbole de niveau 2 : A → accessible avec la touche modificatrice ⇧
- symbole de niveau 3 : æ → accessible avec la touche modificatrice Alt Gr
- symbole de niveau 4 : Æ → accessible avec les touches modificatrice Alt Gr+⇧
Groupes
Pour comprendre la notion de groupe, allez maintenant dans le dialogue de préférence de clavier et ajoutez dans cet ordre :
- le clavier anglais US,
- le clavier US International
- le clavier Allemagne Macintosh.
L'indicateur de clavier s'affiche alors dans l'applet de notification général pour vous indiquer le clavier en usage et pour vous permettre d'en changer.
Fermez tous les fichiers précédemment ouvert (notamment le fichier /usr/share/X11/xkb/symbols/fr et votre fichier sauvegarde de carte de clavier ~/Bureau/carte_active ) puis dans un terminal saisissez de nouveau la commande :
xmodmap -pke > ~/Bureau/carte_active
Ouvrez cette sauvegarde de la nouvelle carte active et sélectionnez la ligne correspondant au keycode 24 pour visualiser ceci:
keycode 24 = a A q Q ae AE q Q adiaeresis Adiaeresis q Q guillemotleft guillemotright
Ce qui en clair correspond à :
keycode 24 | a | A | q | Q | æ | Æ | q | Q | ä | Ä | q | Q | « | » |
---|
Le principe de passage des tables de correspondance des différents agencements à la carte active dans le système est imagé ci-après:
Dans la terminologie du serveur X et de son extension XKB, un groupe correspond à l'ensemble des symboles d'un agencement, que l'on obtient par sélection avec l'indicateur de clavier ou une séquence de touche modificatrices. 11)
Mis à part, la particularité signalée dans la note ci-dessus, et en notant GiNj, i étant la valeur du Groupe et j celle du Niveau, la carte présente les données dans cette ordre:
G1N1 | G1N2 | G2N1 | G2N2 | G1N3 | G1N4 | G2N3 | G2N4 | G3N1 | G3N2 | G4N1 | G4N2 | G3N3 | G3N4 | G4N3 | G4N4 |
Principe de gestion du clavier par XKB
Schéma simplifié
Le schéma simplifié de la gestion du clavier par le serveur X avec son module XKB est donné par la figure suivante :
Sur ce schéma, vous remarquerez que :
- Le serveur X n'adresse pas lui même les symboles de touche aux applications. Ce sont Xlib et les toolkits qui le font en utilisant la carte du clavier vue précédemment et en se basant sur les "scancodes" et l'état du clavier contenus dans l'évènement transmis par le serveur X.
- Le serveur X gère une variable appelée état du clavier et communique cette information aux librairies. En pratique, pour gérer cet état du clavier, il utilise le code de touche qui, rappelons le, ne représente pas que des caractères, mais aussi des fonctions à exécuter.
État du clavier et modificateurs
Types de touche
Une notion supplémentaire à connaître pour mieux comprendre la manière dont les tables de symboles de touche sont conçues, est la notion de type de touche.
Contributeurs: jaaf64