Personnaliser le clavier

De Wiki de la communauté Mandriva.



L'objectif de cette page est de donner des informations précises et détaillées sur la gestion et la personnalisation du clavier. Elle ne vise pas à énumérer quelques astuces rapides, mais à faire comprendre un certain nombre de choses en profondeur, afin de donner une véritable autonomie au lecteur et elle suppose donc une lecture attentive. D'un autre côté, cette page n'est nullement réservée aux seuls spécialistes, elle ne présuppose que des connaissances très limitées en informatique ou sur Linux, et peut donc être pleinement exploitée par des néophytes, pourvu qu'ils 'en veuillent' vraiment. La seule connaissance préalable réellement indispensable : savoir lire et modifier un fichier texte dans un éditeur de texte...


Sommaire

Réaffecter les touches avec xmodmap

Cette section vous permettra de prendre un premier contact avec la gestion du clavier par l'entremise de la commande xmodmap. D'autres outils que xmodmap existent maintenant, comme nous le verrons dans la suite de cette page (en particulier, notez dès maintenant que xmodmap tend à être remplacé par l'extension de X Window pour le clavier XKb, dont il sera longuement question plus bas et dont nous recommandons l'emploi). Beaucoup restera encore à examiner, si vous en avez le goût, quand vous aurez terminé la lecture de cette section et effectué par vous-même les manipulations qui y sont exposées, mais il me semble qu'elle constitue pour le moins un bon début... et vous verrez que vous pourrez facilement gérer, déjà, de cette façon, de nombreux aspects de votre clavier et le personnaliser.

xmodmap, comme son nom l'indique presque, permet de connaître et de modifier la table de correspondance (map) des touches sous X (autrement dit sous l'interface graphique de Linux), qui fonctionne comme un intermédiaire entre votre matériel (le clavier) et les logiciels (les applications fonctionnant sous X). Cette table est compilée chaque fois que vous démarrez X. Nous apprendrons, dans les sections suivantes, à comprendre et à manipuler cette table.

Introduction : codes numériques et événements

Bien que cela ne soit pas strictement nécessaire pour utiliser et suivre avec fruit le contenu de cette page, un rapide panorama général de la gestion du clavier sous Linux est sans doute utile en ce point, pour vous permettre de mieux comprendre tant cette documentation-ci que d'autres documentations que vous pourriez avoir envie de lire par la suite. Toutefois, si vous êtes pressé, vous pouvez sauter cet encart...

Les touches du clavier envoient, quand on les presse ou les relâche, des codes numériques appelés scancodes, qui varient selon les claviers et ne peuvent généralement pas être modifiés. Le système (le pilote du clavier, dans le noyau Linux, ou le serveur X, pour le cas qui nous occupe ici), convertit les scancodes en d'autres codes numériques plus « généraux », appelés les keycodes. Ces keycodes numériques sont eux-mêmes appariés - dans le cas qui nous intéresse : par le serveur X - avec des keysyms (ou symboles de touche) qui représentent des « événements ».

Ces keysyms correspondent :

  • soit à des caractères affichables, parmi lesquels les lettres et les chiffres (en principe : "a" est le keysym pour... la touche A, "1" est le keysym pour la touche 1...),
  • soit à des symboles représentant certaines « actions » à effectuer (Menu sera le keysym pour quelque chose comme « afficher un menu »),
  • soit encore à des touches de fonction (F1, F2...), qui doivent elles-mêmes recevoir une interprétation, comme nous le verrons plus bas...

Enfin, chaque application (autrement dit chaque logiciel) doit interpréter les keysyms, évidemment en suivant au plus près ce qu'il sont censés représenter. Le programmeur de Firefox doit prévoir ce qui arrivera si on presse une touche dont le keysym est Menu (en général... il s'arrangera pour que cela affiche... un menu !). Retenez donc, pour y voir plus clair les étapes successives :

I. Touche pressée -> II. scancodes -> III. keycode -> IV. keysym(s) -> V. Interprétation du keysym par l'application

La section que vous êtes en train de lire porte sur l'étape III->IV. Pour ce qui nous concerne ici, il faut comprendre que X lit directement les scancodes et les convertit lui-même en keycodes. Ce qui va faire l'objet de cette section, ce sera l'association effectuée par X entre les keycodes numériques et les keysyms (représentant des « événements »). Nous verrons que cette association peut être modifiée par l'utilisateur et qu'il vous sera possible, de cette façon, de personnaliser votre clavier.

Enfin, pour enrichir votre vocabulaire ! notez que :

  • certaines applications (comme le serveur X lui-même) lisent directement les scancodes : on dit qu'il sont en mode RAW (ou mode scancodes)
  • certaines applications lisent directement les keycodes (sans « voir » les keysyms) on dit qu'elle sont en mode medium RAW
  • la plupart des applications lisent les keysyms et sont dites en mode ASCII ou encore mode XLATE.

Vous trouverez à la page : Quelques keysyms représentant des caractères affichables une liste d'un certain nombre de keysyms, assortis chacun d'une brève description et du caractère correspondant.

La table de correspondance entre codes numériques et événements

Pour prendre connaissance des associations établies sur votre système entre les keycodes numériques et les keysyms qui représentent les événements déclenchés lorsque vous pressez une touche, vous pouvez examiner la table de correspondance du clavier.

Pour afficher la table de correspondance du clavier activée sur votre système dans un environnement graphique X (KDE, GNOME, IceWM...), nous allons avoir recours à la commande xmodmap :

xmodmap -pke | less

(pk est une option de la commande xmodmap qui lui demande d'afficher la table de correspondance du clavier, pke demande en outre un mode d'affichage particulièrement « lisible », analogue au format utilisé par les commandes dont nous nous servirons plus tard pour modifier la table ; la barre verticale "|" crée un tube qui transmet le contenu de la table à la commande less, ce qui vous permet de le consulter aisément, page par page).

Une ligne de sortie xmodmap typique ressemble à celle-ci, que nous prendrons pour exemple parmi les nombreuses lignes affichées à l'écran par notre commande :

keycode 10 = ampersand 1 onesuperior exclamdown
Attention !

Sous la Mandriva 2008.0, une sorte de bogue à l'affichage a pour conséquence que la ligne réellement affichée est ceci :

keycode  10 = ampersand 1 1 exclam onesuperior exclamdown

Dans la partie qui suit le signe 'égale', seuls les deux premiers symboles (ampersand et 1) et les deux derniers (onesuperior et exclamdown) sont à prendre en compte et à interpréter conformément aux lignes qui suivent. Ce problème concerne apparemment l'affichage de toute la table. Dans les versions plus anciennes de Mandriva (comme 2007) il y avait simplement des symboles 'en trop' en fin de ligne.

Compte tenu de cela l'affichage obtenu est tout à fait utilisable.


Cette ligne est une table de correspondance entre keycode et keysyms pour la touche '1' du clavier français. La première valeur affichée (ici 10) est le keycode, une référence numérique attribuée par X à chaque touche, qu'on peut utiliser facilement, comme nous le verrons plus bas, pour attribuer à cette touche une nouvelle valeur. Les noms situés à droite du keycode indiquent quels événements sont déclenchés lorsqu'on presse la touche, soit toute seule, soit en combinaison avec certaines autres touches appelées des « modificateurs » (MAJUSCULES, Contrôle, Alt Graph...). Les symboles utilisés pour représenter ces événements sont les keysyms (dans notre exemple, nous en avons fait figurer quatre : ampersand, 1, onesuperior et exclamdown). Il faut prendre ici « événement » en un sens large : ce peut être l'affichage d'un menu, le lancement d'un programme, mais aussi parfois le simple affichage d'un caractère sur la console et, naturellement, beaucoup d'autres choses. Le premier événement est ce qui arrive quand on presse uniquement la touche indiquée, sans modificateur (dans notre exemple, elle renvoie alors l'esperluette "&", nommée ampersand en anglais). Les autres valeurs vous disent (et disent aussi à X) ce qui arrive quand vous utilisez un ou des modificateur(s) en combinaison avec cette touche. Dans l'ordre les modificateurs seront ici :

  • la touche MAJuscule
  • la touche Alt Gr
  • la combinaison MAJuscule + Alt Gr.

Ainsi donc :

  • MAJ+1 renvoie le chiffre 1
  • Alt Gr+1 renvoie le 1 placé en indice ( ¹ ), c'est le onesuperior
  • MAJ+Alt Gr+1 renvoie le point d'exclamation à l'envers ¡ (point d'exclamation renversé de l'espagnol), représenté ici par le keysym exclamdown.

Vous pourrez interpréter de façon analogue les autres lignes de la table affichées par notre commande, en vous aidant éventuellement des informations de la page : Quelques keysyms représentant des caractères affichables qui contient une liste d'un certain nombre de keysyms, assortis chacun d'une brève description et du caractère correspondant.

Que faire de cette table et comment la modifier ? Voilà ce que nous allons voir dans les sections suivantes.

Redéfinir des touches déjà fonctionnelles

Permutation de la touche Escape avec la touche Windows de gauche

Imaginons que vous soyez un fondu de vim. vim est un éditeur de texte qui utilise énormément la touche ESC (souvent nommée aussi Echap, sur les claviers français, une touche située tout en haut à gauche du clavier). Malheureusement, cette touche n'est pas facile d'accès. Comment échanger la position de la touche Windows de gauche (si vous en avez une), plus facile d'accès, avec celle de ESC ? Pour modifier leurs relations, nous devons d'abord déterminer le keycode et le keysim de ces deux touches.

Comment découvrir le code numérique et le type d'événement associés à une touche ?
Avec l'utilitaire xev

