Table des matières
Modifier certaines touches de son clavier sous Linux
Certains claviers peuvent être mal reconnus ou vous pouvez vouloir modifier la fonction de certaines touches (ajouter des caractères que vous utilisez souvent et qui ne figurent pas sur votre clavier ou encore changer le “.” du clavier numérique en “,” pour se conformer à la notation décimale française)
Quelques explications préliminaires sur fonctionnement des claviers
Sur un clavier les touches sont identifiées par des keycodes et à chaque touche peuvent être affectées jusqu'à 8 actions appelées keysyms en fonction de combinaison d'autres touches frappées en même temps qui sont appelées touches modificatrices.
Les keycodes sont numériques: 10,11,12…jusqu'à 255 (bien qu'il n'y ait aucun clavier avec 255 touches!)
Les keysyms sont des codes anglais pour les résultats produits par les touches.
Les résultats sont soit des caractères imprimables soit des actions, on trouve donc:
caractère | keysym | action | keysym | |
---|---|---|---|---|
0 | 0 | entrée | Return | |
1 | 1 | échappement | Escape | |
… | … | effacer | BackSpace | |
a | a | gauche | Left | |
b | b | droite | Right | |
… | … | bas | Down | |
A | A | haut | Up | |
B | A | début | Home | |
… | … | fin | End | |
à | agrave | insérer | Insert | |
À | Agrave | supprimer | Delete | |
& | ampersand | précédent | Prior | |
@ | arobase | suivant | Next | |
etc… | etc… |
Il y a aussi les touches modificatrices et les touches de fonctions:
touches modificatrices | keysym | touches de fonction | keysym | |
---|---|---|---|---|
controle gauche | Control_L | F1 | F1 | |
controle droit | Control_R | F2 | F2 | |
alternative gauche | Alt_L | F3 | F3 | |
alternative droit | Alt_R | F4 | F4 | |
majuscule gauche | Shift_L | F5 | F5 | |
majuscule droit | Shift_R | F6 | F6 | |
verr. majuscule | Caps_Lock | F7 | F7 | |
verr. numérique | Num_Lock | F8 | F8 | |
meta(windows) gauche | Meta_L | F9 | F9 | |
meta(windows) droite | Meta_R | etc… |
Et pour finir, on trouve sur certains claviers des touches multimédia et des touches de contrôle du matériel en nombre très variable…
touches multimédia | keysym | touches de controle | keysym | |
---|---|---|---|---|
XF86Mail | extinction | XF86PowerOff | ||
navigateur | XF86Explorer | veille | XF86Suspend | |
son 0 | XF86AudioMute | luminosité - | XF86KbdBrightnessDown | |
son - | XF86AudioLowerVolume | luminosité + | XF86KbdBrightnessUp | |
son + | XF86AudioRaiseVolume | bluetooth | XF86Bluetooth | |
play | XF86AudioPlay | webcam | XF86WebCam | |
pause | XF86AudioPause | illumation clavier | XF86KbdLightOnOff | |
eject | XF86Eject | batterie | XF86Battery | |
etc… | etc… |
La configuration d'un clavier est l'association (mapping en anglais) de chacune des touches à une liste d'actions (8 maximum).
En d'autres termes c'est l'association de chaque keycode à une liste de keysyms.
Modifier son clavier, c'est modifier l'association keycode⇔keysyms
La gestion des touches du clavier et des systèmes de pointage (souris, trackpad, joystick) est assurée par le serveur graphique Xorg.
A la déconnexion de la session graphique (ce qui est différent de l'arrêt du PC!), Xorg est arrêté et les modifications faites sont perdues!
On verra qu'il y a heureusement moyen de les rendre permanentes.
Identifier la touche à modifier
Il y a pléthore de modèles de claviers et une sacré liste de langues ! Aussi identifier la touche à modifier n'est pas si facile qu'il y paraît…
Méthode xev
On a vu que le contrôle des claviers est géré par Xorg aussi ce n'est pas étonnant d'utiliser un utilitaire appartenant au serveur graphique (xev = Xorg Events). Il est dans les dépôts de toutes les distribution et normalement installé de base (??).
xev est un programme qui se lance depuis un terminal (console) et qui affiche des informations sur les actions de l'utilisateur.
Au lancement xev affiche des informations sur l'écran, les fenêtres et la souris qu'on va simplement ignorer. Dès que l'affichage de ces informations est fait, xev se met en attente d'événement (clavier, souris, trackpad…).
Presser/relacher une touche va déclencher un événement “KeyPress” et un événement “KeyRelease”.
Ci-dessous un exemple d'exécution de xev: on voit encadré en blanc l'événement “KeyPress” et on voit sur la ligne repérée par la flèche rouge qu'il provient du keycode 24 (on voit aussi au passage que le keysym associé est “a”, on a donc appuyé sur la touche “A” en mode minuscule)
Terminer xev en fermant la petite fenêtre blanche qui est apparue.
On peut procéder ainsi pour n'importe quelle touche.
Méthode xkeycaps
xkeycaps est une application graphique qui affiche le clavier et affiche le keycode et les keysyms associés aux touches.
Elle n'est pas forcément disponible pour toutes les distributions (contrairement à xev).
Il faut commencer par sélectionner le modèle de clavier qui se rapproche le plus du sien (très peu de modèles sont listés). La vue miniature en bas de la fenêtre permet se faire une idée.
Les portables ne sont pas pris en compte.
PC est l'appellation générique.
Cliquer sur OK et une vue du clavier apparait.
Si on presse ensuite une touche, elle s'allume en jaune et ses informations sont affichées sur les lignes Keycode, Keysym et ASCII.
Dans cet exemple, la touche “A” a été pressée.
Le keycode à prendre en compte est la valeur décimale, ici 24
On voit aussi la liste des keysyms associés (on en reparlera).
Il est également possible de cliquer avec la souris sur la touche pour laquelle on veut les informations car certaines touches peuvent ne pas s'allumer quand on les presse pour des raisons de conflits avec le window manager.
Si ça ne va pas, le bouton “select keyboard” permet de revenir au choix du clavier.
Si rien ne va, revenez à la méthode xev qui bien que moins jolie est plus fiable…
Voir les keysyms associés à une touche
À chaque “keycode” sont associés au maximum 8 keysyms représentant les cas suivants :
touche seule; shift + touche mode_switch + touche mode_switch + shift + touche AltGr + touche AltGr + shift + touche AltGr + mode_switch + touche AltGr + mode_switch + shift + touche
Note : mode_switch est un symbole qui selon la map et le clavier que vous utilisez est associé ou pas à une touche. (a développer ….)
Pour voir la liste des keysyms il y a 2 solutions:
- xkeycaps qu'on a vu au dessus (si votre distribution la possède dans ses dépôts)
- xmodmap un autre utilitaire de Xorg qui est dans tous les dépôts et installé de base (??)
xmodmap se lance dans une console, il peut montrer la liste des associations actuelles grâce à son option -pke .
Attention, toutes les associations keycodes⇔keysyms sont produites d'un bloc !
On peut envoyer cette liste dans un fichier (pour l'examiner via un éditeur de texte) en tapant:
xmodmap -pke > monfichier
On peut aussi récupérer uniquement la ligne d'un keycode particulier (par exemple celle du keycode 24) en filtrant avec | grep:
xmodmap -pke | grep “ 24 =”
ce qui donne dans mon cas :
Attention: c'est bien “ 24 =”
et pas “24 =
” (notez le blanc!) dans le paramètre de grep sinon on récupère aussi les lignes des keycodes 124 et 224.
Ce résultat obtenu par xmodmap (ou par xkeycaps, ligne Keysym) se lit :
keycode | keysym | keysym | keysym | keysym | keysym | keysym | keysym | keysym | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
touche seule | shift + touche | mode_switch + touche | mode_switch + shift + touche | AltGr + touche | AltGr + shift + touche | AltGr + mode_switch + touche | AltGr + mode_switch + shift + touche | |||||
24 | a | A | a | A | ae | AE | ae | AE | a | A | ae | AE |
Note: il y a 4 keysyms excédentaires qui ne devraient pas être là !!!
Modifier les keysyms associés à une touche
Supposons maintenant que je ne soit pas intéressé par avoir æ sur AltGr+a ni Æ sur Maj+AltGr+a, mais que je préfère respectivement ã et Ã.
Il faut déjà connaître les keysyms correspondants aux caractères désirés ! On peut trouver la liste de tous les Keysyms possibles ici : https://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap
Les 2 keysyms qui m'intéressent sont donc atilde et Atilde.
On va maintenant utiliser xmodmap pour modifier la liste des keysyms de la touche 24. On veut obtenir:
keycode | keysym | keysym | keysym | keysym | keysym | keysym | keysym | keysym | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
touche seule | shift + touche | mode_switch + touche | mode_switch + shift + touche | AltGr + touche | AltGr + shift + touche | AltGr + mode_switch + touche | AltGr + mode_switch + shift + touche | |||||
24 | a | A | a | A | atilde | Atilde | atilde | Atilde |
Il faut utiliser xmodmap avec la syntaxe xmodmap -e “expression”
, où l'expression est tout simplement keycode xx = liste de keysyms
Dans l'exemple il faut donc taper:
xmodmap -e “keycode 24 = a A a A atilde Atilde atilde Atilde”
On peut ensuite vérifier que c'est bien pris en compte en refaisant à nouveau : xmodmap -pke | grep “ 24=”
Si un des keysyms de la liste n'est pas valide (ci-dessous par exemple j'ai volontairement tapé “atild” au lieu de “atilde”), la commande va échouer:
Il est possible d'affecter à un keycode des caractères qui ne sont pas listés dans l'URL donnée plus haut en utilisant les codes Unicode.
https://fr.wikipedia.org/wiki/Unicode#Partitionnement
https://fr.wikipedia.org/wiki/Table_des_caract%C3%A8res_Unicode_%280000-0FFF%29
Par exemple pour affecter le symbole ☎ dont le code unicode est U260E à la lettre “T” en mode AltGr et Maj+AltGr :
- trouver par xev ou xkeycaps le keycode de la lettre “T”: 28
- récupérer avec xmodmap -pke les keysyms actuels: keycode 28 = t T t T tslash Tslash tslash Tslash
- modifier avec
xmodmap -e “keycode 28 = t T t T U260E U260E U260E U260E”
Le pavé numérique
Les touches du pavé numérique ont généralement moins de fonctions et donc moins de keysyms.
Le keycode de la touche “Suppr” est 91, si on regarde ses keysyms on trouve sur mon clavier:
keycode 91 = KP_Delete KP_Decimal KP_Delete KP_Decimal
KP_Decimal est le séparateur décimal américain “.”. Certain logiciels (comme LibreOffice Calc) ont des options de configuration pour utiliser automatiquement le séparateur décimal français “,” quand la touche “Suppr” est utilisée en mode verrouillage numérique. Malheureusement il arrive que ça fonctionne pas (version de LibreOffice ?)
On peut essayer de régler ce problème avec xmodmap. Cette touche n'est vraiment utilisée qu'en 2 modes: seule ou avec verrouillage numérique (qui correspond à Majuscule pour le reste du clavier), la commande qui semble logique est donc:
xmodmap -e “keycode 91 = KP_Delete comma KP_Delete comma”
Sur mon clavier ça marche, mais apparemment pas sur tous…
Si vous êtes dans le cas où ça ne marche pas on va essayer une commande encore plus minimaliste. On supprime carrément la fonction “KP_Delete” en mode “touche” seule (on remplace par le keysym spécial NoSymbol), on positionne la virgule en mode verrouillage numérique, et c'est tout…:
xmodmap -e “keycode 91 = NoSymbol comma”
Rendre les modifications permanentes
Toutes les modifications apportées par xmodmap ne sont valides que tant que le serveur Xorg est en fonctionnement. Si on quitte la session graphique soit temporairement (pour laisser un autre utilisateur se connecter) soit définitivement quand on arrête l'ordinateur, le clavier reprendra son comportement par défaut à la prochaine session.
Pour rendre les modifications permanentes, il faut que la ou les commandes xmodmap -e “expression” soient exécutées automatiquement au démarrage de la session. Une des possibilités est d'inclure ces commandes dans le fichier d'initialisation du shell. Cette solution a l'avantage par rapport à d'autres que l'on trouve sur internet d'être indépendante du type de bureau graphique utilisé (Plasma, Gnome, Xfce, Mate etc…).
Le shell par défaut de Linux est le bash et son fichier d'initialisation se trouve dans le home de l'utilisateur, c'est un fichier caché qui commence donc par un “.”, il s'agit du fichier .bashrc.
Si vous avez modifié votre shell par défaut c'est que vous êtes déjà d'un niveau avancé et vous saurez quel fichier modifier…
Utilisez l'éditeur de texte par défaut de votre environnement pour rajouter en début de fichier vos modifications:
Si vous avez beaucoup de modifications, il y a une autre façon de faire:
Mettez toutes les expressions, par exemple:
keycode 24 = a A a A atilde Atilde atilde Atilde
keycode 28 = t T t T U260E U260E U260E U260E
keycode 91 = KP_Delete comma KP_Delete comma
dans un fichier que vous appelez par exemple xmodmap.perso, que vous créez dans votre home.
Il suffit ensuite dans le fichier .bashrc d'insérer une seule ligne xmodmap en donnant le chemin et le nom du fichier contenant les expressions, ce qui donne :
Si le fichier xmodmap.perso contient des erreurs, des messages seront affichés indiquant à quelles lignes se trouvent les erreurs. Par exemple :
xmodmap: commandline:1: bad keysym name 'NoSymbole' in keysym list
179 visiteurs.