====== 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 [[http://doc.ubuntu-fr.org/clavier_multimedia|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 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 ;) !