Table des matières
Configuration avancée du clavier :: introduction
Bienvenue dans la magie de Xorg ! Vous trouverez ici un mode opératoire simple et élégant pour modifier le mappage de votre clavier et l'affectation des boutons de votre souris.
À l'origine, il s'agissait pour l'auteur de retrouver l'usage des touches Fn de son clavier de portable -c'est donc ce cheminement que nous allons suivre, mais il peut tout à fait servir pour configurer très finement son clavier et affecter à des touches, combinaisons de touches ou boutons tout un tas d'actions gérées par Xorg, voire même configurer un mappage par utilisateur du système !
Ce tutoriel est librement inspiré de celui-ci (ubuntu-fr) mais il est de loin bien plus simple et surtout en contourne un défaut potentiel relatif à la configuration de base du clavier.
Conditions liminaires
- Avoir un serveur X à peu près fonctionnel ;
- savoir se servir un peu de la ligne de commande ;
- ouvrir trois terminaux virtuels sous X.
Légende
- ligne de code commençant par $ = action à effectuer en tant qu'utilisateur
- ligne de code commençant par # = action à effectuer en tant que root
Déroulé
La méthode que nous allons suivre est la suivante :
- récupération des actions à affecter (augmenter le volume sonore par exemple) ;
- récupération du keycode des combinaisons de touches ou de boutons qui nous intéressent ;
- création d'un fichier de configuration personnalisé ;
- test ;
- mise en place permanente des modifications.
Identification des actions gérées par X
Dans le premier terminal, entrez la commande :
$ cat /usr/share/X11/XKeysymDB | grep XF86
On obtient une sortie de ce genre :
! The definitions here should match <X11/XF86keysym.h> XF86ModeLock :1008FF01 XF86MonBrightnessUp :1008FF02 XF86MonBrightnessDown :1008FF03 XF86KbdLightOnOff :1008FF04 XF86KbdBrightnessUp :1008FF05 XF86KbdBrightnessDown :1008FF06 XF86Standby :1008FF10 XF86AudioLowerVolume :1008FF11 XF86AudioMute :1008FF12 XF86AudioRaiseVolume :1008FF13 XF86AudioPlay :1008FF14 XF86AudioStop :1008FF15 XF86AudioPrev :1008FF16 XF86AudioNext :1008FF17 XF86HomePage :1008FF18 XF86Mail :1008FF19 XF86Start :1008FF1A XF86Search :1008FF1B XF86AudioRecord :1008FF1C XF86Calculator :1008FF1D [...]
Il faut ici choisir les actions qui nous intéressent. En l'occurrence et pour l'exemple : XF86AudioLowerVolume
,
XF86AudioMute
, et XF86AudioRaiseVolume
.
Identification des combinaisons de touches
L'utilitaire xev
xev
est un des utilitaires de xorg. Il permet d'afficher certaines informations relatives aux évènements d'entrée de X, notamment ceux créés par nous à l'aide du clavier ou la souris.
Quand on le lance dans un terminal sous X, une petite fenêtre s'ouvre : elle doit être active pour surveiller ce qui se passe et afficher dans le terminal le résultat des actions du clavier ou de la souris. Pour quitter xev
, fermez cette petite fenêtre.
Récupération des keycode
Dans le second terminal, lancez xev
:
$ xev
Voici ce qui s'affiche quand on presse puis relâche la touche “flèche bas” :
KeyPress event, serial 31, synthetic NO, window 0x1e00001, root 0x87, subw 0x0, time 12858900, (610,-381), root:(612,67), state 0x0, keycode 104 (keysym 0xff54, Down), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 34, synthetic NO, window 0x1e00001, root 0x87, subw 0x0, time 12858994, (610,-381), root:(612,67), state 0x0, keycode 104 (keysym 0xff54, Down), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
Ce qui nous intéresse, c'est cette partie : keycode 104 (keysym 0xff54, Down)
. Cela nous dit que la touche en question a le keycode n° 104 et que ce code est associé à une action particulière “Down”.
Quand une touche ou une combinaison n'a pas d'action attribuée, on a la sortie suivante :
KeyRelease event, serial 35, synthetic NO, window 0x1e00001, root 0x87, subw 0x0, time 13186503, (708,-91), root:(710,357), state 0x0, keycode 223 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
On voit clairement le (keysym 0x0, NoSymbol)
qui signifie que cet évènement de keycode 223 n'entraîne aucune action. C'est le cas pour certaines de mes combinaison Fn+[touches_bleues] et c'est ce que nous allons changer.
Repérez les combinaisons de touches qui vous intéressent et vérifiez bien qu'aucune action ne leur est attribuée. Si par hasard il y en a déjà une, passez directement à la seconde étape du § Test.
Création du fichier de configuration
Dans le troisième terminal (ou à l'aide de votre éditeur de texte favori), créez le fichier /home/votre_nom/.xmodmap.conf
et remplissez-le comme suit :
# Hacking de clavier par Toto "la rotule de la M0r7" keycode 160 = XF86AudioMute keycode 174 = XF86AudioLowerVolume keycode 176 = XF86AudioRaiseVolume
Comme vous l'aurez compris, les numéros de keycode sont trouvés grâce à xev
(second terminal), et le nom des actions XF86 proviennent du premier terminal.
Test
Dans le troisième terminal :
$ xmodmap /home/toto/.xmodmap.conf
De deux choses l'une : le test est positif, ou pas ! S'il ne l'est pas, rien n'est perdu : dans la configuration de votre environnement graphique, trouvez l'application qui gère le volume sonore, et affectez aux actions augmenter, diminuer, tuer le volume les raccourcis que vous venez de configurer. Re-testez, normalement ça devrait fonctionner.
Rendre les modifications permanentes
Si vous souhaitez rendre ces modifications disponibles pour tous vos utilisateurs, effectuez la manipulation suivante :
# mv /home/toto/.xmodmap.conf /etc/xmodmap.conf
Pour finir, configurez votre environnement graphique pour qu'il exécute à chaque démarrage la commande :
xmodmap /etc/xmodmap.conf
(cas de la configuration générale) ;
- ou
xmodmap /home/toto/.xmodmap.conf
(cas de la configuration particulière à l'utilisateur toto).
Pour KDE
Dans /home/toto/.kde/Autostart
créez un fichier de nom quelconque (par exemple xmodmap
) et gavez-le :
#!/bin/sh xmodmap /etc/xmodmap.conf
Rendez-le exécutable (clic droit, “droits d'accès”, puis cochez “est exécutable”) :
chmod +x /home/toto/.kde/Autostart/xmodmap
Et voilà !
Quelques explications
La commande xmodmap
permet de modifier finement le comportement du clavier ou de la souris, mais aussi d'afficher la configuration en cours :
xmodmap -pke
Regardez de près le résultat de cette commande, vous verrez que la signification de chaque touche (quand il y en a une) est précisée. Les plus aguerris auront remarqué que cette sortie est sensible à la configuration du clavier (notamment son mappage) et qu'elle fait la synthèse entre ce qui est défini dans la partie Keyboard
du /etc/X11/xorg.conf
et dans notre /etc/xmodmap.conf
.
Ce qui est défini dans notre xmodmap.conf
et exécuté avec xmodmap
a priorité sur la configuration du clavier de xorg.conf
.
Une petite application : un mappage par utilisateur
Nous allons simplement utiliser la propriété précédente pour configurer le mappage du clavier par utilisateur (cas de madame qui ne supporte pas le mappage dvorak sur l'ordi familial) !
On suppose notre xmodmap.conf configuré a minima et aux petits oignons, nous sommes connectés sous la session de l'utilisateur toto, la configuration du clavier dans xorg.conf
(ou dans Yast) est fixée à celle que bon vous semble. Faites :
$ xmodmap -pke > /home/toto/.xmodmap.conf $ xmodmap /home/toto/.xmodmap.conf
Ensuite, modifiez en root) le xorg.conf
avec une autre configuration du clavier pour l'utilisateur mme_toto, déconnectez-vous, redémarrez X et logguez-vous sous la session de mme_toto. Recommencez l'opération précédente avec pour sortie le fichier /home/mme_toto/.xmodmap.conf
.
Assurez-vous que chaque session utilisateur exécute bien au lancement la commande xmodmap /home/xxxx/.xmodmap.conf
. C'est fini.
D'autres pistes
On peut donc même se permettre le luxe de distraire seulement une ou deux touches de leur signification initiale rien qu'en modifiant notre xmodmap.conf
. Ce peut être le cas pour avoir à portée de main des symboles compliqués ou mieux, mélanger certaines attributions des variantes de clavier français oss
et latin9
, par exemple.
Bref, les explications simples s'arrêtent là, les plus aventureux se débrouilleront bien tout seuls ;) !