Outils pour utilisateurs

Outils du site


wiki:tutoriels:clavier_modifier

Ceci est une ancienne révision du document !


Modifier certaines touches de son clavier sous Linux

Lien vers Le clavier français

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

Keycode — Sur le clavier chaque touche est identifiée par son emplacement physique. Les keycodes sont numériques : 10, 11, 12… jusqu'à 255. Ils ne changent jamais.

NB : Les lettres majuscules et les chiffres ont des keycodes identiques à ceux du code ASCII.

Keysym — 8 actions peuvent être affectées à chaque touche (keycode), en fonction de la combinaison avec d'autres touches frappées en même temps (touches modificatrices). Les keysyms sont les codes de résultats de ces combinaisons.

Les résultats sont soit des caractères imprimables soit des actions, on trouve donc :

Caractère Keysym Action Keysym
00entréeReturn
11échappementEscape
effacerBackSpace
aa gaucheLeft
bb droiteRight
basDown
AAhautUp
BAdébutHome
finEnd
àa graveinsérerInsert
ÀA gravesupprimerDelete
&ampersandprécédentPrior
@arobasesuivantNext
etc.etc.
Les keysyms du pavé numérique (Key Pad) sont toutes préfixées avec KP (1⇒KP_1 — 2⇒KP_2 … Delete⇒KP_Delete)

Touches modificatrices et Touches de fonctions

Touches modificatrices Keysym Touches de fonction Keysym
Contrôle gaucheControl_LF1F1
Contrôle 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.

On trouve sur certains claviers des touches multimédia et des touches de contrôle des périphériques (micro, haut-parleur…) en nombre très variable…

Touches multimédia Keysym Touches de contrôle Keysym
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) de chacune des touches à une liste d'actions (8 maximum). C'est l'association d'un keycode à des 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. À la déconnexion de la session utilisateur graphique (ce qui est différent de l'arrêt du système), 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 de nombreux modèles de claviers et une longue liste de langues. Aussi identifier la touche à modifier n'est pas évident.

Méthode xev

xev (Xorg Events) est un utilitaire appartenant au serveur graphique Xorg, il sert à contrôler le clavier.
Il est dans les dépôts de toutes les distributions et normalement installé de base (??).
xev se lance depuis un terminal (console), il affiche des informations sur les actions de l'utilisateur.
Au lancement, xev affiche des informations sur l'écran, les fenêtres et la souris. Ensuite, xev se met en attente d'événement (clavier, souris, trackpad…).

Presser/relâcher une touche va déclencher un événement “KeyPress” et un événement “KeyRelease”.

Exemple d'exécution de xev : dans l'encadré en blanc l'événement “KeyPress”, la flèche rouge situe son keycode 24, plus à droite, son keysym associé est “a”. La touche “A” a été appuyée en 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 :

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

5094 visiteurs.

wiki/tutoriels/clavier_modifier.1757781545.txt.gz · Dernière modification : de palas

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki