Outils pour utilisateurs

Outils du site


wiki:modifier_clavier

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èrekeysymactionkeysym
00entréeReturn
11échappementEscape
effacerBackSpace
aa gaucheLeft
bb droiteRight
basDown
AAhautUp
BAdébutHome
finEnd
àagraveinsérerInsert
ÀAgravesupprimerDelete
&ampersandprécédentPrior
@arobasesuivantNext
etc…etc…
Les keysyms du pavé numérique (Key Pad en anglais) sont toutes préfixées avec KP ( 1⇒ KP_1, 2⇒KP_2… Delete⇒KP_Delete…)

Il y a aussi les touches modificatrices et les touches de fonctions:

touches modificatriceskeysymtouches de fonctionkeysym
controle gaucheControl_LF1F1
controle droitControl_RF2F2
alternative gaucheAlt_LF3F3
alternative droitAlt_RF4F4
majuscule gaucheShift_LF5F5
majuscule droitShift_RF6F6
verr. majusculeCaps_LockF7F7
verr. numériqueNum_LockF8F8
meta(windows) gaucheMeta_LF9F9
meta(windows) droiteMeta_Retc…

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édiakeysymtouches de controlekeysym
mailXF86MailextinctionXF86PowerOff
navigateurXF86ExplorerveilleXF86Suspend
son 0XF86AudioMuteluminosité -XF86KbdBrightnessDown
son -XF86AudioLowerVolumeluminosité +XF86KbdBrightnessUp
son +XF86AudioRaiseVolumebluetooth XF86Bluetooth
playXF86AudioPlaywebcamXF86WebCam
pauseXF86AudioPauseillumation clavierXF86KbdLightOnOff
ejectXF86EjectbatterieXF86Battery
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 =" 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 :

keycodekeysymkeysymkeysymkeysymkeysymkeysymkeysymkeysym
touche seuleshift + touchemode_switch + touchemode_switch + shift + toucheAltGr + toucheAltGr + shift + toucheAltGr + mode_switch + toucheAltGr + mode_switch + shift + touche
24aAaAaeAEaeAEaAaeAE

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:

keycodekeysymkeysymkeysymkeysymkeysymkeysymkeysymkeysym
touche seuleshift + touchemode_switch + touchemode_switch + shift + toucheAltGr + toucheAltGr + shift + toucheAltGr + mode_switch + toucheAltGr + mode_switch + shift + touche
24aAaAatildeAtildeatildeAtilde

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 :

  1. trouver par xev ou xkeycaps le keycode de la lettre “T”: 28
  2. récupérer avec xmodmap -pke les keysyms actuels: keycode 28 = t T t T tslash Tslash tslash Tslash
  3. 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

31 visiteurs.

wiki/modifier_clavier.txt · Dernière modification: 2021/05/21 19:01 de fernando