Personnaliser le clavier
Un article de Wiki de la communauté Mandriva.
CETTE PAGE EST UNE VERSION RÉVISÉE ET MISE À JOUR D'UN ENSEMBLE DE NEUF PAGES MAINTENANT OBSOLÈTES DE L'ANCIENNE BASE DE CONNAISSANCES COMMENÇANT À L'ADRESSE :
http://club.mandriva.com/xwiki/bin/view/KB/XwinXkeys (--ptyxs 30 janvier 2008 à 18:50 (CET))
[modifier] 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.
[modifier] 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.
[modifier] 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
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.
[modifier] Redéfinir des touches déjà fonctionnelles
[modifier] 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.
[modifier] Comment découvrir le code numérique et le type d'événement associés à une touche ?
[modifier] 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).
[modifier] 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 ?
[modifier] 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.
[modifier] 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).
[modifier] 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
où fichier sera à remplacer par le chemin du fichier à activer.
[modifier] 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.
[modifier] 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.
[modifier] 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
[modifier] 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.
[modifier] Un exemple : réaffecter les touches Windows
[modifier] 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.
[modifier] 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.
[modifier] 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] Modifier le script lancé par startkde
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...
[modifier] 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.
[modifier] Permuter une touche Windows avec une autre touche
Voir ces sections :
- Permutation de la touche Echappement avec la touche Windows de gauche
- Permuter les touches de Verrouillage des majuscules avec la touche Windows gauche.
[modifier] 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.
[modifier] Autres exemples d'utilisation de xmodmap
Un exemple de script modifiant le clavier en cours de session (jeu Freespace)
[modifier] 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.
[modifier] Réaffecter les touches avec XKb
[modifier] Premiers pas
[modifier] 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 :
- #Réaffecter les touches avec xmodmap
- #Un exemple : réaffecter les touches Windows
- La touche compose#Installer une touche compose
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.
[modifier] Préliminaires
[modifier] 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 !
[modifier] 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...
[modifier] 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...
[modifier] 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 :
- certaines lignes du fichier /etc/X11/xorg.conf, dont il a été question dans la section #Les fichiers de configuration du clavier et le système XKb
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.
[modifier] 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.
[modifier] 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.
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 :
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...
[modifier] A l'attaque...
[modifier] 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).
[modifier] 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)
[modifier] 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 :
};
[modifier] 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.
[modifier] 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...
[modifier] 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