C'est ici qu'intervient xev, le X Event Handler (=Gestionnaire d'événements de X).

Dans la Mandriva 2007 et dans la Mandriva 2008, xev s'installe à partir d'un paquetage rpm qui porte son nom (dans des versions antérieures, il figurait dans un paquetage X11R6-contrib).

Démarrez xev depuis un terminal graphique (l'utilitaire Konsole, par exemple) - il vous suffira pour cela de taper xev puis ENTREE dans la console.

Vous noterez immédiatement que des quantités d'informations s'affichent dans la fenêtre du terminal chaque fois que vous pressez une touche ou que vous déplacez la souris dans la fenêtre de xev. Ces informations semblent quelque peu cryptiques ! Sans vous laisser décourager, pressez une des deux touches qui nous intéressent, la touche Windows la plus à gauche ; voici ce que vous pouvez obtenir :

KeyPress event, serial 32, synthetic NO, window 0x3c00001,
    root 0x46, subw 0x0, time 1303257, (-120,776), root:(201,806),
    state 0x10, keycode 115 (keysym 0xffca, F13), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

Vous pourrez négliger la plupart de ces informations. La seule chose qui nous intéresse est ceci :

keycode 115 (keysym 0xffca, F13)

On trouve là tout ce qu'il y a à savoir pour nous : le code numérique de la touche (son keycode, ici 115), son keysym (c'est ainsi qu'on appelle, dans le jargon, les symboles représentant les « événements » associés aux touches évoqués dans les sections #Introduction : codes numériques et événements et #La table de correspondance entre codes numériques et événements) ici le keysym associé au keycode 115 est F13, ce qui signifie que cette touche est considérée comme une treizième touche de fonction. Retenons que la touche Windows de gauche a pour keycode 115 et pour keysym F13. Essayons de presser maintenant la touche ESC, voici ce que nous obtenons (en nous limitant à la partie qui nous intéresse) :

keycode 9 (keysym 0xff1b, Escape)

Le keycode de la touche ESC est donc 9 et son keysym est Escape. Notez que si vous n'obtenez aucune information en pressant une touche, vous pouvez oublier cette touche pour l'instant, elle n'est pas reconnue par le noyau Linux.

Vous essayez maintenant de quitter xev par un <Ctrl-C> énergique, voire un <Ctrl-D>, et... rien... xev reste là ! C'est qu'il interprète le code de ces touches comme celui des autres ! Pour sortir, il faut fermer la petite fenêtre de xev, en cliquant sur l'icône habituelle de fermeture de fenêtre dans sa barre de titre, ou bien vous pouvez aussi lancer la combinaison de touches qui vous sert habituellement à fermer une fenêtre (chez moi, et chez beaucoup d'autres.. : Alt-F4).

En examinant la table de correspondance

Sous Linux, il y a souvent plus d'un moyen de trouver une information. Voyons donc une autre façon de trouver keycode et keysym d'une touche. Si vous détenez déjà des informations partielles sur une touche, vous pouvez en trouver d'autres en examinant La table de correspondance entre codes numériques et événements que vous pourrez afficher grâce à la commande xmodmap -pke que nous avons déjà utilisée plus haut.

Supposons que nous ayons recueilli précédemment des informations sur la touche Windows (par exemple avec l'utilitaire xev dont il a déjà été question) : nous nous souvenons qu'elle est traitée comme une touche de fonction et que son keysym est F13, mais nous avons oublié son keycode. D'autre part, nous ignorons le keycode de la touche Escape. Pour trouver les informations qui nous manquent nous pourrions faire défiler toute la table de correspondance à l'écran, mais il est plus facile encore de lancer cette ligne de commande, qui sélectionne pour affichage certaines lignes de la table qui nous intéressent plus particulièrement :

xmodmap -pke | egrep -i   '(F13|esc)'

Cette commande nous fournit le keycode des deux touches et le nom exact du symbole qui représente l'événement associé pour l'instant à chacune d'elles :

keycode   9 = Escape
keycode 115 = F13

(vous trouverez quelques informations sur la commande egrep, que nous venons d'utiliser, au fil de cette section - egrep est une variante de la commande grep ; notez que l'option -i de egrep nous a permis d'effectuer une recherche insensible à la casse, utile quand on ne sait pas très bien s'il y a ou non des majuscules dans le mot recherché).

Ainsi, nous savons maintenant que le keycode de la touche Windows est 115. Quant à Echap, son keycode est 9. Munis de ces renseignements, comment permuter nos deux touches ?

Comment changer l'attribution d'un événement à une touche ?

Pour changer, en console, l'attribution d'un keysym à une touche, il suffit d'exécuter une commande de la forme générale suivante :

xmodmap -e 'keycode numéro_d_un__keycode = nom_de_keysim(s)'

L'option -e de la commande xmodmap lui demande d'effectuer une modification de la correspondance entre une touche et sa valeur. Notez bien que l'argument complexe qui suit -e et qui définit le changement à effectuer, doit être entre guillemets. Ici, le changement reviendra à associer un nouveau keysym à un certain keycode. Une telle commande modifiera donc la table de correspondance du clavier. Munis de ces informations, nous sommes à même d'effectuer une permutation des deux touches :

xmodmap -e 'keycode 9 = F13'  && xmodmap -e 'keycode 115 = Escape'

(sur le '&&' qui figure ici, voir Le shell sans peine#Le &&).

Cette commande « double » commence par assigner le keysym F13 à la touche ESC (nous avons vu dans les sections précédentes que le keycode de cette touche est 9), puis, si cette manœuvre a réussi, elle attribue le keysym Escape à la touche Windows de gauche (nous avons pu découvrir dans les sections précédentes que le keycode de cette touche est 115). Votre clavier est maintenant modifié : vous devriez désormais déclencher « l'événement » Escape en appuyant sur la touche Windows (autrement dit, vous obtiendrez, par exemple, la fermeture d'une fenêtre surgissante ou d'un menu déroulant en pressant la touche Windows) et, inversement, ce qui se produisait en pressant la touche Windows se produira désormais en pressant la touche Escape. La permutation des touches est donc réussie... Mais seulement pour la session en cours... nous verrons plus bas comment rendre permanent un tel changement.

Les touches de fonction Fn

Peut-être que la touche F13 que nous venons de permuter ne provoque à vrai dire pour l'instant aucune espèce d'événement quand on la presse, c'est fort possible pour une touche « surnuméraire ».

Notez donc qu'indépendamment de la permutation qui précède, une touche de fonction, comme F13 dans notre exemple (et ceci que la touche de fonction en question soit attribuée à la touche Windows, à la touche Escape ou à toute autre touche), peut être aisément associée à n'importe quelle commande (le lancement de Firefox, le lancement d'un script de votre composition etc.). L'interface graphique de KDE, par exemple, permet d'obtenir cela très facilement. Il vous suffira d'ouvrir le Menu K en cliquant sur l'étoile jaune de la Barre des Tâches, puis de suivre le chemin suivant : Applications->Outils->Outils système->Centre de configuration de KDE->Régionalisation et accessibilité->Raccourcis clavier->Raccourcis de commandes vous aboutirez alors à une interface aisée à comprendre et à utiliser, qui vous permettra d'associer une commande à F13 (ou éventuellement à une autre touche de fonction).

Rendre les changements permanents pour un utilisateur

Les changements que nous avons effectués dans la section #Comment changer l'attribution d'un événement à une touche ? seront néanmoins perdus à la fin de votre session X.

Si vous voulez qu'ils deviennent permanents, créez à la racine de votre dossier personnel /home/votre_nom_d_utilisateur, un fichier que vous appelerez .Xmodmap (n'oubliez pas le point initial, qui fait de Xmodmap un fichier caché) et indiquez ainsi les changements à prendre en compte :

! Pour permuter les touches Echap et la touche Windows de gauche.
keycode 9 = F13
keycode 115 = Escape

Comme vous l'aurez remarqué, chacune des lignes du .Xmodmap qui définit un changement est identique à l'argument entre guillemets de l'une des commandes xmodmap -e de la section précédente. Dans un fichier xmodmap les commentaires doivent être précédés d'un point d'exclamation.

Pour activer ce fichier de configuration dans le cadre de la session en cours, et être ainsi en mesure de vérifier qu'il fonctionne correctement, vous pouvez lancer en console, en étant connecté sous votre identité personnelle :

xmodmap  ~/.Xmodmap

(rappel : le tilde ~ est ici une abréviation pour le chemin de votre répertoire personnel). Pour l'activer de façon permanente, à chaque démarrage, créez, dans un éditeur de texte (Emacs, Vim, Kate, Kwrite ou tout autre), le petit script suivant, que vous pourrez appeler Xmodmap (sans point initial)) :

#! /bin/sh
xmodmap ~/.Xmodmap

Rendez-le exécutable (par exemple en lançant chmod +x nom_du_fichier ou en cliquant droit sur lui dans Konqueror + choix de Droits d'accès). Enfin, pour qu'il soit lancé à chaque démarrage de KDE, placez-le dans le répertoire /home/<nom_d_utilisateur>/.kde/Autostart. Pour cela, en vous mettant dans le répertoire où vous avez créé ce script, faites :

cp -a .Xmodmap ~/.kde/Autostart

Et voilà, chaque fois que vous lancerez KDE sous votre identité personnelle, la modification sera activée.

Sous GNOME, faites Bureau->Préférences->Sessions->Programmes au démarrage et tapez le chemin du script (mettre en outre une valeur supérieure à 60).

Si vous parcourez d'autres documentations sur xmodmap vous pourrez être surpris de constater que le fichier de configuration que nous avons baptisé ici .Xmodmap y porte un autre nom (par exemple : .xmodmaprc). A vrai dire, vous êtes libre de lui attribuer le nom que vous voulez, toutefois, par souci de clarté, je recommanderais de vous limiter à l'un ou l'autre des deux noms qui précèdent. Si vous avez besoin de temps en temps d'une configuration de clavier particulière, il vous est possible de créer un (ou plusieurs) fichier(s) de configuration que vous activerez ponctuellement, uniquement quand le besoin s'en fera sentir, par une commande :

xmodmap fichier

fichier sera à remplacer par le chemin du fichier à activer.

Rendre les changements permanents pour l'ensemble du système

Nous avons montré plus haut comment modifier votre clavier à l'aide d'un fichier de configuration de xmodmap pour un utilisateur particulier. Il existe aussi un fichier de configuration xmodmap pour l'ensemble du système. Sous les Mandriva 2006, 2007 et 2008, ce fichier est /etc/X11/Xmodmap. Vous pouvez modifier ce fichier de la même façon. Mais attention soyez sûr de savoir ce que vous faites (lisez pour cela les sections précédentes) et sauvegardez avant tout une version non modifiée du fichier. Notez qu'il peut être plus prudent d'utiliser uniquement des fichiers utilisateurs, que vous recopierez, si vous le jugez bon, dans le répertoire personnel des différents utilisateurs.

Les touches des modificateurs

Sur un clavier d'ordinateur certaines touches représentent des « modificateurs », des touches particulières qui peuvent se combiner avec une autre touche pour provoquer tel ou tel événement.

Certains de ces modificateurs sont bien connus : les touches Majuscule de droite et de gauche, les deux touches Contrôle, la touche Alt et la touche AltGr sont parmi les premières touches qu'on apprend à manipuler sur un clavier d'ordinateur.

Ces touches sont, comme les autres, dotées, d'un keysym. Par exemple, voici les informations que me fournit xev quand j'enfonce les touches de majuscules :

Majuscule gauche :

keycode 50 (keysym 0xffe1, Shift_L)

Majuscule droite :

keycode 62 (keysym 0xffe2, Shift_R)

Les keysyms des deux touches de majuscules sont donc Shift_R et Shift_L. MAIS attention le keysym d'une touche n'est PAS ce qui détermine son statut de modificateur : il faut pour cela que ce keysym soit associé à un « symbole de modificateur ». La table de correspondance entre les keysyms et les modificateurs se consulte en utilisant la commande xmodmap avec l'option -pm :

xmodmpap -pm

Ce qui sur ma machine, donne :

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x6d)
mod1        Alt_L (0x40),  Meta_L (0x9c)
mod2        Num_Lock (0x4d)
mod3
mod4        Super_L (0x7f),  Hyper_L (0x80)
mod5        Mode_switch (0x5d),  ISO_Level3_Shift (0x71),  ISO_Level3_Shift (0x7c)

On y lit notamment que les touches qui ont les keysyms Shift_L et Shift_R sont associées au modificateur shift (majuscule/minuscule). Pour modifier ces associations, deux commandes sont importantes : remove (qui supprime une association) et add (qui en ajoute une). A la section suivante, nous allons voir un exemple d'emploi de ces deux commandes pour modifier certaines des touches de modificateurs de notre clavier.

Permutation des touches Escape et Caps_Lock

Nous avons vu plus haut qu'on pouvait avoir envie de permuter la touche ESC avec la touche Windows de gauche. Mais que faire si, sur notre clavier, cette dernière touche n'existe pas ? Il serait tentant de permuter alors ESC avec la touche généralement ornée d'un petit cadenas, située en principe à gauche du "q" (sur un clavier français) et qui sert à bloquer, à « verrouiller » durablement le clavier en majuscules ou à retourner en minuscules non moins durablement. xev nous indique que le keysym de cette touche est : Caps_Lock. Curieusement, bien que cette touche ne se combine pas véritablement avec une autre à la manière des touches Ctrl ou Alt, au moins dans une configuration non modifiée, néanmoins, si vous regardez maintenant le tableau des modificateurs de la section précédente, vous y trouverez la ligne suivante :

lock        Caps_Lock (0x42)

qui montre qu'elle est considérée comme associée à un modificateur, le modificateur lock (en anglais quelque chose comme : « verrouillage »). Et en fait, c'est cela même qui donne à cette touche son rôle particulier et non le keysym Caps_Lock qui est le sien !

Pour permuter ESC et la touche de verrouillage, il nous faudra donc d'abord supprimer (avec remove) le lien entre Caps_Lock et le modificateur lock, puis permuter les keysyms des deux touches et enfin recréer avec add le lien entre le keysym Caps_Lock et le modificateur lock. Ce qui donne, en console, les commandes successives suivantes :

xmodmap -e 'remove lock = Caps_Lock'
xmodmap -e 'keycode 9 = Caps_Lock'
xmodmap -e 'keycode 66 = Escape'
xmodmap -e 'add lock = Caps_Lock'

Et voilà, la modification du clavier est faite : vous verrouillez maintenant les majuscules avec la touche Echap et le rôle de ESC est maintenant attribué à la touche au cadenas. Pour rendre ces changements permanents - comme indiqué en détail plus haut - vous ajoutez ces lignes à votre fichier de configuration /home/<nom_d_utilisateur>/.Xmodmap :

! Pour permuter la touche Echap avec la touche de Verrouillage des majuscules.
remove lock = Caps_Lock
keycode 9 = Caps_Lock
keycode 66 = Escape
add lock = Caps_Lock

Attribuer une valeur à des touches qui en sont dépourvues

Les techniques décrites dans les sections précédentes était conçues pour des touches que X avaient dotées d'un keysym. Mais comment faire si X ne reconnaît pas une de ces touches, comme sur certains claviers multimédias récents ?

Voyons donc ce qui se passe si je presse, après avoir lancé xev, une touche non attribuée :

KeyPress event, serial 27, synthetic NO, window 0x2c00001,
root 0x2d, subw 0x0, time 1556704161, (10,-10), root:(14,700),
state 0x10, keycode 234 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 characters:  ""

Cette touche (c'est la touche Retour arrière du navigateur sur un clavier Microsoft Internet Pro keyboard) a un keycode, ce qui est bien, mais n'a pas de keysym (NoSymbol). Si vous faites alors quelque chose comme cela :

xmodmap -e 'keycode 234 = e'

presser cette touche renvoie maintenant un 'e', ce qui bien sûr n'est pas très utile, mais vous montre comment il est possible de lui attribuer une valeur en l'associant à un keysym.

Ce dont nous avons besoin maintenant, c'est une série de valeurs utiles, que nous pourrions associer à une touche comme celle-là...

Le fichier /usr/share/X11/XKeysymDB (qui dans la Mandriva 2006 était en /usr/X11R6/lib/X11/XKeysymDB) semble être exactement ce que nous cherchons. Il s'agit d'une série de noms, de keysims, à attribuer aux touches. Bien sûr, ces noms sont abrégés, et qui plus est abrégés à partir de l'anglais... Il faut donc chercher un peu, se documenter et expérimenter... Une autre liste de keysyms, qui contient une brève caractérisation - en anglais - des événements représentés se trouve en /usr/X11R6/include/X11/keysymdef.h dans la Mandriva 2006 et en /usr/include/X11/keysymdef.h dans les Mandriva 2007 et 2008.

Une fois trouvé un keysym qui nous intéresse, on en revient aux procédures décrites précédemment : nous utilisons alors xev pour trouver (ou retrouver) les keycodes des touches auxquelles nous voulons assigner une « action » et nous créons ensuite un fichier ~/.Xmodmap, comme indiqué plus haut, dans lequel nous associons ces keycodes aux noms trouvés dans le fichier XKeysymDB ou dans keysymdef.h. Une fois que vous avez fait cela et, toujours comme dans la section précédente, créé, s'il n'existe pas encore, un script de démarrage automatique, puis redémarré X, vous devriez maintenant être capable d'utiliser ces touches.

Il est cependant souvent plus facile d'associer ces touches à des keysyms représentant des noms de fonction surnuméraires, comme F14, F15, F16, F17 etc. plutôt que de chercher dans XKeysymDB... L'interface graphique de KDE, par exemple, permet ensuite d'associer ces nouvelles touches de fonction à des commandes. Il suffit de cliquer sur l'étoile jaune du Menu K, puis de suivre, dans la Mandriva 2006 le chemin : Système->Configuration->KDE->Accessibilité->Raccourcis clavier->Raccourcis de commandes, dans la Mandriva 2007 Système->Configuration->Centre de Configuration de KDE->Régionalisation et accessibilité->Raccourcis clavier->Raccourcis de commandes et dans la Mandriva 2008 Applications->Outils->Outils système->Centre de Configuration de KDE->Régionalisation et accessibilité->Raccourcis clavier->Raccourcis de commandes, pour parvenir à une interface facile à utiliser et à comprendre, qui vous permettra de rendre vraiment utile la nouvelle touche de fonction.

Un exemple : réaffecter les touches Windows

Introduction

Si vous possédez trois touches Windows, ces trois touches sont généralement disposées ainsi :

Ctrl - Windows de gauche <LWIN> - Alt - .... Barre d'espace - Alt Gr - Windows de droite <RWIN> - Windows Menu - Ctrl

Sur certains claviers de portable, la touche Windows de droite <RWIN> peut être absente.

La plupart des environnements de bureau permettent d'utiliser les touches Windows (les « Winkeys ») de diverses façons. Nous allons vous montrer ici comment exploiter pleinement ces possibilités ou comment les modifier en vous mettant à même d'assigner à ces touches les valeurs qui vous conviennent. Cette section est une application des notions exposées dans les sections précédentes, il pourrait donc être utile de les lire, ou de les relire, avant de poursuivre.

Faire l'état des lieux

115, 116 et 117 sont en général les keycodes pour les « touches Windows » (de la touche la plus à gauche à la touche la plus à droite). Vérifiez d'abord les keysyms qui leur ont été attribués avec cette ligne de commande :

xmodmap -pke | grep 11[567]

(la commande grep sélectionnera ainsi les seules lignes qui contiendront 115, 116 ou 117). Vous devriez obtenir quelque chose comme cela :

keycode  = 115         Super_L
keycode  = 116         Multi_key        Multi_key
keycode  = 117         Menu

ou peut-être :

keycode  = 115         F13
keycode  = 116         Multi_key        Multi_key
keycode  = 117         Menu

dans ce dernier cas cela signifierait que la touche Windows la plus à gauche est une treizième touche de fonction (vous découvrirez à la section #Les touches de fonction Fn comment KDE vous permet d'attribuer à une telle touche un usage qui vous convienne). Dans les deux cas, la touche suivante est une touche compose (le keysym de la touche Compose est Multi_key) et la touche la plus à droite affiche le plus souvent des menus.

Si la colonne de droite est vide, vérifiez dans /etc/X11/xorg.conf (en tant que 'root') l'entrée :

XkbModel

Cette entrée doit contenir soit :

pc105

soit :

microsoft

Si la procédure qui précède ne donne pas les résultats indiqués, c'est sans doute parce que sur votre machine les keycodes des touches Windows sont différents, vous pouvez alors avoir recours à l'utilitaire xev pour trouver le keycode de ces touches. Si tout est correct et que les touches ne fonctionnent cependant pas de la façon qui vous conviendrait, vous devrez régler la configuration à la main (pas d'inquiétude, c'est facile). Cela peut être fait par l'entremise de xmodmap, comme nous allons le voir à la section suivante. Pour apprendre à personnaliser les touches Windows à l'aide de la nouvelle extension xkb, comme nous le conseillons), vous pourrez consulter ensuite les sections sur XKb.

Convertir les touches Windows en nouvelles touches de fonction

Le plus simple serait d'attribuer aux touches Windows des valeurs de touches de fonctions libres comme F13, F14, F15 etc. en ajoutant les lignes suivantes dans votre fichier de configuration ~/.Xmodmap :

! Pour convertir les touches Windows en touches de fonction supplémentaires.
keycode 115 = F13
keycode 116 = F14
keycode 117 = F15

Sauvegardez le fichier et faites :

xmodmap  ~/.Xmodmap

Maintenant allez dans votre utilitaire de raccourcis. Sous KDE, par exemple, faites
- sous la Mandriva 2006
Menu K->Système->Configuration->KDE->Accessibilité->Raccourcis clavier
- sous la Mandriva 2007
Menu K->Système->Configuration->Centre de Configuration de KDE->Régionalisation et accessibilité->Raccourcis clavier->Raccourcis de commandes.
- sous la Mandriva 2008
Menu K->Applications->Outils->Outils système->Centre de Configuration de KDE->Régionalisation et accessibilité->Raccourcis clavier->Raccourcis de commandes.

Vous parviendrez ainsi à une interface facile à utiliser qui vous permettra de voir si l'une ou l'autre de ces nouvelles touches de fonction a déjà été affectée à une commande et, dans tous les cas, de leur en affecter une nouvelle, si vous le souhaitez.

Modifier le script lancé par startkde

Attention !
Le contenu de cette section est pertinent pour les Mandriva 2006 et 2007 mais non pour la Mandriva 2008.

Mandriva Linux a modifié (« patché ») le script de démarrage de KDE : /usr/bin/startkde en faisant en sorte qu'il lance un script /usr/bin/test-windows-key.

Ce script teste la présence éventuelle d'une option DISABLE_WINDOWS_KEY=yes (désactivation des touches Windows) dans /etc/sysconfig/keyboard et affecte des keysyms aux touches Windows si cette option n'est pas activée (ce qui devrait être le cas par défaut).

En gros, le résultat net sur mon système (Mandriva 2007 sur un ordinateur portable) est que la touche Windows de gauche est une nouvelle touche de fonction F13 - que l'utilisateur peut associer librement à une commande, comme indiqué à la fin de la section précédente - tandis que la touche Windows de droite est une touche Menu (qui dans certaines applications comme Firefox ou Thunderbird ou encore dans une fenêtre de KDE etc. va ouvrir... eh oui... un menu).

Il est possible de modifier cela. Pour examiner le contenu du fichier /usr/bin/test-windows-key, faites :

cat /usr/bin/test-windows-key

ce qui devrait vous quelque chose comme ceci (une troisième touche Windows sera sans doute disponible sur un ordinateur de bureau) :

#!/bin/sh
if [  -e /etc/sysconfig/keyboard ]; then
        toto=$(grep "DISABLE_WINDOWS_KEY=yes" /etc/sysconfig/keyboard)
        if [ -z $toto ]; then
                xmodmap -e 'keycode 115=F13'
                xmodmap -e 'keycode 117=Menu'
        fi

fi

Vous pouvez modifier les valeurs assignées aux touches Windows en modifiant le fichier dans un éditeur de texte.

Par exemple, pour que les deux touches Windows traitées soient permutées vous pourriez faire :

#!/bin/sh
if [  -e /etc/sysconfig/keyboard ]; then
        toto=$(grep "DISABLE_WINDOWS_KEY=yes" /etc/sysconfig/keyboard)
        if [ -z $toto ]; then
                xmodmap -e 'keycode 115=Menu'
                xmodmap -e 'keycode 117=F13'
        fi

fi

Ces changements vaudront pour tous les utilisateurs du système. Toutefois, si leur ~/.Xmodmap personnel est différent, c'est lui qui l'emportera...

Donner aux touches Windows le statut de modificateur

C'est en principe possible. En vous souvenant que la touche Caps_Lock (Verrouillage de Majuscules) est par défaut un modificateur, notez que vous pourriez, par exemple, transférer sa valeur à la touche Windows de gauche en ajoutant les lignes suivantes à votre fichier ~/.Xmodmap. Si la touche Windows de gauche avait d'origine le keysym F13 cela donnerait :

! Pour permuter la touche de Verrouillage de majuscules avec la touche Windows de gauche.
remove lock = Caps_Lock
keycode 66  = F13 
keycode 115 = Caps_Lock
add lock = Caps_Lock

Comme vous pourrez le vérifier à l'aide de xev, le keycode de la touche par défaut de verrouillage de majuscules est 66. Si le keysym par défaut de la touche Windows de gauche est bien F13, ces lignes permuteront donc les valeurs des deux touches. Si le keysym par défaut de la touche Windows de gauche était Super_L, remplacez F13 par Super_L dans ce qui précède.

Permuter une touche Windows avec une autre touche

Voir ces sections :

Gérer les touches Windows avec XKb

On sait que xmodmap est voué à être peu à peu remplacé par le système XKb.

Ce pourrait donc être une bonne idée que de profiter de l'occasion pour apprendre à maîtriser ce « nouveau » système.

Plusieurs sections des pages sur XKb sont consacrées entièrement ou en partie aux touches Windows. Toutefois pour être pleinement exploitées, elles supposent que vous lisiez d'abord la section d'introduction à XKb.

Lecture faite, les sections pertinentes seraient les suivantes :

Créer une touche compose avec XKb
Permuter la touche Echap avec la touche Windows de gauche avec XKb.

Autres exemples d'utilisation de xmodmap

Un exemple de script modifiant le clavier en cours de session (jeu Freespace)

Les fichiers de configuration du clavier et le système XKb

Pour finir, après ces sections sur xmodmap et avant celles sur xkb, pour ceux qui veulent regarder de plus près dans les entrailles de la bête, nous donnerons ici quelques informations supplémentaires qui ne seront cependant pleinement compréhensibles et utilisables qu'après lecture des sections ultérieures sur xkb, mais qui pourront vous servir de points de repères pour la suite.

Trois options, dans la section Inputdevice (= périphérique d'entrée) dotée de l'identifiant Keyboard1 (= Clavier1) de votre fichier de configuration du serveur X /etc/X11/xorg.conf, déterminent comment votre clavier est disposé :

Option "XkbModel"
Option "XkbLayout"
Option "XkbOptions"

(pour : « modèle », « disposition », « option »). A titre d'exemple, dans mon cas, pour une Mandriva 2008 en français et un clavier à 105 touches, on aura :

Option "XkbModel" "pc105"
Option "XkbLayout" "fr"
Option "XkbOptions" "compose:rwin"

Comme nous le verrons plus en détail dans la suite de cette page, ces choix activent des parties de fichiers de configuration stockés dans des dossiers de /etc/X11/xkb dans la Mandriva 2006 et dans des dossiers de /usr/share/X11/xkb dans la Mandriva 2007 ou 2008.

Une liste, assortie d'une brève caractérisation en anglais, des diverses spécifications possibles pour les différentes options (les arguments entre guillemets en fin de ligne dans l'exemple qui précède) se trouve, dans la Mandriva 2006, dans le fichier /etc/X11/xkb/rules/xorg.lst et dans la Mandriva 2007 et 2008 en /usr/share/X11/xkb/rules/xorg.lst (dans notre exemple, vous pourriez notamment y trouver une ligne pour l'option compose:rwin). Voir aussi plus bas : #Maîtriser les « options » de XKb.

Nota : Dans la Mandriva 2006, les fichiers du répertoire xkb dont il est question dans cette section peuvent aussi être atteints par le chemin : /usr/X11R6/lib/X11/xkb, qui est un lien symbolique vers /etc/X11/xkb. Autrement dit :
/etc/X11/xkb/symbols/fr
désigne le même fichier que :
/usr/X11R6/lib/X11/xkb/symbols/fr ... c'est bien compris ??

Dans la Mandriva 2007 ou 2008, les fichiers de configuration sont situés simplement dans /usr/share/X11/xkb.

Ces fichiers sont gérés par le système XKb, mais c'est là une autre histoire... que nous allons aborder dans les sections qui suivent.

Réaffecter les touches avec XKb

Premiers pas

Introduction

Nous avons montré, dans les sous-sections précédentes, comment, sous une interface graphique, il est possible de réaffecter des touches du clavier à l'aide de la commande xmodmap, voir :

L'outil xmodmap est relativement facile à utiliser et il est toujours « actif » sur les Mandriva.

Cependant, on lit, ici et là, sur la Toile, qu'à terme xmodmap devrait être remplacé par un autre système, le système XKb. Pour commencer, nous essaierons ici de voir comment on peut effectuer avec XKb les tâches habituelles de xmodmap (mais notez qu'XKb a des capacités plus étendues que xmodmap, qu'il puisse faire « la même chose » n'est donc que le minimum attendu...). XKb permet aussi de définir plusieurs claviers (un clavier arabe, un clavier hébreu, un clavier français, par exemple) et de passer facilement de l'un à l'autre en pressant une certaine combinaison de touches. Dans les pages qui suivent, nous n'aborderons ces possibilités qu'en second lieu et nous ne nous intéresserons pour commencer qu'à un utilisateur qui souhaite se donner la possibilité de définir des modifications destinées à un unique clavier. Bien entendu, tout ce qui sera appris à cette occasion pourra cependant être utile ensuite à un utilisateur qui souhaite définir plusieurs claviers, comme nous le verrons aussi plus loin.

Préliminaires
Faire place nette : neutraliser les paramétrages xmodmap

Pour y voir plus clair, la première chose sera de neutraliser tout ce qui est dû à xmdomap.

- renommer, si vous en avez un, votre fichier de configuration personnel ~/.Xmodmap en tapant en console :  :
mv ~/.Xmodmap ~/.XmodmapVieux (attention sur certains systèmes ce fichier de configuration pourrait avoir reçu un nom différent, par exemple .xmodmaprc, vérifiez éventuellement)

- pour faire bonne mesure, vous pourrez même à titre de double précaution, neutraliser son lancement par le petit script KDE (s'il existe sur votre système) : /home/<nom-d-utilisateur>/.kde/Autostart/Xmodmap, où vous mettrez un commentaire devant la ligne qui lance .Xmodmap, vous passerez donc de :

#! /bin/bash
xmodmap ~/.Xmodmap

à :

#! /bin/bash
# xmodmap ~/.Xmodmap

Rappel : dans les scripts Bash, les commentaires sont des dièses (#).

- commenter de même les lignes du fichier Xmodmap qui paramètre l'ensemble du système : /etc/X11/Xmodmap.

Je convertis donc le mien :

!
! This is the "Xmodmap" file for Standard Keyboards with Windows keys.
!
! If you want to have other keymappings for special X-Terminals, just 
! create a "Xmodmap.${DISPLAY}" file with the according changes.
!

keycode 22  = BackSpace
keycode 115 = F13
keycode 117 = Menu

en :

!
! This is the "Xmodmap" file for Standard Keyboards with Windows keys.
!
! If you want to have other keymappings for special X-Terminals, just 
! create a "Xmodmap.${DISPLAY}" file with the according changes.
!

! keycode 22  = BackSpace
! keycode 115 = F13
! keycode 117 = Menu

Rappel : dans ce fichier les commentaires sont des points d'exclamation.

- Enfin, si vous êtes encore sous Mandriva 2006 ou 2007 (mais pas sous une 2008) nous allons commenter aussi les lignes du script Bash /usr/bin/test-windows-key lancé sous Mandriva par /usr/bin/startkde (sur ce script, voir ici), qui passera donc dans mon cas de :

#!/bin/sh
if [  -e /etc/sysconfig/keyboard ]; then
        toto=$(grep "DISABLE_WINDOWS_KEY=yes" /etc/sysconfig/keyboard)
        if [ -z $toto ]; then
                xmodmap -e 'keycode 115=F13'
                xmodmap -e 'keycode 117=Menu'
        fi

fi

à :

#!/bin/sh
if [  -e /etc/sysconfig/keyboard ]; then
        toto=$(grep "DISABLE_WINDOWS_KEY=yes" /etc/sysconfig/keyboard)
#       if [ -z $toto ]; then
#                xmodmap -e 'keycode 115=F13'
#                xmodmap -e 'keycode 117=Menu'
#       fi

fi

Désormais ce que vous observerez sur votre clavier devrait découler exclusivement des paramétrages par défaut ou de vos paramétrages personnels du système XKb.

Notez bien, pour vous rassurer, que tous ces changements sont très facilement réversibles et que pourrez aisément revenir à l'état antérieur du système si vous le souhaitez !

Le fichier .XCompose

Si vous avez suivi les indications données à la page sur la touche compose, vous avez peut-être installé sur votre machine un fichier personnel destiné à définir des séquences personnalisées pour cette touche, un fichier dont le nom est ~/.XCompose.

Si c'est le cas, sachez que ce fichier peut être conservé : il restera actif. A vrai dire je ne connais pas pour l'instant d'autre façon de définir ces séquences : si un lecteur connaît une méthode plus purement XKb de les définir qu'il le dise...

Comprendre l'état actuel de sa configuration

Le système XKb est configuré par tout un ensemble de fichiers texte qui se trouvent dans un répertoire xkb, sous Mandriva : /usr/share/X11/xkb.

Attention : sous la Mandriva 2006 le répertoire des fichiers de configuration de xkb était /etc/X11/xkb. Les exemples qui suivront seront tirés de la Mandriva 2008.

La configuration particulière d'un clavier s'obtient en activant certains de ces fichiers, ou, plus exactement, certaines parties de certains fichiers. Cela permet, d'une part, de profiter de très nombreuses configurations déjà définies et d'autre part, en combinant à sa façon fichiers et parties de fichiers, de disposer d'un outil de personnalisation doté d'une très grande souplesse. Nous allons supposer que vous souhaitez personnaliser votre clavier en conservant pour commencer votre configuration actuelle, à laquelle vous pourrez apporter ensuite, peu à peu, des retouches... en réaffectant certaines touches...

Découvrir sa configuration XKb avec setxkbmap

Cette sous-section est un peu « abstraite»», ne vous découragez pas... Nous arriverons vite aux techniques précises à mettre en œuvre pour personnaliser concrètement votre clavier... un peu de patience... Pour y voir plus clair, n'hésitez pas à effectuer les manœuvres suggérées sur votre propre ordinateur.

Pour savoir quels fichiers ou parties de fichiers du système XKb sont activés par défaut sur votre machine, lancez en console, sous votre identité d'utilisateur :

setxkbmap -print

Sur mon système, une Mandriva 2008, cela donne ceci :

xkb_keymap {
        xkb_keycodes  { include "xfree86+aliases(azerty)"      };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)"   };
        xkb_geometry  { include "pc(pc105)"     };
};

qui est une description de la « keymap » (la « table de clavier ») active sur mon ordinateur. Il est important de comprendre, pour commencer, de quoi est faite, au moins grosso modo, cette table. Un point essentiel : cette table est entièrement définie en termes de fichiers de configuration (ou de parties de ces fichiers) situés, sous la Mandriva 2008, dans le répertoire /usr/share/X11/xkb.
Attention : sous la Mandriva 2006 le répertoire des fichiers de configuration de xkb était /etc/X11/xkb. Les exemples qui suivront seront tirés de la Mandriva 2008.

Explicitons un peu. Regardons les lignes incluses à la place des points de suspension dans xkb_keymap { ... };. Comme vous le voyez, ces lignes commencent toutes par une expression xkb_machin, où machin est simplement un nom de sous-répertoire à la racine de /usr/share/X11/xkb. Il s'agit donc des sous-répertoires :

/usr/share/X11/xkb/keycodes
/usr/share/X11/xkb/types
/usr/share/X11/xkb/compat
/usr/share/X11/xkb/symbols
/usr/share/X11/xkb/geometry.

(Nous nous intéresserons ici essentiellement aux répertoires keycodes et symbols). Ensuite, après xkb_machin, on trouve un contenu qui est lui-même entre accolades et qui commence par include. Le contenu entre guillemets qui suit include correspond à des noms de fichiers « activés » par XKb. Ainsi :

  • dans le sous-répertoire keycodes : l'expression include "xfree86+aliases(azerty)" implique que sont activés par défaut chez moi les fichiers xfree86 et aliases
  • dans le répertoire symbols, l'expression include "pc+fr+compose(rwin)" implique que les fichiers concernés sont les fichiers pc, fr et compose.

En naviguant sur votre disque dur, vous pourrez vérifier que ces différents fichiers existent bel et bien ! Qui plus est ce sont des fichiers texte, qu'il est facile de lire avec toutes les ressources habituelles (éditeurs de textes, commandes du shell) - même si pour l'instant leur contenu reste sûrement quelque peu mystérieux pour vous !

Enfin, dernier point indispensable pour comprendre la sortie de la commande setxkbmap -print, les contenus entre parenthèses parfois observés juste après un nom de fichier désignent des noms de sections de ce fichier. Chaque fichier est constitué d'un ensemble de sections. Dans le répertoire keycodes, c'est donc par exemple, la seule section azerty du fichier aliases qui est activée par l'expression include "xfree86+aliases(azerty)" et non les autres sections de ce fichier. A l'intérieur d'un fichier, le contenu d'une section de ce fichier est toujours entre accolades, l'accolade fermante est toujours suivie d'un point-virgule et le nom de la section - toujours entre guillemets - précède les accolades. A titre d'illustration, voici à quoi ressemble la section pc105 du fichier symbols/pc

xkb_symbols "pc105" {
    include "pc(pc104)"
    key <LSGT> { [      less,    greater,          bar,    brokenbar ]  };
};

Remarquez le nom de la section entre guillemets ("pc105") et ne vous préoccupez pas trop à ce stade de ce que peut signifier son contenu. Compris ??

Et quand il n'y a rien après le nom de fichier ? Eh bien, cela signifie que la section du fichier qui sera activée est celle dont le nom est précédé de l'indication : default (il y a une et une seule section default dans chaque fichier). C'est donc, par exemple, chez moi, la section default du fichier xfree86, situé dans le répertoire keycodes qui sera activée par l'expression include "xfree86+aliases(azerty)". Juste pour vous donner une idée de la chose, voici cette section :

default xkb_keycodes "xfree86" {
    include "xfree86(basic)"
    <BKSL> =  51;
    <LSGT> =  94;
};

Dernier point à noter : les sections d'un fichier peuvent elles-mêmes inclure (via un include) d'autres sections de fichiers... Par exemple, dans l'exemple qui précède, vous pouvez voir que la section default de keycodes/xfree86 inclut la section basic du même fichier... Cela peut donc vite devenir compliqué... mais tout cela donne en même temps une grande souplesse pour personnaliser son clavier.


Mais : « Qu'est-ce qui détermine l'organisation par défaut du système XKb, tel qu'il est affiché par la commande setxkbmap -print ? », vous demanderez-vous peut-être. Eh bien, ce sont :

et :

  • le contenu de certains fichiers du répertoire /usr/share/X11/xkb/rules.

Mais nous ne rentrerons pas dans des détails là-dessus pour l'instant, car ce n'est pas nécessaire pour que vous soyez en mesure de commencer à personnaliser votre clavier. Nous essaierons plutôt, dans ce qui suit, de vous montrer comment personnaliser le clavier pour un utilisateur sans toucher aux fichiers généraux (autrement dit nous laisserons intacts /etc/X11/xorg.conf et les fichiers de /usr/share/X11/xkb). Le contenu de cette page, et la documentation extérieure que nous signalons par ailleurs, vous permettront cependant de modifier les fichiers généraux, si vous y tenez vraiment...

Essayons maintenant de comprendre à quoi servent au juste certains au moins des fichiers dont nous venons de voir qu'ils sont activés par défaut dans notre système.

A quoi servent les fichiers des répertoires keycodes et symbols ?

Qu'y a-t-il donc dans ces fichiers de notre keymap, à quoi servent-ils ?

Un petit retour en arrière d'abord : si vous avez lu la section sur xmodmap, vous avez vu que le serveur X associe à chaque touche un certain code numérique ou keycode. Chaque keycode utilisé est en outre associé à son tour à un nom symbolique ou keysym que les applications interprètent. Ce nom symbolique peut représenter un caractère affichable ou un type d'action : en général une touche qui produit un keycode associé au keysym A « émettra » un A majuscule quand on la pressera et une touche associée au keysym Menu sera généralement interprétée par les applications comme devant déclencher l'affichage d'un menu.

Vous trouverez une liste des keysyms représentant des caractères affichables, avec une description, et le caractère correspondant affiché en regard, à la page Quelques keysyms représentant des caractères affichables, un document qui devrait vous être d'un grand secours lorsque vous commencerez à modifier votre clavier.

Personnaliser le clavier sous xmodmap, c'était donc modifier ou créer une association entre un keycode et un keysym. Bien. Entre keycode et keysym, XKb introduit, quant à lui, un intermédiaire, un échelon supplémentaire : chaque keycode est d'abord associé à un nom de touche du clavier et ce sont ces noms de touches qui sont ensuite associés à des keysyms. On a donc une organisation comme celle-ci, où la couche « nom de touche » constitue un élément nouveau par rapport au système xmodmap :


keycode->nom de touche->keysym->Interprétation du keysym par l'application


Pour l'association, dans notre keymap, entre les keycodes et les noms de touche, XKb utilise les fichiers du répertoire keycodes. En ce qui concerne notre exemple, il s'agit donc des fichiers : keycodes/xfree86 et keycodes/aliases.

Pour l'association entre les noms de touches du clavier et les keysyms, XKb utilise les fichiers du répertoire symbols. Dans notre exemple, il s'agira donc de sections des fichiers symbols/pc, symbols/fr et symbols/compose.

Illustrons.

Dans le répertoire keycodes, la section default du fichier xfree86 inclut elle-même la sous-section basic du même fichier, laquelle contient la ligne :

<AE01> =  10;

Cette ligne signifie que le keycode 10 (émis par une certaine touche du clavier) est désormais représenté par le nom de touche <AE01> (pour des détails sur les noms de touche et la façon de trouver la touche correspondante sur votre clavier, voir plus bas).

Dans le répertoire symbols, le fichier fr contient cette ligne dans sa section default :

key <AE01> {  [   ampersand,  1,  onesuperior,  exclamdown  ]  };

Cette ligne indique, entre autres, que la touche <AE01> (par définition : celle qui est associée au keycode 10, comme nous venons de le voir) est elle-même liée, quand on la presse seule, au keysym ampersand qui correspond à une esperluette (le signe : &). Pour établir un lien entre une touche physique du clavier (représentée par le keycode qu'elle émet) et le keysym qui représente le caractère émis par cette touche ou l'action qu'elle déclenche, nous passons donc sous XKb par l'entremise des noms de touches, là où un fichier xmodmap aurait associé directement le keycode au keysym par une simple ligne :

keycode 10  = ampersand    1

L'un des intérêts de cette procédure plus complexe est qu'elle permet de créer une image du clavier (les fichiers du répertoire geometry exploitent du reste cet aspect du système pour rendre possible la création d'une véritable image « visible » du clavier).

Vous voulez « voir » votre clavier (ou en tout cas un clavier voisin du vôtre) ? avec tous ces noms de touches ??? Installez si ce n'est déjà fait le paquetage xkbprint et faites donc ceci – sous root – dans une console :

xkbprint -color -label name $DISPLAY

vous obtiendrez un fichier Postscript server-0.ps. Ouvrez-le avec un visionneur de fichiers Postscript, par exemple KGhostview :

kghostview server-0.ps

Et admirez le résultat... Pour personnaliser davantage l'image obtenue, vous pourrez lire un peu plus tard la section : #Créer une image graphique de son clavier avec xkbprint. Pour un exemple de ce qu'on peut arriver à faire, voir aussi l'encadré final de la section suivante.

Les noms symboliques des touches et les keysyms

Pour jongler avec ce système, il faut être en mesure de savoir ce que représentent les différents keysyms et les différents noms de touches.

Pour les keysyms vous pourrez vous aider de la page Quelques keysyms représentant des caractères affichables qui contient une liste de keysyms représentant des caractères, avec leur description et le caractère lui-même affiché en regard.

Pour les noms de touches : il faut savoir qu'il en existe de deux sortes. Les plus nombreux sont codés en fonction de la position supposée de la touche sur le clavier. Les autres sont dotées d'un nom indécomposable.

Les touches alphanumériques (qui représentent des lettres ou des chiffres), ainsi que celles qui correspondent aux signes de ponctuation courants, ont un code qui commence toujours par la lettre A majuscule.

Ensuite, vient une lettre qui représente la rangée sur laquelle est supposée se trouver la touche (de A pour la plus éloignée de l'écran, jusqu'à E pour la rangée des chiffres du clavier azerty).

Puis, vient un chiffre qui représente la position de la touche sur l'axe droite-gauche en partant de 1 à gauche : on aura donc dans un clavier azerty :

<AE01>= &/1
<AD01> = A
<AC01> = Q,
<AB01> = W
et bien sûr aussi :
<AC03> = D etc.

Les touches de fonction sont de la forme FK+nombre : <FK10> pour la touche de fonction F10 etc.

Les touches du pavé numérique sont de la forme KP+nombre (KP pour keypad).

Les autres touches ont des noms indécomposables, en général assez faciles à comprendre : <SPCE> pour la barre d'espace, <LSGT> (anglais less / greater) pour la touche comportant les signes plus petit que et plus grand que etc.


À noter !

Vous trouverez les noms de touches indécomposables, assortis d'une explication sur la nature de la touche, à la page : Les noms symboliques des touches sous XKb.

Cliquez sur le lien ci-dessous :

Clavier de portable.ps

pour télécharger un fichier Postscript représentant mon propre clavier : vous pourrez ainsi voir les codes des différentes touches. Ce fichier a été réalisé avec les outils XKb.

Ce fichier peut être vu avec un logiciel comme Kghostview ou Evince (tapez en console kghostview Clavier de portable.ps après vous être placé dans le répertoire où vous avez téléchargé le fichier).


Enfin, notez bien que dans les fichiers du répertoire symbols, lorsque plusieurs keysyms suivent un nom de touche, l'ordre correspond en général (donc pas toujours, vous trouverez d'autres cas de figure à la section #Niveaux et types) à ce qu'on obtient, successivement :

  • avec la touche frappée seule
  • avec la combinaison MAJuscule + touche
  • avec la combinaison ALT Graph + touche
  • avec la combinasion MAJ+Alt Graph+touche.

Vous vérifierez qu'il en va bien ainsi dans la ligne donnée à la section précédente pour la touche <AE01> (celle de l'esperluette &) :

key <AE01> {  [   ampersand,  1,  onesuperior,  exclamdown  ]  };

En pressant la touche seule on obtient bien l'esperluette & (dont le keysym est ampersand), en combinaison avec la touche MAJ il vient 1, avec Alt Graph on a un 1 en exposant ¹ (onesuperior) et enfin avec Alt Graph+MAJ, on obtient le point d'exclamation inversé ¡ (exclamdown). Voilà. Avec ces connaissances substantielles en tête nous pouvons maintenant agir...

A l'attaque...

Précautions !!!!

En travaillant sur ce qui suit, si vous faites des erreurs, il peut arriver que le lancement de votre session X se bloque !!!! Autant le savoir... Il faut donc

  • respecter le plus possible la syntaxe des différents paramétrages
  • essayer d'abord en console vos modifications avant de relancer X (on verra comment)
  • il est capital de savoir comment lancer le système en mode console et de savoir éditer un fichier en mode console pour rattraper ses erreurs éventuelles... N'allez pas plus loin tant que vous ne saurez pas faire cela...
  • bien entendu, il convient aussi de conserver par devers vous, sur un disque externe, une copie du répertoire de configuration de votre interface graphique habituelle, copie effectuée à un moment où vous êtes sûr qu'elle fonctionne bien (sous KDE, vous sauvegarderez donc le répertoire ~/.kde).
Créer une copie personnelle de la keymap par défaut

Nous allons commencer par créer une copie de la keymap qui décrit la configuration actuelle par défaut de notre clavier.

Nous pourrons ensuite modifier cette keymap de façon à y introduire nos personnalisations du clavier.

Enfin, nous devrons faire en sorte que cette keymap personnalisée soit activée chaque fois que nous lancerons X sous notre identité personnelle d'utilisateur.

Voilà le programme...

Choisissons donc un répertoire, je choisis pour ma part de mettre ma (voire mes) keymap personnalisée dans un répertoire caché à la racine de mon répertoire personnel : ~/.my_clavier et j'appellerai la keymap personnelle qu'il contiendra : mon_fr (soit donc : ~/.my_clavier/mon_fr), bien entendu vous pouvez choisir d'autres nom ou emplacement de répertoire à votre convenance.

Rappelez-vous que, sous l'utilitaire Konsole de KDE, il est possible de sélectionner toute la sortie d'une commande et de la copier dans le presse-papier. Vous pouvez donc lancer la commande setxkbmap -print dont nous avons parlé plus haut et copier l'affichage obtenu dans le fichier texte ~/.my_clavier/mon_fr. Ceci fait, j'obtiens donc ceci dans ~/.my_clavier/mon_fr :


Table 0



xkb_keymap {
        xkb_keycodes  { include "xfree86+aliases(azerty)"       };
        xkb_types     { include "complete"     };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)"      };
        xkb_geometry  { include "pc(pc105)"     };
};

(pour mieux comprendre cette table, lire les sections précédentes de cette page si vous ne l'avez pas encore fait)

Une nouvelle table par défaut, avec des commentaires

Nous allons traiter cette table comme notre nouvelle table par défaut et lui donner un nom qui sera celui du fichier qui la contient : mon_fr. N'oubliez pas que défaut en anglais s'écrit default et mettez bien le nom entre guillemets. Pour plus de clarté, ajoutez quelques commentaires - attention ici les commentaires sont marqués par deux barres obliques ! (oui, je sais bien, cela fait la troisième sorte de marque de commentaire que nous rencontrons depuis le début de cette page...) :

//Table 0 commentée

// nom de la table de clavier par défaut ("mon_fr") :

default xkb_keymap "mon_fr"  {

// inclusion  de parties de fichiers du répertoire keycodes :
// inclusion de la section default du fichier  xfree86 
// et de la section azerty du fichier aliases

        xkb_keycodes  { include "xfree86+aliases(azerty)"       };
// inclusion de parties de fichiers des rép. types et compat :
// section default du fichier complete des 2 répertoires
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };

// inclusion de sections de fichiers du répertoire symbols :

        xkb_symbols   { include "pc(pc105)+fr+compose(rwin)"    };

// inclusion de la section pc105 du fichier pc du rép. geometry :
        xkb_geometry  { include "pc(pc105)"     };

// la définition qui commençait le fichier se termine ci-dessous :
};
Comment activer notre table personnalisée

Nous allons utiliser la commande XKB : xkbcomp.

Cette commande va compiler pour nous une version de la table personnalisée ci-dessus avec les sections de fichiers qu'elle inclut.

Lancer xkbcomp en console

Lançons donc en console (sous notre identité de simple utilisateur) la commande :

xkbcomp  -w 0 -R/usr/share/X11/xkb/  $HOME/.my_clavier/mon_fr  $DISPLAY

L'option -w 0 vous évite d'innombrables messages d'avertissement mineurs qui ne vous seront généralement pas utiles (les messages d'erreur importants seront, eux, affichés), l'option -R introduit le répertoire racine où se trouvent les fichiers inclus (ceux qui suivent les include de notre table), ensuite vient le chemin du fichier à compiler (notre table personnelle), la variable $DISPLAY contient l'identifiant de la console graphique courante qui utilisera le résultat de la compilation.

Vous avez lancé la commande et il ne s'est rien passé ?? Parfait !!!!

Lancer la commande qui précède en console vous permet notamment de vérifier que la table compilée ne contient pas d'erreur de syntaxe ! Si aucun message d'erreur n'apparaît, ce devrait être le cas. Si au contraire vous obtenez des messages d'erreur, lisez-les avec soin, effectuez les corrections qu'ils suggèrent et relancez la commande pour voir si cette fois tout va bien...

Ceci est très important : cela vous évitera peut-être un blocage de X au prochain démarrage.

Nota : dans certains cas, si un message d'erreur peu explicatif est affiché, vous pourriez avoir intérêt à relancer la commande avec un chiffre supérieur à 0 après le -w, vous pouvez monter progressivement jusqu'à 9, mais 1 suffit généralement (-w 1) pour obtenir un message qui vous aidera à comprendre la source de l'erreur.

Contrairement à ce qui est indiqué dans Configuration d'une table de clavier sous X11, il est parfaitement possible, en tout cas sur ma Mandriva 2008, d'activer votre table de clavier personnalisée en cours de session, en lançant dans un émulateur de terminal la commande que nous venons d'indiquer. Bien entendu, son effet ne se fera sentir que pendant la durée de la session en cours. Pour savoir comment activer la table de façon permanente, poursuivez votre lecture...

Relancer X

Pour que notre table soit activée en permanence, la commande xkbcomp doit être exécutée systématiquement au lancement de la session X. Dans certains systèmes on pourrait obtenir cela en la plaçant dans un fichier .xinitrc ou .xsession. De tels fichiers sont absents par défaut sous Mandriva.

J'ai donc choisi, pour ma part, de placer la commande :

xkbcomp  -w 0 -R/usr/share/X11/xkb/  $HOME/.my_clavier/mon_fr  $DISPLAY

à la fin de mon fichier de configuration du shell ~/.bash_profile.

Ceci fait : relançons le serveur X (après avoir pris soin de sauvegarder les données de toutes les applications ouvertes) par un <Ctrl-Alt-Retour Arrière>. Que se passe-t-il ?? Rien, bien sûr, puisque notre table personnelle est à ce stade identique à la configuration par défaut... Mais notre dispositif est fin prêt. Il ne nous reste plus qu'à introduire des modifications dans notre table ~/.my_clavier/mon_fr...

Notez bien qu'après avoir modifié notre table personnalisée, il sera toujours possible de « revenir en arrière » et de retourner à la configuration par défaut : il suffira pour cela de « commenter » la ligne de ~/.bash_profile en la faisant précéder d'un dièse (#), comme ceci :

# xkbcomp  -w 0 -R/usr/share/X11/xkb/  $HOME/.my_clavier/mon_fr  $DISPLAY

et de relancer X.

ATTENTION : Dans les sections qui suivent nous vous proposons de personnaliser votre clavier pour un utilisateur, sous X, sans toucher à la configuration générale par défaut de l'ensemble du système. Vos modifications n'affecteront donc pas les autres utilisateurs du système (sauf à transplanter ces modifications dans leur répertoire personnel, ce qui sera évidemment possible) et elles seront très facilement réversibles.
Il faut bien comprendre cependant que vos modifications du clavier ne fonctionneront pas en dehors de X et seront donc sans effet dans les consoles textes (auxquelles on accède par la combinaison de touches Contrôle-Alt-F1 à FN6). D'autre part et surtout, ces modifications ne seront pas actives avant que vous ne vous soyez connecté : par conséquent si vous n'avez pas choisi la connexion automatique, vous devrez taper votre nom d'utilisateur et votre mot de passe avec un clavier qui aura la configuration par défaut du système. Cela peut ou non être perçu comme un inconvénient, mais il faut en tout cas garder cela en tête. Si, en définitive, vous trouvez cela vraiment gênant, après avoir examiné et mis en pratique les pages qui suivent, il vous sera de toute façon facile de transférer dans les fichiers généraux du système les modifications que nous vous aurons appris à mettre en œuvre pour un utilisateur et, ceci fait, vous pourrez taper identifiant et mot de passe sous votre nouvelle configuration. Cela paraît cependant une bonne démarche que de commencer par ne modifier qu'une configuration d'utilisateur, en laissant le système général intact : quand vos modifications seront bien stabilisées et que vous aurez bien compris comment XKb fonctionne, il vous sera toujours possible, après avoir sauvegardé les fichiers généraux du système, de les modifier en toute tranquillité, si c'est ce que vous souhaitez.

Affecter un nouveau caractère à une touche

Trouver le nouveau keysym à affecter

Vous voulez ajouter à votre clavier le tiret cadratin et le tiret demi cadratin, qui curieusement ne s'y trouvent pas... Oui, vous savez bien, le cadratin qui dans un dialogue s'utilise pour représenter un changement d'interlocuteur :
— Bonjour, dit Marie.
— Salut, répondit Paul...
et le demi cadratin qui sert à enclore les incises :
– eh oui c'est lui qui entoure celle-ci... –
Comment trouver leur keysym ?

Une petite recherche dans la page Quelques keysyms représentant des caractères affichables pourrait suffire... ce serait certainement la solution la plus simple.

Vous pourriez aussi les chercher en ouvrant dans OpenOffice.org le menu Insertion->Caractères spéciaux, à condition d'être capable de les reconnaître dans la liste des caractères, dans ce cas particulier ce n'est pas facile du tout....
Une fois le caractère trouvé, dans la fenêtre d'OOo, vous cliquez dessus et vous voyez apparaitre en bas à droite de la fenêtre qui s'ouvre alors, le codage Unicode de chacun d'eux... par exemple le cadratin a le codage : U+2014. Vous cherchez maintenant dans la liste des keysyms /usr/include/X11/keysymdef.h :

cat /usr/include/X11/keysymdef.h | grep 2014

et vous obtenez la ligne :

#define XK_emdash                        0x0aa9  /* U+2014 EM DASH */

Le keysym du tiret cadratin est donc emdash...

Les mêmes méthodes nous montreraient que le keysym du tiret demi cadratin est endash.

A quelle touche ou combinaison de touches affecter le nouveau keysym ?

Il vous reste à trouver une touche ou une combinaison de touches qui ne vous sert à rien. Sur mon clavier j'ai choisi les combinaisons de la touche N avec Alt Graph et avec Majuscules+Alt Graph. Ces combinaisons, sont, sur mon clavier, entièrement libres. Je le sais parce que j'ai exploré toutes les possibilités des touches de mon clavier en combinaison avec Alt Graph et Majuscules, et je m'en suis fait un petit tableau bien utile. Je vous conseille d'en faire un pour vous-même. Je peux aussi vérifier cela avec la commande ... xmodmap... :

xmodmap -pke | grep N
keycode  57 = n N

où l'on voit que seules deux positions sont occupées : celle de la touche isolée (n) et celle de la touche avec Majuscules (N). Bien entendu, vous pouvez vérifier que le keycode de la touche N est bien 57 à l'aide de l'utilitaire xev.

Comment greffer le nouveau keysym sur la touche à modifier

Notre table de clavier, celle que nous avons créée à la section #Créer une copie personnelle de la keymap par défaut ressemble à ceci (pour gagner de la place j'ai omis les commentaires) :

// Table 0
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"       };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)"   };
        xkb_geometry  { include "pc(pc105)"     };
};

Il nous suffit d'ajouter une ligne à la section xkb_symbols :

// Table 1
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"       };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)" 
                      key <AB06> { [ n,  N, emdash, endash ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

Regardez bien la forme de cette ligne et la façon dont elle s'intègre à notre table (entre les accolades de la section xkb_symbols, mais aussi avec sa propre paire d'accolades, notez aussi le mot clé key devant le nom de la touche) : vous devrez procéder exactement de la même façon chaque fois que vous associerez un caractère à une combinaison de touches... Pour vérifier que tout va bien, lancez en console :

xkbcomp  -w 0 -R/usr/share/X11/xkb/  $HOME/.my_clavier/mon_fr  $DISPLAY

si aucun message d'erreur n'apparaît, c'est parfait, Alt Graph + N devrait vous donner maintenant un tiret cadratin et Alt Graph+Majuscules+N un tiret demi cadratin... Vous pouvez alors relancer le serveur X par un <Ctrl-Alt-Retour Arrière> (après avoir sauvegardé toutes les données des applications ouvertes)... et vérifier qu'il en est encore de même après ce redémarrage, grâce à la ligne que nous avons ajoutée, à la section #Relancer X, dans notre .bash_profile.

Utiliser un codage Unicode au lieu d'un keysym

Il est possible d'utiliser le codage Unicode d'un caractère (que vous pouvez notamment trouver dans OpenOffice.org via le menu Insérer->Caractères spéciaux... ou dans le fichier /usr/include/X11/keysymdef.h) exactement comme nous avons utilisé les keysyms.

Par exemple, pour associer à la touche N la possibilité de produire le tiret cadratin (Unicode U+2014) ou demi cadratin (Unicode U+2013) vous pouvez aussi bien écrire :

// Table 2
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"       };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)" 
                      key <AB06> { [ n,  N, U2014, U2013 ] };
                               };
        xkb_geometry  { include "pc(pc105)"     };
};

Notez que le signe + du codage Unicode est omis.

Utiliser des alias pour les noms de touches

La section azerty du fichier aliases du répertoire keycodes est activée (par un include "xfree86+aliases(azerty)") dans la table de clavier que nous avons élaborée dans les sections précédentes.

Regardez donc un peu le contenu de cette section de fichier.

Vous verrez qu'elle définit des alias de noms de touches, autrement dit elle définit des symboles qui sont aptes à remplacer tel ou tel nom de touche. Ces alias sont d'ordinaire plus « humainement lisibles » que le nom de touche qu'ils remplacent, ainsi l'alias de notre touche n/N <AB06> sera <LatN> grâce à la ligne suivante de la section azerty du fichier aliases :

alias  <LatN> = <AB06>;

Cette ligne nous permet donc d'utiliser, pour désigner la touche qui nous intéresse, aussi bien le nom <LatN> que le nom <AB06>.

Nous pourrons recourir à un tel alias pour rendre simplement l'une des lignes de notre table plus lisible.

Si nous utilisons l'alias <LatN>, la table de clavier que nous avons élaborée dans les sections précédentes devient :

// Table 3
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"       };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)" 
                      key <LatN> { [ n,  N, emdash, endash ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

et gagne un peu en lisibilité.

Mais les alias présentent aussi l'avantage de permettre d'utiliser une même ligne de code pour faire référence à des touches ayant des positions différentes mais assumant le même rôle, dans des tables destinées à diverses sortes de clavier (par exemple, un clavier qwerty anglais et un clavier azerty français). Un même alias pourra en effet représenter des touches différentes associées aux mêmes caractères : par exemple, <LatW> représentera la touche w/W dans des claviers azerty et qwerty, bien qu'elle n'occupe pas la même position dans ces deux claviers - <LatW> sera l'alias de <AB01> dans un clavier azerty et de <AD02> dans un clavier qwerty. Il sera alors possible de définir le rôle de la touche w/W par une même ligne de codes dans la table de chacun des deux claviers.

Créer une touche de fonction

Pour l'instant (après désactivation des paramétrages xmodmap par défaut), la touche Windows de gauche (symbole de touche : <LWIN>) ne sert à rien sur mon clavier. Pourquoi ne pas en faire une treizième touche de fonction ? Pour cela il suffit d'insérer une ligne key <LWIN> { [ F13 ] }; dans la sous-section xkb_symbols de notre table de clavier personnelle :

// Table 4
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <LWIN> { [ F13                      ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

Ensuite, il nous suffira d'utiliser notre gestionnaire X pour associer une commande à cette nouvelle touche de fonction (sous KDE on fera Menu K->Applications->Outils->Outils Système->Centre de Configuration KDE->Régionalisation et accessibilité->Raccourcis clavier->Raccourcis de commandes et on effectuera l'association entre la touche F13 et, par exemple, la commande qui lance Firefox...).

Créer une touche compose

Si vous ne savez pas ce qu'est la touche compose, je vous suggère de commencer par lire la page du Wiki La touche compose.

« Sur mon clavier, aucune touche compose n'est installée par défaut » ou bien : « je dispose d'une touche compose mais sa position ne me convient pas ! » Que faire ?

Utiliser les « OPTIONS » disponibles de XKb pour les touches Ctrl, Alt, Win et Compose

Si vous possédez trois touches Windows, ces trois touches sont généralement disposées ainsi :

Ctrl - Windows de gauche <LWIN> - Alt - .... Barre d'espace - Alt Gr - Windows de droite <RWIN> - Windows Menu - Ctrl

Sur certains claviers de portable, la touche Windows de droite <RWIN> peut être absente.

Supposons que je dispose d'une touche Windows de droite (nom symbolique de touche : <RWIN>) et que je souhaite y installer la touche compose...

Il se trouve qu'alors je peux utiliser certaines ressources particulières prédéfinies du système XKb prévues pour les touches :

  • Contrôle
  • Alt
  • Majuscules et Verrouillage de Majuscules (Caps_Lock)
  • Windows
  • Compose
  • Menu

Ces ressources sont appelées des « options » dans le jargon XKb (certaines options peuvent aussi traiter les indicateurs lumineux de changement de clavier).

La liste des options possibles se trouve dans un fichier du répertoire rules.

Dans une Mandriva 2008 en français, ce sera dans le fichier rules/xorg que nous la trouverons (plus précisément, dans la partie du fichier qui commence par une ligne ! option = symbols).

Les lignes de ce fichier qui commencent par compose: concernent... la touche Compose, celles qui commencent par ctrl: concernent la touche Contrôle, pour Alt et les touches Windows, les lignes qui commencent par altwin: sont pertinentes et enfin pour la touche de Verrouillage de majuscules (Caps Lock) les lignes d'option commencent par caps:.

La signification des différentes options est indiquée brièvement, en anglais, dans un autre fichier du répertoire rules, xorg.lst. Pour ce qui nous intéresse, dans rules/xorg, nous trouvons une ligne :

compose:rwin          =       +compose(rwin)

qui est « expliquée », dans rules/xorg.lst, ainsi :

compose:rwin         Right Win-key is Compose.

ce qui signifie que cette possibilité de paramétrage permet d'assigner la touche compose à la touche Windows de droite... autrement dit précisément ce que nous souhaitons !

Pour intégrer cette option prédéfinie à notre table de clavier, il nous suffit d'ajouter +compose(rwin) à notre choix des fichiers et sections de fichiers à activer dans le répertoire symbols, ce qui nous donne :

// Table 5
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(rwin)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <LWIN> {  [ F13                      ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

A vrai dire, comme vous l'aurez remarqué, si vous disposez d'une Mandriva 2008 en français, vous n'aurez rien eu à faire, car l'activation d'une touche compose sur la touche Windows de droite correspond précisément à la configuration par défaut... Toutefois, sur certains clavier, il n'existe qu'une seule touche Windows à droite de la barre d'espace et cette unique touche n'est pas considérée comme « la touche Windows de droite », il s'agit sans doute de la touche Windows Menu. Vous pouvez vérifier cela très facilement avec xev.

S'il en est ainsi sur votre clavier, alors vous pouvez avoir envie de greffer plutôt la touche compose, sur la touche Windows Menu (située à droite de la barre d'espace), ce que vous pourrez obtenir ainsi :

// Table 6
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(menu)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <LWIN> { [ F13                      ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

Voilà.... (n'oubliez pas que la modification ne sera activée qu'après avoir lancé en console une commande du type xkbcomp -w 0 -R/usr/share/X11/xkb/ $HOME/.my_clavier/mon_fr $DISPLAY, si la Table 6 se trouve dans le fichier $HOME/.my_clavier/mon_fr, ou après redémarrage du serveur X si cette commande figure dans votre .bash_profile).

Attention : vous ne pouvez ainsi utiliser que les quelques possibilités d'options énumérées explicitement (pour nous) dans rules/xorg !!! On ne dispose donc en fait que des six options suivantes pour la touche compose :

(vous les trouverez en lançant la commande grep 'compose:' /usr/share/X11/xkb/rules/xorg)
compose:ralt         =       +compose(ralt)
compose:lwin         =       +compose(lwin)
compose:rwin         =       +compose(rwin)
compose:menu         =       +compose(menu)
compose:rctrl        =       +compose(rctrl)
compose:caps         =       +compose(caps)

Autrement dit, on ne pourra la placer ainsi que sur : la touche Alt Graph (ralt), la touche Windows de gauche (lwin) ou de droite (rwin), la touche Menu, la touche Contrôle de droite (rctrl) ou la touche de Verrouillage de majuscules (caps).

Que faire alors si vous tenez à mettre la touche compose ailleurs ??? L'intérêt de maîtriser XKb, comme nous vous en donnons ici la possibilité, c'est que cela vous sera tout de même possible. Voyons donc comment en nous rendant à la section suivante...

Les « options » XKB par défaut, communes à tous les utilisateurs, sont déterminées par une ligne commençant par Options XkbOptions du fichier /etc/X11/xorg.conf, voir là-dessus #Les fichiers de configuration du clavier et le système XKb et #Maîtriser les « options » de XKb.
Installer la touche compose « à la main »

Tout en haut à gauche de votre clavier, juste avant la touche 1, vous trouverez une touche peu utilisée, qui porte un petit 2. Le nom xkb de cette touche est <TLDE>.


À noter !
Pour vous y retrouver avec les noms de touches xkb, regardez la section #Les noms symboliques des touches et les keysyms.


Supposons, par exemple, que vous souhaitiez installer la touche compose sur cette touche <TLDE>, une possibilité qui n'est pas « prévue » en tant qu'option (voir sous-section précédente) ? Eh bien, vous pouvez, alors, utiliser le type de modification que nous avons mis en œuvre plus haut à la section #Comment greffer le nouveau keysym sur la touche à modifier. Vous affecterez le keysym de la touche compose à la touche que vous avez choisie.

Un point important à retenir pour cela : le keysym de la touche compose est toujours Multi_key.

Ce qui donne, pour installer, par exemple, compose sur la touche <TLDE>, une table de clavier comme celle-ci :

// Table 7
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <TLDE> { [ Multi_key, Multi_key   ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

Et, bien entendu, vous pouvez aussi placer la touche compose en plusieurs endroits du clavier, si vous le souhaitez vraiment, et rien n'interdit par exemple :

// Table 8
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(menu)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <TLDE> { [ Multi_key, Multi_key   ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

qui créera une touche compose sur la touche <TLDE> ET aussi sur la touche Windows Menu...

Permutation de touches par échange des keysyms

Exemple : permuter la touche Echap avec la touche Windows de gauche ou avec Caps Lock

A partir de la situation correspondant à la table de clavier suivante (que nous avons créée à la section #Utiliser les « OPTIONS » disponibles de XKb pour les touches Ctrl, Alt, Win et Compose) :

// Table 6
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(menu)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <LWIN> {  [ F13                      ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

rien n'est plus simple que de permuter Echap avec la touche Windows de gauche <LWIN>. xev vous permet de trouver le keysym actuellement associé à la touche d'Echappement (Echap) : Escape. Pour obtenir la permutation, il suffit alors de faire ceci :

// Table 9
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(menu)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <ESC>  { [ F13                  ] };
                      key <LWIN> { [ Escape               ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

Désormais, toutes les fonctionnalités habituelles de la touche Echap sont associées à la touche Windows de gauche, la touche Echap devenant une treizième touche de fonction. De la même façon, permuter Echap avec Caps Lock serait possible ainsi :

// Table 10
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(menu)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      key <ESC>  { [ Caps_Lock        ] };
                      key <CAPS> { [ Escape           ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

Vous noterez que la permutation d'Echap avec la touche de modifieur Caps Lock est plutôt plus simple que cela ne l'était avec xmodmap (voir #Permutation des touches Escape et Caps_Lock). Rappel : dans le jargon de l'informatique du clavier, une touche de modifieur est une touche qui a vocation à se combiner avec une ou plusieurs autres (comme : Majuscules, Caps Lock, Contrôle, Alt, Alt Graph...).

Une « option » : la permutation de Contrôle et Caps Lock

Il existe une possibilité prédéfinie, une « option » dans le jargon XKb, qui permet de permuter (anglais swap) la touche Contrôle (de gauche) et la touche Caps Lock (la touche qui permet de faire basculer le clavier durablement entre majuscules ou minuscules).

La commande grep swap /usr/share/X11/xkb/rules/xorg vous permettra de constater que le fichier des options rules/xorg contient une ligne :

ctrl:swapcaps         =       +ctrl(swapcaps)

qui est glosée (comme l'est toute option de XKb) dans le fichier rules/xorg.lst. La ligne suivante de ce fichier (que vous trouverez par un grep 'ctrl:swapcaps' /usr/share/X11/xkb/rules/xorg.lst) explique, en anglais, le sens de l'option ctrl:swapcaps :

ctrl:swapcaps        Swap Control and CapsLock.

Pour permuter ces deux touches, il nous suffit donc d'ajouter +ctrl(swapcaps) dans la section symbols de notre table actuelle, ce qui nous donne la nouvelle table suivante :

// Table 11
default xkb_keymap "mon-fr" {
 xkb_keycodes { include "xfree86+aliases(azerty)"     };
 xkb_types    { include "complete"      };
 xkb_compat   { include "complete"      };
 xkb_symbols  { include "pc+fr+compose(menu)+ctrl(swapcaps)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
              };
 xkb_geometry { include "pc(pc105)"     };
};

Permutation de touches par échange des keycodes

À noter !
Cette section suppose une bonne compréhension des notions de keycode, keysym et nom de touche xkb, notions qui ont été explicités ici et . Rappelons que dans le système xkb les keycodes sont associés à des touches physiques bien déterminées de votre clavier.


Dans l'avant-dernière section, nous avons permuté des touches en modifiant uniquement le contenu de la section xkb_symbols de notre table. Autrement dit en modifiant l'association entre noms de touches et keysyms.

Par exemple, pour permuter les touches Echap (<ESC>) et Caps Lock (<CAPS>) nous avons assigné à la touche <ESC> le keysym Caps_Lock et à la touche <CAPS> le keysym Escape. Nous n'avons pas modifié les noms de ces deux touches.

Une autre possibilité - illustrée dans La page de Mildred - pourrait être de permuter les noms des touches : faire simplement en sorte que le keycode de la touche qui porte actuellement le nom <ESC> soit associé désormais au nom de touche <CAPS> et inversement que le keycode de la touche qui porte actuellement le nom <CAPS> soit associé désormais au nom de touche <ESC>... Il s'agirait donc cette fois de modifier l'association entre keycodes et noms de touches.

On sait que l'association keycodes/noms de touches se fait dans les fichiers du répertoire keycodes.

Il nous suffit donc de trouver le keycode des deux touches avec xev. Si nous découvrons ainsi, grâce à xev, que sur notre système le keycode de la touche d'Echappement est 9 et celui de la touche de Verrouillage de Majuscules est 66, nous obtiendrons la permutation souhaitée des deux touches en modifiant notre table ainsi :

// Table 12
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     
                            <ESC>  = 66; // à l'origine 9
   		            <CAPS> = 9;  // à l'origine 66
                      };

        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+fr+compose(menu)" 
                      key <LatN>  { [ n,  N, emdash, endash ] };
                      };
        xkb_geometry  { include "pc(pc105)"     };
};

On peut donc effectuer une permutation soit en modifiant l'association entre keycodes et noms de touches, soit en modifiant l'association entre noms de touches et keysyms.

Comment choisir entre ces deux techniques de permutation ?

J'avoue que je ne connais pas d'argument strictement déterminant. J'ai cependant une petite préférence pour la première technique, qui permute les keysyms en laissant intacte l'image du clavier (cela revient à dire « désormais la touche qui occupe la position habituelle d'Echap et porte les inscriptions qu'on trouve habituellement sur cette touche aura une autre fonction, celle de basculement majuscules/minuscules » et quelque chose d'analogue pour la touche Caps Lock. Cela me parait en un sens plus « conforme à la réalité ». A vous de voir...

En guise de conclusion provisoire

Au point où nous en sommes, nous voilà donc capables d'effectuer avec XKb toutes les modifications que nous avions appris à effectuer avec xmodmap (voir la section #Réaffecter les touches avec xmodmap). Si donc, comme on nous le dit, xmodmap qui est réputé deprecated (déconseillé), vient à disparaître un jour, nous ne serons pas complètement sans ressources...

Mais xkb permet encore bien d'autres choses, comme nous allons le voir...

Niveaux et types

Qu'est-ce qu'un « niveau » ?

Dans les fichiers du répertoire xkb/symbols et dans notre table de clavier personnalisée telle qu'elle figure, par exemple, dans l'avant-dernière section : #Permutation de touches par échange des keycodes, on peut trouver des lignes qui ressemblent à celle-ci :

key <AD01> { [ a,  A,  æ,  Æ ] };

avec plusieurs keysyms inclus dans une même paire de crochets ([...]). Dans le vocabulaire de XKb, les positions de ces keysyms correspondent à des « niveaux ». Niveau 1 (Level1) pour la première position (occupée ici par le keysym 'a'), niveau 2 (Level2) pour la seconde (occupée ici par le keysym 'A') etc. La plupart des touches de notre clavier français comportent quatre niveaux.

Ces niveaux correspondent pour chaque touche à une certaine combinaison avec des touches de modifieurs telles que Contrôle, Alt, Alt Graph, Majuscules ou Caps Lock.

Nous avons vu que pour la plupart des touches (mais pas pour toutes...) :

  • le niveau 1 correspond à la touche pressée isolément
  • le niveau 2 à Majuscules+touche
  • le niveau 3 à Alt Graph+touche
  • le niveau 4 à Alt Graph+Majuscules+touche.

Qu'est-ce qu'un « type » ?

Un ensemble de niveaux et d'associations de chacun de ces niveaux à une combinaison de modifieurs constitue un TYPE de touche.

Chaque touche du clavier est associée à un certain type de touche.

Les types disponibles sont décrits dans des fichiers du répertoire xkb/types.

Sur un clavier français, l'un des types de touches que l'on rencontre est celui que nous venons de décrire partiellement à la sous-section précédente pour la touche <AD01>, le type FOUR_LEVEL_ALPHABETIC (défini dans le fichier xkb/types/extra), qui, comme son nom l'indique, possède quatre niveaux.

Mais il existe d'autres types.

Certaines touches, par exemple, ne possèdent qu'un seul niveau. C'est le cas de la touche Entrée (<RTRN>) :

key <RTRN> {        [ Return                        ]       };

qui appartient au type ONE_LEVEL décrit dans types/basic. Pour cette touche, on ne trouve, dans la paire de crochets, qu'un seul keysym : Return. La fonctionnalité normale de cette touche s'obtient en effet en la pressant isolément, et le fait de la combiner avec des modifieurs comme Alt, Majuscules ou Contrôle etc. ne change rien. Les deux types qui précèdent sont attribués automatiquement par défaut : ils ne sont pas mentionnés dans la ligne qui décrit le comportement de la touche au sein d'un fichier de xkb/symbols.

Il existe cependant des types de touches qui doivent être attribués explicitement. C'est le cas du type CTRL+ALT, défini dans le fichier xkb/types/pc. Les touches de ce type possèdent deux niveaux. Le premier correspond à la touche pressée isolément et le second à la touche pressée en combinaison avec les touches de modifieur Ctrl et Alt.

Un exemple de touche de ce genre est la touche Backspace, telle que définie dans symbols/pc :

key <BKSP> {
        type="CTRL+ALT",
        symbols[Group1]= [ BackSpace,   Terminate_Server ]
    };

Le keysym de premier niveau (Backspace) correspond à l'action d'effacement du caractère précédent, le keysym de second niveau (Terminate_Server) au redémarrage du serveur X qui se produit quand la touche est pressée en même temps que Ctrl et Alt.

Regardez bien comment le type est indiqué, cela vous servira plus bas, lorsque nous en viendrons à utiliser des types de touches pour personnaliser notre clavier.

Sous la Mandriva 2006 on trouvait une utile description des différents types de touches à la section 4.2 du fichier de documentation README.enhancing qui figurait sur votre disque dur à la racine du répertoire xkb, ce fichier n'est malheureusement plus présent sur les Mandriva 2007 et 2008. Cliquez sur le lien qui précède pour y accéder. Vous pourrez regarder en parallèle les définitions des différents types dans les fichiers du répertoire xkb/types. Cela dit, pour un paramétrage élémentaire, vous pouvez simplement procéder comme indiqué dans cette page. Ces lectures complémentaires ne sont pas « obligatoires ».

Une indication de groupe est aussi nécessaire dans le contexte de l'exemple précédent. Une notion que nous n'aborderons pas dans cette page, car elle joue un rôle limité dans le clavier français (voir là-dessus les documents indiqués dans la section #Autres sources de documentation sur XKb).

Pour vous y retrouver dans ces groupes, vous pouvez retenir que tous les keysyms qui figurent dans une même paire de crochets ([...]) appartiennent au même groupe.

Dans tous les exemples qui précèdent, dans les sections précédentes, il n'y a qu'une seule paire de crochets par touche, donc un seul groupe.

L'utilisation de groupes multiples est utile pour qui souhaite disposer de plusieurs configurations de clavier (un clavier français azerty, un clavier anglais qwerty, un clavier pour la transcription phonétique en Alphabet Phonétique International etc.) avec une possibilité de passer aisément de l'un à l'autre par une certaine combinaison de touches. Nous en donnerons un exemple à la section : #Passer d'une langue à une autre.

Personnaliser son clavier à l'aide des types

Il vous est possible de changer le type d'une touche de votre clavier. Par exemple, si vous ne savez pas quoi faire de votre touche <TLDE> (la touche située immédiatement à gauche du 1), vous pouvez lui faire jouer le même rôle qu'à la touche Backspace, ce que vous obtiendrez avec une table personnalisée comme celle-ci :

// Table 13
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols  { include "pc+fr+compose(menu)" 
            key <LatN> { [ n,  N, emdash, endash ] };
            key <LWIN> { [ F13                    ] };
            key <TLDE> {
                 type="CTRL+ALT",
                 symbols[Group1]= [ BackSpace,  Terminate_Server ]
                                 };

           };
        xkb_geometry  { include "pc(pc105)"     };
};

Désormais, la combinaison Ctrl+Alt+TLDE relancera le serveur X tout comme <Ctrl-Alt-Retour Arrière> (= Ctrl+Alt+Backspace). Il vous est possible aussi de donner à une touche de votre clavier, tout à fait comme dans l'exemple qui précède, un type à deux niveaux où le second niveau s'obtient en utilisant d'autres touches de modifieurs :

  • Contrôle + touche (type PC_BREAK)
  • Alt + touche (type PC_SYSRQ)
  • Majuscules + Alt + touche (type SHIFT+ALT).

Tout cela élargit considérablement la gamme des modifications que vous pouvez introduire dans votre clavier : vous en êtes maintenant vraiment le maître...

Passer d'une langue à une autre

Introduction

Comment se doter de deux ou plusieurs claviers configurés pour des langues différentes ? Comment pouvoir passer aisément d'une configuration pour une langue à une configuration pour une autre langue ? Nous donnerons ici un exemple simple qui devrait vous guider pour effectuer des manœuvres de ce genre.

Installer une configuration de clavier pour une autre langue

Pour cela, nous allons modifier la table de clavier personnalisée à laquelle nous avons travaillé dans les sections précédentes (et qui dans notre exemple était un fichier texte ~/.my_clavier/mon_fr). Nous supposons donc que vous êtes doté d'un clavier azerty pour le français. Pour disposer d'une seconde configuration de clavier de type qwerty pour l'anglais, vous pouvez ajouter, dans la partie de la table qui concerne le répertoire symbols, l'indication : +us:2 ceci activera la section default du fichier symbols/pc/us dans le contexte de notre « deuxième » clavier. Nous allons aussi définir une combinaison de touches qui permettra de basculer le clavier d'une configuration à une autre. Pour cela, j'ai choisi d'ajouter, toujours dans la partie de la table qui concerne les fichiers du répertoire symbols, cette « option » : +group(shifts_toggle) qui permettra de passer du français à l'anglais et inversement, en pressant simultanément sur les deux touches Majuscules. La table de clavier personnalisée pourra alors ressembler à ceci :

// Table 14
default xkb_keymap "mon_fr" {
     xkb_keycodes   { include "xfree86+aliases(azerty)" };
     xkb_types      { include "complete" };
     xkb_compat     { include "complete" };
     xkb_symbols    { include "pc+fr+us:2+group(shifts_toggle)" };
     xkb_geometry   { include "pc(pc105)" };
};

Vous auriez aimé utiliser une autre combinaison de touches pour basculer d'un clavier à l'autre ? Qu'à cela ne tienne, XKb vous propose de nombreuses autres possibilités. Comme toutes les « options » de XKb, elles sont énumérées dans un fichier du répertoire rules (pour moi dans rules/xorg), plus précisément dans la partie de ce fichier qui fait suite à la ligne ! option = symbols. Les lignes qui nous intéressent sont celles qui commencent par grp:. Comme pour toutes les options, une description simple (en anglais) de chacune de ces options se trouve dans le fichier *.lst correspondant (pour moi par conséquent dans : rules/xorg.lst).

Si d'autres langues que l'anglais et le français vous intéressent, vous pourrez peut-être trouver le fichier approprié à activer parmi les nombreux fichiers pour diverses langues qui figurent dans le répertoire symbols.

Personnaliser les touches des deux claviers

La création de deux claviers dans une même table fait appel à la notion de group. Dans notre exemple, les touches du clavier français seront associées à un keysym dans le cadre du Group1, tandis que l'association des touches du clavier anglais avec des keysyms relèvera du Group2. Pour changer la valeur des touches, nous devons donc crucialement faire référence à ces groupes.

Installer une touche compose sur les deux claviers

Dans la sous-section #Créer une touche compose, nous avions montré comment installer une touche compose sur notre clavier azerty français, qui était notre unique clavier, à ce moment-là. Pour installer maintenant cette touche sur chacun de nos deux claviers, et l'associer à la touche Menu, nous devons faire référence explicitement aux groupes, comme suit :

// Table 15
default xkb_keymap "mon_fr" {
     xkb_keycodes   { include "xfree86+aliases(azerty)" };
     xkb_types      { include "complete" };
     xkb_compat     { include "complete" };
     xkb_symbols    { include "pc+fr+us:2+group(shifts_toggle)" 
                 key    <MENU>   {     symbols[Group1]=  [ Multi_key, Multi_key ],
                                       symbols[Group2]=  [ Multi_key, Multi_key ] };
                    };
     xkb_geometry   { include "pc(pc105)" };
};
Modifier l'inventaire des caractères associés à une touche

Dans la sous-section #Affecter un nouveau caractère à une touche, nous avions montré comment associer le tiret cadratin et le tiret demi cadratin à la touche N de notre clavier azerty français, qui était notre unique clavier, à ce moment-là. Pour associer maintenant ces deux caractères à la touche N de chacun de nos deux claviers (qui dans les deux cas est la touche <AB06>), nous devons faire référence explicitement aux groupes, comme suit :

// Table 16
default xkb_keymap "mon_fr" {
     xkb_keycodes   { include "xfree86+aliases(azerty)" };
     xkb_types      { include "complete" };
     xkb_compat     { include "complete" };
     xkb_symbols    { include "pc+fr+us:2+group(shifts_toggle)" 
                 key    <MENU>   {     symbols[Group1]=  [ Multi_key, Multi_key ],
                                       symbols[Group2]=  [ Multi_key, Multi_key ] };
                 key    <AB06>   {     symbols[Group1]=  [ n, N, emdash, endash ],
                                       symbols[Group2]=  [ n, N, emdash, endash ] };
                    };
     xkb_geometry   { include "pc(pc105)" };
};

Pour apporter des modifications à l'un ou l'autre de vos deux claviers, vous pourrez procéder comme dans les deux exemples qui précèdent. Bien entendu, vous pouvez parfaitement apporter une modification à l'un des deux claviers seulement, si c'est ce que vous souhaitez.

Signaler un changement de clavier avec un indicateur lumineux

Pour que l'indicateur lumineux de défilement signale le changement de clavier, vous pourrez activer une section du fichier compat/ledscroll, comme dans la table suivante :

// Table 16 bis
default xkb_keymap "mon_fr" {
     xkb_keycodes   { include "xfree86+aliases(azerty)" };
     xkb_types      { include "complete" };
     xkb_compat     { include "complete+ledscroll(group_lock)" };
     xkb_symbols    { include "pc+fr+us:2+group(shifts_toggle)"
                 key    <MENU>   {     symbols[Group1]=  [ Multi_key, Multi_key ],
                                       symbols[Group2]=  [ Multi_key, Multi_key ] };
                 key    <AB06>   {     symbols[Group1]=  [ n, N, emdash, endash ],
                                       symbols[Group2]=  [ n, N, emdash, endash ] };
                 key    <LWIN>   {     symbols[Group1]=  [       F13 ],
                                       symbols[Group2]=  [       F13 ] };
                    };
     xkb_geometry   { include "pc(pc105)" };
};

Pour y voir plus clair dans sa propre table de clavier personnalisée

Comparer votre table personnalisée à la configuration par défaut du système

Imaginons qu'au fil des pages qui précèdent, vous ayez apporté de nombreuses adjonctions ou modifications à la table personnalisée qui est activée au lancement du serveur X sous votre compte d'utilisateur... Du temps passe... arrive un moment où vous ne savez plus très bien en quoi exactement votre configuration diffère de la configuration du système, vous vous y perdez un peu... Que faire ?

Eh bien, il est bon alors de savoir que la ligne de commande setxkbmap -print - que nous avons utilisée plus haut à la section #Découvrir sa configuration XKb avec setxkbmap et qui nous a servi de point de départ (voir #Créer une copie personnelle de la keymap par défaut) - continuera à afficher imperturbablement la configuration par défaut du système, même si vous avez activé une table de clavier d'utilisateur personnalisée contenant toute sorte de modifications.

Pour savoir où vous en êtes, vous pourrez donc comparer la sortie de setxkbmap -print avec la table de clavier personnalisée qui est activée chaque fois que votre serveur X personnel est relancé, si du moins vous avez suivi nos recommandations de la section #Relancer X. Dans nos exemples, cette table était le fichier texte ~/.my_clavier/mon_fr.


Par ailleurs, si vous voulez expérimenter concrètement la différence entre le paramétrage général par défaut et votre paramétrage personnalisé, souvenez-vous que, si vous avez suivi nos suggestions, il suffira pour cela de commenter (faire précéder d'un dièse) la ligne du fichier ~/.bash_profile qui lance la commande xkbcomp et de relancer le serveur X : vous vous retrouverez ainsi très simplement avec le seul paramétrage général par défaut activé, tel qu'il fonctionnait avant que vous n'ayez modifié quoi que ce soit.

Créer un fichier source correspondant à votre table de clavier personnalisée

La table de clavier personnalisée (créée en #Créer une copie personnelle de la keymap par défaut), qui est recompilée chaque fois que le serveur X est lancé sous votre identité personnelle d'utilisateur (voir #Relancer X), inclut, nous l'avons vu, (via des instructions include) de nombreuses sections de fichiers du répertoire xkb. Et ces sections, nous le savons aussi, peuvent elles-mêmes inclure d'autres sections de fichiers, qui elles-mêmes en incluent peut-être d'autres etc. Reconstituer l'ensemble des lignes qui sont réellement compilées serait de ce fait un travail épouvantable... D'autant que certaines lignes peuvent être « concurrentes », par exemple, plusieurs sections incluses peuvent définir une même touche... (il faut savoir que dans ce cas, c'est la dernière qui l'emporte). Bref... bien difficile de savoir ce que fait vraiment votre table, en définitive !!

HEUREUSEMENT, il existe une superbe ligne de commande qui crée un fichier source correspondant à votre table, un fichier où se trouvent explicitées toutes les lignes compilées !!

Pour créer ce fichier, il vous suffira de lancer la commande xkbcomp avec l'option -xkb. Vous lancerez donc simplement (si votre table de clavier a bien été activée au lancement du serveur X) :

xkbcomp -xkb  $DISPLAY

(rappelons que la variable $DISPLAY contient le nom de la console X courante).
Cela créera, dans le répertoire courant, un fichier texte source server-0.xkb (si vous êtes sur la console X '0') qui correspondra à la table de clavier actuellement active pour la console X courante $DISPLAY.

Ce fichier est intéressant à plus d'un titre :

  • vous pourrez l'examiner et l'étudier tout à loisir
  • vous pourrez l'éditer « à la main » (dans un éditeur de texte) puis le recompiler !
    Ainsi, si vous avez créé server-0.xkb dans le répertoire ~/.my_clavier, vous pourrez le recompiler, après l'avoir édité, et le rendre actif pour la console X $DISPLAY, en lançant la commande :
xkbcomp -w 0 $HOME/.my_clavier/server-0.xkb  $DISPLAY

Pour compiler et activer ce fichier source au démarrage du serveur X, nous pourrions donc introduire cette ligne dans notre .bash_profile (et commenter la ligne qui lançait précédemment la commande). Autrement dit, nous pourrions remplacer dans .bash_profile la ligne

xkbcomp -w 0 -R/usr/share/X11/xkb/  $HOME/.my_clavier/mon_fr  $DISPLAY

par :

# xkbcomp -w 0 -R/usr/share/X11/xkb/  $HOME/.my_clavier/mon_fr  $DISPLAY
xkbcomp -w 0 $HOME/.my_clavier/server-0.xkb $DISPLAY

et ceci fait nous pourrons relancer X par un <Ctrl-Alt-Retour Arrière>.

  • vous pourrez envoyer ce fichier à d'autres personnes, pour qu'elles l'étudient, l'éditent ou l'activent à leur tour sous leur propre compte, ou, si vous êtes administrateur, vous pourrez l'installer vous-même chez les divers utilisateurs de votre système
  • vous pourrez l'emporter avec vous lorsque vous serez en déplacement pour l'activer sur une autre machine Linux
  • enfin, il est intéressant de noter que, dans ce fichier, les types et les groupes - qui restent souvent implicites dans les fichiers du répertoire symbols - sont presque toujours explicites, ce qui peut être d'un grand secours lorsqu'on veut comprendre parfaitement le fonctionnement des types sous XKb.
  • vous pourrez travailler sur les touches beaucoup plus facilement à partir de ce fichier : supposons que vous souhaitiez savoir quels keysyms sont au juste attachés à une certaine touche du clavier par exemple la touche Windows de gauche, voici la marche à suivre (très simple et rapide) :
  • 1. TROUVER LE KEYCODE. Si vous n'êtes pas sûr du nom symbolique de la touche, cherchez d'abord son keycode, qui vous permettra ensuite de trouver le nom symbolique. En console, lancez donc xev et pressez la touche : vous obtiendrez ainsi son keycode (xev vous donne aussi son keysym de premier niveau). Dans notre exemple, sur ma machine, le keycode obtenu pour la touche Windows de gauche est 115 (et le keysym livré par xev pourrait être, disons, Super_L).
  • 2. TROUVER LE NOM DE TOUCHE. Cherchons maintenant les lignes du fichier server-0.xkb qui contiennent le keycode de la touche (115) :
    grep 115 server-0.xkb
    Nous obtenons :
     <LWIN> = 115;
    le nom de la touche Windows de gauche est donc <LWIN>.
  • 3. TROUVER LES KEYSYMS. Pour avoir la liste complète des keysyms qui lui sont attachés, faisons :
    grep  LWIN server-x0.xkb
    (ce par quoi vous auriez pu commencer si le nom symbolique de la touche vous avait été déjà connu de façon certaine).

Nous obtenons :

<LWIN> = 115;
alias <LMTA> = <LWIN>;    
key <LWIN> {         [         Super_L ] };
              { <LWIN>, "SMOD",   1, color="grey20" },

Nous connaissons déjà la première ligne ; la seconde nous apprend que notre touche possède aussi un alias <LMTA> (pour « LeftMeta » autrement dit : « Meta de gauche ») ; la troisième ligne nous apprend que Super_L est son unique keysym. La quatrième ligne donne des indications utilisées par le module geometry pour en dessiner l'image.

Si vous travaillez sur un clavier avec deux ou trois groupes, il pourra être utile, pour obtenir toutes les informations, de lancer grep avec l'option -A 3 ou -A 4 (qui affichera les trois ou quatre lignes qui suivent la ligne repérée).

Remplacer la table de clavier personnalisée par le fichier server-0.xkb ??

Comme vous l'avez sûrement remarqué, il devient maintenant concevable que le fichier server-0.xkb dont nous avons parlé dans les sections précédentes « court-circuite » complètement la table de clavier personnalisée créée puis mise au point au fil des sections précédentes (rappelons que, dans notre exemple, la table de clavier personnalisée était un fichier /.my_clavier/mon_fr).

Le fichier server-0.xkb peut, en effet, comme nous venons de le voir, être activé par défaut au lancement de X, être installé sur d'autres comptes ou d'autres machines et vous pouvez aussi le modifier directement à la main et le recompiler chaque fois que vous voulez modifier votre configuration de clavier personnelle.

On a donc en somme le choix entre gestion par table de clavier personnalisée, comme dans les sections précédentes, et une gestion par un fichier server-0.xkb. Que choisir ?

Notez que, naturellement, il est possible aussi d'installer la table de clavier personnalisée sur un autre compte ou une autre machine, de ce point de vue il n'y a pas de différence.

Vous ferez comme vous l'entendrez, mais je dois dire que, pour ma part, je préfère continuer à utiliser la table de clavier, comme dans les sections précédentes. Elle présente, en effet, l'intérêt de rendre aisément visibles mes propres apports, ajouts ou modifications, à la configuration générale (voir #Comparer votre table personnalisée à la configuration par défaut du système), alors que dans le fichier server-0.xkb rien n'indique si une ligne particulière vient du système ou de moi.

Je préfère donc considérer le fichier server-0.xkb comme un très utile document annexe, qui me permet d'avoir un panorama complet et précis de toute ma configuration et qui me permet notamment de trouver sans difficulté les propriétés d'une touche particulière (comme je l'ai montré à la fin de la section précédente). A vous de voir...

Répartir le contenu de votre table personnalisée sur plusieurs fichiers

Dans les pages qui précèdent nous avons placé la totalité de notre personnalisation du clavier dans un fichier unique (notre ~/.my_clavier/mon_fr). Cela peut être une bonne idée de « centraliser » ainsi toutes vos modifications en un seul lieu. Cela dit, si vous ajoutez beaucoup d'éléments personnels à votre clavier, vous pouvez avoir aussi envie de rendre tout cela plus « modulaire », d'en répartir le contenu en plusieurs fichiers, ayant chacun une spécificité et que vous pourrez, par exemple, transmettre à d'autres personnes isolément. Cela est aussi possible sous XKb.

Par exemple, supposons que vous souhaitiez intégrer à votre personnalisation du clavier le contenu de l'excellent petit fichier numlock proposé à la page : Comment personnaliser le pavé numérique. Ce fichier est destiné à faire en sorte que le rôle de la touche Verr. Num soit inversé pour les touches du clavier numérique : une fois ce fichier activé les touches du clavier numérique produisent des chiffres par défaut (sans qu'il soit nécessaire de les combiner avec la touche Verr. Num), et inversement pour obtenir les fonctionnalités qui sont d'ordinaire les fonctionnalités par défaut de ces touches, il sera nécessaire de les combiner avec Verr. Num.

Pour activer ce fichier, ill vous serait évidemment possible d'en intégrer directement le contenu à votre table (dans la section xkb_symbols), comme ceci :

// Table 17
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols  { include "pc+fr+compose(menu)" 
            key <LatN> { [ n,  N, emdash, endash ] };
            key <LWIN> { [ F13                    ] };
            key <TLDE> {
                 type="CTRL+ALT",
                 symbols[Group1]= [ BackSpace,  Terminate_Server ]
                       };
// début du contenu de numlock
    key  <KP7> {        [  7, KP_7                ]    };
    key  <KP8> {        [  8, KP_Up               ]    };
    key  <KP9> {        [  9, KP_Prior            ]    };
    key  <KP4> {        [  4, KP_Left             ]    };
    key  <KP5> {        [  5, KP_Begin            ]    };
    key  <KP6> {        [  6, KP_Right            ]    };
    key  <KP1> {        [  1, KP_End              ]    };
    key  <KP2> {        [  2, KP_Down             ]    };
    key  <KP3> {        [  3, KP_Next             ]    };
    key  <KP0> {        [  0, KP_Insert           ]    };
    key <KPDL> {        [  period, KP_Delete      ]    };
    key <KPDV> {        [  slash, KP_Divide       ]    };
    key <KPMU> {        [  asterisk, KP_Multiply  ]    };
    key <KPSU> {        [  minus, KP_Subtract     ]    };
    key <KPAD> {        [  plus, KP_Add           ]    };
    key <KPEN> {        [  Return, KP_Enter       ]    };
// fin du contenu de numlock
           };

             xkb_geometry { include "pc(pc105)" };
 };

Mais il serait peut-être plus facile à gérer et plus lisible de créer un fichier ~/.my_clavier/numlock contenant ceci :

// Fichier numlock
partial keypad_keys

xkb_symbols "reversed"  {
    key  <KP7> {        [  7, KP_7                ]    };
    key  <KP8> {        [  8, KP_Up               ]    };
    key  <KP9> {        [  9, KP_Prior            ]    };
    key  <KP4> {        [  4, KP_Left             ]    };
    key  <KP5> {        [  5, KP_Begin            ]    };
    key  <KP6> {        [  6, KP_Right            ]    };
    key  <KP1> {        [  1, KP_End              ]    };
    key  <KP2> {        [  2, KP_Down             ]    };
    key  <KP3> {        [  3, KP_Next             ]    };
    key  <KP0> {        [  0, KP_Insert           ]    };
    key <KPDL> {        [  period, KP_Delete      ]    };
    key <KPDV> {        [  slash, KP_Divide       ]    };
    key <KPMU> {        [  asterisk, KP_Multiply  ]    };
    key <KPSU> {        [  minus, KP_Subtract     ]    };
    key <KPAD> {        [  plus, KP_Add           ]    };
    key <KPEN> {        [  Return, KP_Enter       ]    };
};

Et d'y faire référence dans votre table par un simple +numlock, ajouté dans les include de la section xkb_symbols, ce qui donnerait pour ~/.my_clavier/mon_fr :

// Table 18
default xkb_keymap "mon-fr" {
        xkb_keycodes  { include "xfree86+aliases(azerty)"     };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols  { include "pc+fr+compose(menu)+numlock" 
            key <LatN> { [ n,  N, emdash, endash ] };
            key <LWIN> { [ F13                    ] };
            key <TLDE> {
                 type="CTRL+ALT",
                 symbols[Group1]= [ BackSpace,  Terminate_Server ]
                       };
           };

             xkb_geometry { include "pc(pc105)" };
 };

Comment faire en sorte que XKb cherche le fichier numlock au bon endroit (autrement dit dans le répertoire ~/.my_clavier) ? Il suffit d'utiliser pour cela une autre option de la commande xkbcomp, l'option -I. L'argument qui suit immédiatement (sans espace) cette option indique le répertoire où xkbcomp devra chercher les fichiers personnels que vous aurez créés ou reproduits. Notre ligne de commande xkbcomp (à lancer en console et à placer dans le ~/.bash_profile) devient donc alors :

xkbcomp -w 0 -R/usr/share/X11/xkb/ -I$HOME/.my_clavier/  $HOME/.my_clavier/mon_fr  $DISPLAY

Nous utiliserons par la suite cette technique pour remplacer toute une section de la table de clavier personnalisée par un fichier de notre crû. Voir la section : #Créer une image graphique de son clavier avec xkbprint. /media/SauvDD

Une fonction pour gérer plus facilement votre/vos table(s)

Lorsque vous mettez au point votre table de clavier, après chaque modification, il vous faut, pour réactiver la table modifiée, lancer une commande xkbcomp longue et compliquée ou bien, à tout le moins, récupérer cette commande dans l'historique de votre shell.

D'autre part, au cours de la mise au point vous pouvez élaborer plusieurs tables différentes pour les expérimenter. Certaines d'entre elles pourront du reste être conservées pour répondre à des besoins diversifiés et seront alors réactivées à la volée.

Pour gérer tout cela plus clairement et simplement, je me suis fait une fonction, que j'ai placée dans mon fichier /~/.bashrc. Cette fonction s'appelle xkb (eh oui, le mot est disponible, vérifiez qu'il en va de même sur votre machine en tapant en console : type xkb). La voici :

function xkb() {

if [  -n  "$1" ]; then
cp -f $1 $HOME/.my_clavier/mon_fr
fi

xkbcomp -w 1  -R/usr/share/X11/xkb/  -I$HOME/.my_clavier  $HOME/.my_clavier/mon_fr $DISPLAY
}

(attention : notez bien que les options -R et -I ne doivent pas être séparées par un espace du paramètre qui les suit).

Elle permet deux choses :
- lorsque je viens de modifier ma table par défaut (celle qui est systématiquement lancée à chaque démarrage du serveur X) : ~/.my_clavier/mon_fr, pour l'activer et prendre ainsi en compte la dernière modification, je dois juste taper :

xkb

- si je veux activer l'une de mes diverses tables de clavier à l'essai (ou répondant à des besoins différents), je lui passe la table à activer en argument, son contenu deviendra celui de la table par défaut. Pour activer par exemple la table ~/.my_clavier/mon_fr14, je tape simplement :

xkb ~/.my_clavier/mon_fr14

Notez que, dans le code de la fonction, je lance xkbcomp avec l'option -w 1, au lieu de -w 0. Cela présente l'inconvénient mineur d'afficher assez souvent un tout petit nombre de messages d'avertissement (Warning) probablement sans grande importance, mais cela présente aussi l'avantage qu'en cas de problème à la compilation, j'obtiendrai un message vraiment utile, sans avoir besoin de relancer la commande avec une valeur plus élevée pour l'option -w.

Maîtriser les « options » de XKb

Introduction : qu'est-ce que les « options » ?

Vous voulez faire de votre touche Windows Menu une touche compose ? Vous aimeriez qu'un certain indicateur lumineux soit activé dès que vous passez de votre configuration de clavier français azerty à un clavier qwerty configuré pour l'anglais ? Vous souhaiteriez permuter le rôle des touches de « modifieur » Contrôle de gauche et Caps Lock (la touche qui fait basculer tout le clavier en majuscules) ? Tout cela peut être fait à l'aide des « options » prédéfinies de XKb. Deux questions se posent alors à l'utilisateur :
- comment trouver une liste de toutes ces options avec une description de leur rôle ?
- comment activer une option ?

L'objectif de cette section est de donner des réponse à ces questions (et vous verrez qu'il existe plus d'une réponse à chacune d'elles). Mais pour commencer, il faut comprendre que ces options n'ont rien de mystérieux : chaque option correspond à une section de l'un des fichiers du répertoire /usr/share/X11/xkb. La plupart d'entre elles se trouvent dans le sous-répertoire symbols, quelques-unes (celle qui traitent des indicateurs lumineux) dans le sous-répertoire compat, quelques autres sont dans le sous-répertoire types. Juste à titre d'exemple, voici à quoi ressemble la section du fichier /usr/share/X11/xkb/symbols/ctrl qui définit l'option permettant de permuter la touche Contrôle de gauche avec la touche Caps Lock (une option dont nous avons montré comment elle pouvait être activée à la section #Une « option » : la permutation de Contrôle et Caps Lock) :

// swap the caps lock key with the left control key
partial modifier_keys
xkb_symbols "swapcaps" {
    key <CAPS>  {  symbols[Group1]= [ Control_L ] };
    key <LCTL>  {  symbols[Group1]= [ Caps_Lock ] };
};

Cela dit, il n'est nullement nécessaire de regarder, d'analyser et de comprendre en détail les différentes sections de fichier qui définissent les options pour pouvoir les utiliser... En cas de besoin, il est cependant utile de savoir que c'est possible.

La syntaxe des options

Il existe deux façons de faire référence à une option. Selon le contexte, on doit recourir à l'une ou à l'autre.

Si vous avez lu les pages qui précèdent, vous devriez être familiarisé avec le découpage des fichiers en sections et la façon d'y faire référence. Vous ne serez donc pas surpris de constater, que comme toute section d'un fichier de configuration de XKB, une option peut être activée à l'aide d'une suite de caractères de la forme générale :

+nom_de_fichier(nom_de_section).

Par exemple, l'option qui permute la touche Contrôle de gauche et la touche Caps Lock peut être représentée ainsi dans la section symbols : +ctrl(swapcaps), car elle est définie dans la section swapcaps du fichier ctrl du répertoire symbols.


Mais, dans certains contextes, il existe une autre façon de faire référence aux options, sous la forme de deux suites de caractères séparées par deux points :

machin:truc

ce qui donnerait pour la même option : ctrl:swapcaps.

Comme nous le verrons dans les sections qui suivent, la syntaxe machin:truc s'emploie

et

tandis que la syntaxe +nom_de_fichier(nom_de_section) s'emploie dans les tables de clavier personnalisées.

La liste des options avec leur explication

La liste des options disponibles se trouve dans un fichier du répertoire rules. Si, comme il est probable, votre configuration du clavier par défaut - telle que définie dans la section keycodes de votre table par défaut (cf. #Découvrir sa configuration XKb avec setxkbmap) - est xfree86, le fichier pertinent pour vous devrait être rules/xorg.lst (qui sur ma machine est en fait un lien vers rules/base.lst). Les options se trouvent énumérées dans ce fichier après la ligne suivante :

! option

La ligne qui correspond à l'option qui permute la touche Contrôle de gauche et la touche Caps Lock, par exemple, sera :

ctrl:swapcaps        Swap Control and CapsLock.

L'option est représentée avec la syntaxe machin:truc et elle est suivie d'une petite explication en anglais (nous verrons plus bas où trouver une explication en français). Si vous connaissez un minimum d'anglais vous pouvez donc facilement prendre ainsi connaissance de l'éventail des possibilités d'options offertes par XKb. Comment accéder à l'autre syntaxe de l'option, celle qui correspond à son appartenance à un fichier et à une section de ce fichier ? Vous la trouverez dans le fichier correspondant privé de l'extension .lst, autrement dit ici dans le fichier rules/xorg (qui sur ma machine est un lien vers rules/base). Dans ce fichier, les options suivent l'une des trois lignes suivantes, selon qu'elle appartiennent à l'un ou l'autre des répertoires symbols, compat ou types :

! option        =       symbols

! option        =       compat

! option        =       types

La ligne correspondant à notre option de permutation Contrôle/Caps Lock, se trouve sous la ligne des options du répertoire symbols et se présente ainsi :

ctrl:swapcaps         =       +ctrl(swapcaps)

elle indique la correspondance entre les deux façons de représenter l'option.

Vous trouverez une description en français d'une grande partie des options (sur ma machine un peu plus de cinquante pour cent d'entre elles), dans l'interface graphique de l'utilitaire Kxkb de KDE, dont nous parlerons plus bas. Même si vous n'utilisez pas cet utilitaire pour fixer votre choix d'options, vous pouvez vous en servir pour prendre connaissances de descriptions en français de leur fonctionnalité si l'anglais est un problème pour vous.

Activer une option pour la durée de la session X en cours avec setxkbmap

Il est possible d'activer une option avec la commande sexkbmap et l'option -option, en utilisant la syntaxe machin:truc pour l'option à activer. Par exemple pour activer l'option de permutation Contrôle/Caps Lock, on lancera :

setxmodmap -option ctrl:swapcaps

On peut activer plusieurs options en les séparant par des virgules, par exemple pour installer en même temps la touche compose sur la touche Menu :

setxmodmap -option ctrl:swapcaps,compose:menu

Activer en permanence une option avec l'utilitaire Kxkb de KDE

Sous KDE, l'utilitaire Kxkb vous offre un choix d'options de XKb à sélectionner dans une interface graphique (un peu plus de la moitié des options disponibles sous XKb sont proposées par Kxkb).

Ces options permettent de modifier la disposition ou le comportement de certaines touches particulières (Alt, Ctrl, Majuscules, Verrouillage de Majuscules (Caps Lock), Compose et les touches Windows). Il permet aussi d'activer des indicateurs lumineux de changement de clavier.

Pour y accéder, cliquez sur le menu principal : Menu K->Applications->Outils->Outils système->Centre de contrôle de KDE->Régionalisation et accessibilité->Disposition du clavier->Options XKb->Activer les options XKb.

Lorsque vous activez une option, la commande setxkbmap correspondante est affichée en bas de la fenêtre. Mais la personnalisation reste valide en permanence, elle n'est pas limitée à la session en cours.

Si vous avez choisi de personnaliser votre clavier avec une table personnelle, comme suggéré dans les sections précédentes de cette page, vous pouvez préférer ne pas faire usage de cet utilitaire, décochez alors la case Activer les options de Kxkb et placez la totalité de votre configuration dans votre table personnelle en suivant les indications que nous avons données précédemment. Dans ce cas, Kxkb reste cependant utile pour disposer d'une description en français des principales options (les noms des options apparaissent en bas de la fenêtre, une fois les cases correspondantes cochées, en position d'arguments de setxkbmap).

Activer une option par l'entremise d'une table de clavier d'utilisateur

C'est la méthode que nous avons présentée dans les sections précédentes, auxquelles nous vous renvoyons donc. La syntaxe utilisée est +nom_de_fichier(nom_de_section). On trouvera des exemples de ce genre de modification apportée à la table par défaut, créée dans #Premiers pas, aux sections  :


Notez que cette technique (modifier et activer une table de clavier personnelle) permet d'activer les options XKb mais aussi de définir d'autres modifications non prédéfinies sous forme d'options, comme nous l'avons longuement montré.

Activer une option pour tout le système

C'est la méthode le plus souvent décrite dans les documentations accessibles. Nous vous renvoyons donc aux liens de la section #Autres sources de documentation sur XKb. A titre d'exemple, pour activer sur tout le système l'option de permutation Contrôle de gauche/Caps Lock, voici ce que l'on peut faire. Vous pouvez modifier la section sur le clavier du fichier de configuration de X /etc/X11/xorg.conf. Cette section commence probablement par quelque chose comme :

Section "InputDevice"
    Identifier "Keyboard1"
    Driver "kbd"

Pour activer notre option vous y ajouterez une ligne :

Option "XkbOptions" "ctrl:swapcaps"

(respectez bien les guillemets ; notez que c'est la syntaxe machin:truc qui est utilisée pour désigner l'option). Pour activer plus d'une option, les séparer par une virgule :

Option "XkbOptions" "ctrl:swapcaps,compose:menu"

Créer une image graphique de son clavier avec xkbprint

J'ai tenté de faire en sorte que cette page puisse être utilisée par des lecteurs qui ne savent encore rien sur XKb, je ne suis pas sûr d'y avoir réussi... La lecture des sections précédentes devrait aider, en tout état de cause !

Introduction

Dès la fin de la section #A quoi servent les fichiers des répertoires keycodes et symbols ?, que vous avez peut-être lue, nous vous avions indiqué comment créer une image de votre clavier. Nous allons reprendre ici ces indications, les affiner, et vous donner les moyens de personnaliser de telles images.

Rappelons donc pour commencer ce que nous avions proposé.

Il s'agissait d'utiliser la commande xkbprint (si elle n'est pas active sur votre système vous pouvez l'installer aisément via un paquetage rpm qui porte son nom). Pour obtenir une image qui correspond, au moins en gros, à votre clavier actuel, vous pouvez donner en argument à xkbprint la variable d'environnement DISPLAY, qui contient le nom de la console X courante (vous pouvez voir ce que contient cette variable en lançant sur une console la commande echo $DISPLAY). Vous pouvez donc lancer ceci :

xkbprint -color -label name $DISPLAY

(notez que, contrairement à l'usage courant sous le shell Bash, les options longues color et label sont précédées d'un unique tiret). Vous obtiendrez alors un fichier Postscript dont le nom sera probablement : server-0.ps. Ouvrez-le avec un visionneur de fichiers Postscript, par exemple KGhostview ou Evince :

evince server-0.ps

Et admirez le résultat…

En fait, il est probable, particulièrement si vous avez un portable ou un clavier un peu spécial, que l'image obtenue ne corresponde pas strictement à votre clavier : il peut y avoir parfois une touche en trop ou manquante et la disposition des touches n'est pas toujours exactement celle que vous avez en face de vous. Dans cette page, nous voudrions vous donner les moyens de travailler cette image afin qu'elle soit aussi proche que possible de celle de votre clavier actuel... A titre d'exemple de ce que cela peut donner, vous pourrez regarder l'image (en fait, retravaillée selon des méthodes que nous exposerons plus bas) que j'obtiens ainsi à partir de mon clavier : Clavier de portable.ps. Vous trouverez un autre exemple à la section 5.A1 de An unreliable guide to XKb de Doug Palmer. Vous avez remarqué que, dans ces différents exemples, sont affichés sur les touches, d'une part, leur nom de touche et, d'autre part, leur keycode.

Rappels : Sur les notions de keycodes et de keysyms voir #Introduction : codes numériques et événements ainsi que #A quoi servent les fichiers des répertoires keycodes et symbols ?. Vous trouverez une liste commentée de noms de touches sous XKb à la page : Les noms symboliques des touches sous XKb.

Vous pouvez noter dès maintenant qu'il vous sera toujours possible d'utiliser les options de xkbprint pour varier le type d'information qui sera affiché dans l'image pour chaque touche du clavier. Vous pourriez par exemple n'afficher sur l'image que les keycodes (sans les keysyms) avec l'option -label code, ou obtenir à la fois les keysyms et les keycodes (mais cette fois sans les noms symboliques de touche) avec l'option -label symbols. Enfin, l'option -lc fr convertira les noms des keysyms de caractères spéciaux affichables en ces caractères eux-mêmes, la commande suivante devrait donc afficher tous les caractères imprimables, même spéciaux, ainsi que les noms des keysyms non imprimables :

xkbprint -color -lc fr $DISPLAY

Ce qui par exemple, sur mon système, après diverses modifications que vous apprendrez à effectuer dans les sections suivantes, donnerait ceci : Clavier de portable.ps (je n'ai malheureusement pas trouvé comment réduire la taille de police pour les keysyms, ce qui rendrait nettement plus lisible la rangée des touches de fonction). Si vous avez installé deux claviers en suivant les indications de la section #Passer d'une langue à une autre avec un clavier azerty français en Group1 et un clavier qwerty anglais en Group2 vous pouvez créer une image du clavier qwerty ainsi :

xkbprint -color -lg2 $DISPLAY qwerty.ps

(qwerty.ps sera le nom du fichier ainsi créé, vous pouvez, bien sûr, choisir le nom de fichier que vous voulez). Enfin, vous pouvez créer une image de clavier comportant les caractères obtenus en pressant Alt Graph et Alt Graph + Majuscules ainsi :

xkbprint -color -lc fr -ll 3  $DISPLAY  Alt_Graph.ps

l'option -ll n imprime les caractères à partir du « niveau » n.

Comment personnaliser l'image

Premiers pas

La commande xkbprint utilise les fichiers de configuration de xkb situés dans le répertoire geometry (dans la Mandriva 2007 ou 2008 : /usr/share/X11/xkb/geometry). Ces fichiers dépendent eux-mêmes des fichiers de configuration situés dans les autres sous-répertoires de /usr/share/X11/xkb, mais l'inverse n'est pas vrai... Le contenu des fichiers de geometry n'a donc aucune influence sur le fonctionnement réel du clavier, ces fichiers ne servent qu'à le dessiner. Je fais l'hypothèse que vous disposez d'une table de clavier personnalisée, initialement créée comme indiqué dans #Créer une copie personnelle de la keymap par défaut, table que vous avez peut-être modifiée au long de votre lecture des sections successives de notre documentation sur xkb... Une telle table « inclut » les fichiers du répertoire geometry. Dans ce qui suit, nous allons alors :

  1. créer, avec la commande xkbcomp, un fichier source (qui dans notre exemple sera : ~/.my_clavier/geometry_Keynux_Eppure) correspondant à la table de clavier actuellement active, laquelle dans notre exemple est un fichier texte ~/.my_clavier/mon_fr (nous prenons donc la configuration actuelle comme point de départ)
  2. ne conserver dans ce fichier source que la section geometry
  3. créer un include de ce fichier dans la table de clavier à la place de l'include initial de la section geometry (ce nouveau fichier sera donc activé, pour l'utilisateur concerné, à la place du fichier par défaut, qui reste cependant disponible sur le système est n'est ni effacé ni modifié par nos manipulations)
  4. modifier peu à peu le fichier en question pour personnaliser notre image graphique.

Hum... compliqué, voire inintelligible ?! Sans doute, pour l'instant, mais vous allez voir que, dans les sections suivantes, nous vous guiderons pas à pas pour faire tout cela.

Le déroulement des événements étape par étape
La table de clavier initiale

Si vous ne disposez pour l'instant d'aucune table de clavier vous pouvez la créer en suivant les indications données dans #Créer une copie personnelle de la keymap par défaut. Si vous disposez d'une table personnalisée, il se peut qu'elle ressemble à ceci :

// Table 16 bis
default xkb_keymap "mon_fr" {
     xkb_keycodes   { include "xfree86+aliases(azerty)" };
     xkb_types      { include "complete" };
     xkb_compat     { include "complete+ledscroll(group_lock)" };
     xkb_symbols    { include "pc+fr+us:2+group(shifts_toggle)"
                 key    <MENU>   {     symbols[Group1]=  [ Multi_key, Multi_key ],
                                       symbols[Group2]=  [ Multi_key, Multi_key ] };
                 key    <AB06>   {     symbols[Group1]=  [ n, N, emdash, endash ],
                                       symbols[Group2]=  [ n, N, emdash, endash ] };
                 key    <LWIN>   {     symbols[Group1]=  [       F13 ],
                                       symbols[Group2]=  [       F13 ] };
                    };
     xkb_geometry   { include "pc(pc105)" };
};

Dans nos exemples des pages précédentes la table de clavier personnalisée courante est un fichier mon_fr placé dans un répertoire ~/.my_clavier ; vous pouvez bien évidemment utiliser d'autres noms et d'autres répertoires. Ce qui nous importe ici est la dernière ligne de cette table :

xkb_geometry   { include "pc(pc105)" };

qui inclut dans les sources à compiler la section pc105 du fichier pc du répertoire geometry. C'est cette ligne que nous allons ensuite modifier, de telle façon qu'elle n'inclura plus le fichier par défaut du système, mais un fichier personnel de notre crû. Nous y viendrons tout à l'heure. Pour ce qui suit, nous devons nous assurer pour commencer que la table est bien activée, en lançant une commande :

xkbcomp -w 0 -R/usr/share/X11/xkb/ -I$HOME/.my_clavier/  $HOME/.my_clavier/mon_fr  $DISPLAY

(si vous avez suivi les indications données dans les sections précédentes - en particulier #Répartir le contenu de votre table personnalisée sur plusieurs fichiers - cette commande devrait être d'ores et déjà présente dans votre ~/.bash_profile et donc lancée automatiquement à chaque démarrage de X).

Le fichier source personnalisé pour l'image du clavier

Nous allons créer maintenant, conformément aux indications précédemment données dans #Créer un fichier source correspondant à votre table de clavier personnalisée un source correspondant à la table courante que nous venons d'activer. Nous lançons donc la commande suivante, après nous être placé dans le répertoire ~/.my_clavier où nous mettons toute notre configuration du clavier pour XKb :

xkbcomp -xkb $DISPLAY geometry_Keynux_Eppure

qui va créer le fichier source geometry_Keynux_Eppure (le lien qui précède renvoie en fait à ce qui sera l'état final de ce fichier, obtenu après toutes nos manipulations).

Ouvrons maintenant ce fichier source avec un éditeur de texte. Supprimons-y toutes les lignes qui précèdent la ligne :

xkb_geometry "pc(pc105)" {

puis modifions cette première ligne pour en faire quelque chose comme ceci (les deux barres obliques précèdent des commentaires, bien sûr vous y mettrez votre nom à la place du mien et le nom de votre machine à la place du nom de la mienne...) :

// section geometry personnalisée pour Keynux Eppure II
// Ptyxs - 25 janvier 2008

default xkb_geometry "Eppure"  {

et conservez tout ce qui suit. Voilà. Ce fichier n'aura désormais d'incidence que sur la création d'un fichier d'image graphique par la commande xkbprint. Vous pourrez donc le modifier en toute tranquillité d'esprit pour personnaliser l'image de votre clavier. Vos modifications n'auront aucun impact sur le fonctionnement réel du clavier.

La nouvelle table de clavier

Nous allons maintenant modifier la dernière ligne de notre table de clavier, celle qui incluait une section de fichier du répertoire geometry. Nous allons remplacer cette inclusion par une inclusion de notre fichier personnalisé, que dans cet exemple j'ai appelé (d'après le nom de mon portable) geometry_Keynux_Eppure, bien entendu vous choisirez le nom qui vous convient. La table deviendra alors ceci :

// Table 19
default xkb_keymap "mon_fr" {
     xkb_keycodes   { include "xfree86+aliases(azerty)" };
     xkb_types      { include "complete" };
     xkb_compat     { include "complete+ledscroll(group_lock)" };
     xkb_symbols    { include "pc+fr+us:2+group(shifts_toggle)"
                 key    <MENU>   {     symbols[Group1]=  [ Multi_key, Multi_key ],
                                       symbols[Group2]=  [ Multi_key, Multi_key ] };
                 key    <AB06>   {     symbols[Group1]=  [ n, N, emdash, endash ],
                                       symbols[Group2]=  [ n, N, emdash, endash ] };
                 key    <LWIN>   {     symbols[Group1]=  [       F13 ],
                                       symbols[Group2]=  [       F13 ] };
                    };
     xkb_geometry   { include "geometry_Keynux_Eppure" };
};

Réactivez-la en relançant la commande :

xkbcomp -w 0 -R/usr/share/X11/xkb/ -I$HOME/.my_clavier/  $HOME/.my_clavier/mon_fr  $DISPLAY

afin de vérifier qu'aucune erreur de syntaxe n'est détectée à la compilation (pour éviter d'avoir à retaper sans cesse au cours de la mise au point une commande aussi longue ou même d'avoir à la récupérer sans cesse dans l'historique du Bash, vous pouvez faire usage de la fonction xkb que nous avons créée à la section #Une fonction pour gérer plus facilement votre/vos table(s)). Et voilà... maintenant il ne vous reste plus qu'à modifier peu à peu votre geometry_Keynux_Eppure, ou quel que soit le nom que vous ayez donné à votre fichier, en suivant les indications données dans la section suivante...

Modifier le fichier personnel définissant la géométrie graphique du clavier
Introduction

Comment donc modifier le contenu du fichier personnalisé qui définit maintenant l'image graphique de votre clavier ? – il s'agit, dans nos exemples, d'un fichier ~/.my_clavier/geometry_Keynux_Eppure. Si vous étiez simplement anglophone, je vous conseillerais, sans plus, de lire les sections 4.6 et 5.A de An unreliable guide to XKb de Doug Palmer. Pour ceux d'entre vous qui ont du mal avec l'anglais, je donnerai quelques indications, qui devraient vous aider à :
- modifier la taille ou la position des touches ou des indicateurs lumineux
- supprimer une touche inutile, absente de votre clavier réel
- ajouter une touche manquante
- agir sur la couleur
- etc.

Rappelez-vous que, si vous souhaitez simplement modifier la nature des informations représentées pour chaque touche, vous pouvez faire usage des options de xkbprint, dont nous avons donné un aperçu à la section #Créer une image graphique de son clavier avec xkbprint, sans avoir à modifier le fichier qui nous intéresse ici. Notez dès maintenant que les dimensions des tracés seront toujours exprimées dans une même unité un peu mystérieuse, dont la longueur réelle à l'affichage varie bien sûr selon le zoom choisi, et qui, de toute évidence, ne peut jamais être le millimètre sur l'écran mais correspond plus ou moins à un millimètre « réel » sur le clavier matériel. Ainsi les lignes de début de notre fichier, au moins dans son état initial :

default xkb_geometry "Eppure"  {

    width=       470;
    height=      210;

signifient que la taille totale de l'image de clavier sera large de 470 unités et haute de 210 unités. Toutes les indications de dimensions présentes dans le fichier pourront être modifiées par vos soins, à votre convenance.

Organisation d'ensemble du fichier

Il est bon de repérer pour commencer la structure globale du fichier. Il contient :

  • après la ligne initiale default xkb_geometry "Eppure"' {, une série d'indications qui vaudront, par défaut, pour l'ensemble du clavier
  • puis des sections qui correspondent aux grands blocs de touche d'un clavier courant d'ordinateur fixe et qui sont les suivantes (les points de suspension représentent un contenu que j'omets ici) :
    • une section pour la rangée des touches de fonction : section "Function" { ... }
    • une section pour le bloc des touches alphanumériques et des quelques autres touches du même bloc (Tabulation, Majuscules etc.) : section "Alpha" { ... }
    • une section pour le bloc des touches de flèche, de page suivante/précédente etc. : section "Editing" { ... }
    • une section pour le pavé numérique : section "Keypad" { ... }
    • un ensemble de petites sections commençant chacune par solid ou indicator qui déterminent des aspects de l'affichage des indicateurs lumineux.

Cette organisation globale peut être modifiée par l'utilisateur. Par exemple, pour traiter l'image de mon ordinateur portable, qui ne comporte pas de pavé numérique, j'ai purement et simplement supprimé la section Keypad. Vous pourrez voir aussi que Doug Palmer, pour traiter son clavier personnel, a drastiquement modifié l'organisation en sections (cf. section 5 de An unreliable guide to XKb).

Agir sur les formes et les positionnements
Forme et dimensions des touches

Vers le début du fichier, vous pouvez voir toute une série de sections commençant par le mot shape qui en anglais signifie « forme ». Il s'agit de donc de types de formes qu'il sera ensuite possible d'attribuer à une touche ou à un indicateur lumineux particulier (ou, par défaut, à tout un ensemble de touches). Chaque forme a un nom qui permettra d'y faire référence dans la suite du fichier. Voici par exemple la description de la forme « normale » dont le nom est NORM.

shape "NORM" {
        corner= 1,
        { [  18,  18 ] },
        { [   2,   1 ], [  16,  16 ] }
    };

Que diable signifie tout cela ? L'indication corner= 1, fait référence au fait que la forme des touches en question n'est pas dessinée comme un pur carré ou rectangle, mais qu'elle possède un angle « brisé ». La valeur corner= 0, ferait de vos touches des carrés parfaits, tandis que corner= 4, augmenterait considérablement l'importance de la « brisure ».

Les indications qui suivent font référence aux dimensions du trait qui délimite les touches. Comme vous l'avez vu, il y a, en fait, pour chaque touche, deux traits délimiteurs. L'indication { [ 18, 18 ] }, fournit les dimensions du trait extérieur (un carré de 18 unités de côté, correspondant plus ou moins sur un clavier réel à un carré de 1,8 cm de côté). Les indications { [ 2, 1 ], [ 16, 16 ] } portent sur le trait intérieur. [ 2, 1 ], indique qu'il est situé à 2 unités à droite et 1 unité au-dessous du trait extérieur. Et [ 16, 16 ] indique qu'il s'agit d'un carré de 16 unités de côté. Bien entendu, pour chaque type de touches, vous pouvez modifier tout cela, en fonction de ce que vous observez sur votre clavier matériel. Pour rendre plus visibles les keysyms, j'ai ainsi pris le parti d'élargir le format de touche « normal », qui devient dans mon fichier :

shape "NORM" {
        corner= 1,
        { [  30,  29 ] },
        { [   2,   1 ], [  28,  27 ] }
    };

Et vous pouvez aussi créer de nouveaux types de touches, sur mon clavier de portable, par exemple, les touches de fonction sont plus étroites que la plupart des autres touches, ce qui m'a amené à définir un type supplémentaire que j'ai appelé FUNK :

shape "FUNK" {
	corner= 1,
	{ [  26,  29 ] },
	{ [   2,   1 ], [  24,  27 ] }
    };

et la touche <TLDE> (immédiatement à gauche du 1) est encore plus étroite ce qui m'a fait définir un type "TLDE" :

shape "TLDE" {
	corner= 1,
	{ [  20,  29 ] },
	{ [   2,   1 ], [  18,  27 ] }
    };

Vous préfèreriez peut-être vous passer du trait intérieur, vous trouvez que cela fait trop « chargé » ? Qu'à cela ne tienne... vous définirez alors la forme qui vous intéresse ainsi, en ne renseignant pas les dimensions du trait intérieur, qui ne sera alors pas tracé :

shape "NORM" {
        corner= 1,
        { [  18,  18 ] }
    };
Positionner les blocs et les rangées de touches

Chacun des blocs de touches dont il a été question plus haut (Function, Alpha, Editing, Keypad) contient des sous-sections qui correspondent aux rangées de touches successives. Ces sous-sections sont de la forme : row ... { ...} Entre la première rangée de ce type et le début de la section figurent des indications valables par défaut pour tout le bloc. Pour positionner tout un bloc de touches vous pouvez agir sur les valeurs assignées dans cette zone à top et à left. Par exemple si vous avez :

section "Function" {
        key.color= "grey20";
        priority=  7;
        top=       52;
        left=      19;
        width=     351;
        height=    19;
        row  {

cela implique que ce bloc des touches de fonction commence 52 unités plus bas que le haut du clavier et 19 unités à droite de la limite gauche du clavier. Et bien entendu vous pouvez modifier cela. Pour positionner maintenant une rangée à l'intérieur d'un bloc, c'est le même principe, si par exemple vous avez ceci :

row {
            top=  20;
            left= 1;
            keys {

cela signifie que la rangée en question commence 20 unités plus bas que le début du bloc dont elle fait partie (attention ! : les dimensions ne sont plus là définies par rapport à l'ensemble du clavier) et 1 unité à droite de la limite gauche du bloc. Et là encore vous pouvez modifier cela. Comme vous vous en doutez la ligne key.color= "grey20"; définit une couleur par défaut (une variété de gris) pour l'ensemble des touches du bloc des touches de fonction (pour une touche donnée, il sera possible de modifier cette couleur comme nous le verrons plus bas). La ligne priority= 7;, définit une priorité qui pourrait avoir une pertinence si des blocs se recouvraient partiellement : une touche colorée d'un bloc ayant une priorité plus élevée que 7 masquerait alors la partie recouverte du bloc Function.

Si, comme c'est le cas sur certains claviers, vous disposez d'un bloc de touches disposé obliquement, vous pouvez utiliser pour gérer cela, au début de la section consacrée à ce bloc, le mot angle. angle= 25 inclinerait tout le bloc de 25° par rapport à l'horizontale. D'autre part, au début d'une rangée de touches vertical= true afficherait la rangée verticalement.

Supprimer, ajouter, permuter ou modifier une touche individuelle

A l'intérieur d'une section consacrée à une rangée de touches (qui sera toujours de la forme row ... { ... } ) les touches individuelles successives, de gauche à droite, sont énumérées dans une sous-section keys, de la forme keys { ... }. Voici par exemple à quoi peut ressembler une représentation de touches d'une section keys (les points de suspension représentent du contenu que j'ai omis) :

row {
            top=  39;
            left= 1;
            keys {
                { <CAPS>, "CAPS",   1, color="grey20" },
                { <AC01>, "NORM",   1 }, { <AC02>, "NORM",   1 },
                ...

La touche Majuscule se trouve donc au début (au bord gauche) d'une rangée de touches. Elle est représentée entre des accolades qui comprennent : son nom symbolique de touche (cf. #Les noms symboliques des touches et les keysyms) : <CAPS>, la forme CAPS qui sera la sienne et qui a été définie en début de fichier dans une section shape (cf. #Forme et dimensions des touches), le nombre d'unités qui la sépareront de la touche précédente (ici 1) et enfin sa couleur grey20. La seule indication obligatoire est le nom symbolique de la touche, les autres indications prendront des valeurs par défaut si elles sont absentes. Supposons que j'aie l'idée saugrenue de supprimer l'image de cette touche majuscule de gauche : il me suffira de la supprimer dans le fichier (puis de relancer la commande xkbprint bien entendu), ce qui donnerait :

row {
            top=  39;
            left= 1;
            keys {
                { <AC01>, "NORM",   1 }, { <AC02>, "NORM",   1 },
                ...

Cela n'aura strictement aucune incidence sur le fonctionnement de votre clavier : seulement sur son image. Ici la suppression serait absurde puisque cette touche existe sûrement sur votre clavier matériel, mais vous pourrez avoir à effectuer une telle suppression si le système par défaut introduisait dans l'image une touche qui n'existe pas en réalité sur votre clavier (cela m'est arrivé, ce n'est pas une hypothèse gratuite...). Et vous voyez qu'il vous serait facile, de la même façon, de déplacer l'image d'une touche dans une autre position par un simple couper-coller ou d'insérer quelque part une nouvelle touche qui existe sur votre clavier mais n'est pas dessinée par le système.

Conclusion

Vous devriez avoir maintenant suffisamment d'éléments pour pouvoir bricoler vous-même votre propre clavier, aussi biscornu soit-il... Les sections sur les indicateurs lumineux, dont nous n'avons pas parlé, devraient se comprendre aisément. A vous de jouer... Rappelons que toutes les modifications proposées dans cette page n'affectent que la représentation graphique du clavier et non pas son fonctionnement réel. Comme dans toutes les pages précédentes seule la configuration d'un utilisateur est concernée ici : la configuration générale du système reste intacte. Pour revenir à la configuration générale par défaut de l'ensemble du système, ici comme dans les pages précédentes, rien n'est plus simple : il suffit d'ouvrir votre fichier de configuration ~/.bash_profile et d'y commenter (autrement dit de faire précéder d'un dièse #) la ligne de commande que nous y avions précédemmment introduite :

xkbcomp -w 0 -R/usr/share/X11/xkb/ -I$HOME/.my_clavier/  $HOME/.my_clavier/mon_fr  $DISPLAY

puis de relancer le serveur X par la combinaison de touche : <Ctrl-Alt-Retour Arrière>.

Autres sources de documentation sur XKb

Pour vous aider dans vos manipulations, vous pourrez consulter ces « listes expliquées » :
Les noms symboliques des touches sous XKb

Quelques keysyms représentant des caractères affichables

La documentation sur XKb n'est pas très abondante, le plus souvent en anglais et parfois assez désespérante pour le débutant qui a beaucoup de mal à y trouver une « prise » précise pour démarrer...

En ce qui me concerne, une prise initiale, à laquelle je dois beaucoup s'est trouvée être cet excellent article :
Configuration d'une table de clavier sous X11

A partir de là on pourra lire aussi ces autres documents en français :

Comment personnaliser le pavé numérique

La page de Mildred

La touche compose sous xkb et xmodmap

Et il faudra bien alors, hélas, passer à l'anglais et lire l'incontournable :

An unreliable guide to XKb de Doug Palmer.

A lire aussi : l'excellente documentation interne de XKb en particulier les deux fichiers
README.config
et
README.enhancing,
situés tous deux à la racine du répertoire xkb, deux fichiers très bien écrits et tout à fait lisibles, qui figuraient dans la Mandriva 2006 mais ont disparu de la 2007.

Signalons encore, toujours dans la langue de Shakespeare :

Création d'un clavier germano-polonais par Michael Kosmulski (très intéressant même si vous n'écrivez aucune de ces deux langues !)

X Keyboard Extension par Ivan Pascal.


Enfin, deux documents dus aux développeurs eux-mêmes, difficiles, orientés développeur et à déconseiller aux débutants :

The X Keyboard Extension : Library Specification - par Erik Fortune

The X Keyboard Extension : Protocol Specification - par Erik Fortune.

Les claviers multimédias

Les touches de fonction « spéciales » des claviers multimédias actuels posent souvent des problèmes à l'utilisateur. Et, même quand il n'y a pas de vrai problème, on peut avoir envie de changer leur comportement.

Pour cela, on peut procéder comme indiqué dans les sections précédentes et modifier une table de clavier XKb, on peut également utiliser un remarquable utilitaire graphique : keyTouch. Cela dit, dans tous les cas de figure, certains problèmes, avec certains claviers ne seront pas encore résolus.

Personnaliser sa table de clavier XKb

Si vous avez créé une table de clavier personnalisée, en suivant les indications données dans les sous-sections de #Réaffecter les touches avec XKb, vous pouvez, pour les touches multimédias, rechercher des keysyms appropriés dans le fichier /usr/X11R6/include/X11/keysymdef.h, puis associer si nécesaire ces keysyms à des actions de votre choix «comme d'habitude », par exemple, sous KDE en allant dans l'entrée de Menu : Menu K->Applications->Outils->Outils Système->Centre de Configuration de KDE->Régionalisation et accessibilité->Raccourcis clavier->Raccourcis de commandes.

Voici par exemple une petite ébauche fragmentaire d'une table imaginable, bien sûr très incomplète :

// Table Genius

default xkb_keymap "mon_fr" {
     xkb_keycodes   { include "xfree86+aliases(azerty)"
                    <PLAY> = 162;
                    <LOWS>  = 174;
                    <HIGS>  = 176;
                    <MEDI> = 129;
                    };
     xkb_types      { include "complete" };
     xkb_compat     { include "complete+ledscroll(group_lock)" };
     xkb_symbols    { include "pc+fr+us:2+group(shifts_toggle)"
                 key    <MENU>   {     symbols[Group1]=  [ Multi_key, Multi_key ],
                                       symbols[Group2]=  [ Multi_key, Multi_key ] };
                 key    <AB06>   {     symbols[Group1]=  [ n, N, emdash, endash ],
                                       symbols[Group2]=  [ n, N, emdash, endash ] };
                 key    <LWIN>   {     symbols[Group1]=  [       F13 ],
                                       symbols[Group2]=  [       F13 ] };
                 key    <PLAY>    {    symbols[Group1]=  [   XF86AudioPlay ] };
                 key    <LOWS>     {    symbols[Group1]=  [   XF86AudioLowerVolume ] };
                 key    <HIGS>     {    symbols[Group1]=  [   XF86AudioRaiseVolume ] };
                 key    <MEDI>     {    symbols[Group1]=  [   XF86AudioMedia ] };
                    };
     xkb_geometry   { include "pc(pc105)" };
};

L'utilitaire keyTouch

Marvin Raaijmakers a mis au point un remarquable utilitaire, qui permet d'associer aisément des touches multimédias à des fonctions. Voir keyTouch.

Problèmes résiduels

Certaines touches multimédias de certains claviers sont purement et simplement inaccessibles et ne pourront recevoir de fonction ni par une table XKb personnalisée, ni par l'utilitaire keyTouch. Pour plus de détails, voir les deux sections suivantes.

Les claviers USB

Dans l'état actuel des choses, certaines touches de claviers USB sont inaccessibles. Voir là-dessus ce qu'en dit Marvin Raaijmakers : USB Keyboards que je traduis ainsi :

Si votre clavier est connecté en USB vous aurez sans doute remarqué que certaines touches de fonction supplémentaires ne fonctionnent pas. Notez que la plupart des fichiers de claviers de keyTouch sont destinés à des claviers connectés en PS/2 et que les noms de fichiers pour des claviers connectés en USB contiennent "(USB)". Mais même si vous utilisez le bon fichier de clavier, certaines touches peuvent ne pas fonctionner malgré tout. Ceci est dû au fait que l'actuel pilote pour les entrées en USB du noyau Linux ne nous permet pas de faire fonctionner ces touches. A l'heure actuelle, je suis en train de modifier ce pilote afin que nous puissions faire fonctionner toutes ces touches. Cette modification sera appliquée au noyau Linux.

Ainsi donc pour l'instant je vous recommande de connecter votre clavier en PS/2 et d'attendre une nouvelle version du pilote pour les entrées en USB. J'écrirai aussi une nouvelle version de keyTouch qui fonctionnera parfaitement avec le nouveau pilote.

Autres problèmes

Sur divers autres problèmes relatifs aux touches inaccessibles des claviers multimédias, et en général sur les problèmes concernant ces claviers, voyez les remarquables pages suivantes (en anglais), dues à des orfèvres de la programmation du clavier :

HAL Quirk Site

Mapping keys : unfucking one keyboard at a time (ici, si vous un problème avec un clavier, vous pouvez aider en le signalant)

Sur des problèmes de touches de fonction pour un portable Asus, gérées par acpi, voir ce fil du forum Mandriva : http://forum.mandriva.com/viewtopic.php?t=67423&start=0&postdays=0&postorder=asc&highlight=