Outils pour utilisateurs

Outils du site


wiki:tutoriels:clavier_modifier

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…

Fonctionnement des claviers

Keycode — Sur le clavier chaque touche est identifiée par son emplacement physique. Les keycodes sont numériques : de 8 à 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 : Maj, Ctrl…). 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 — cette application graphique affiche le clavier et les keycode et keysyms associés aux combinaisons de touches.
Elle n'est pas disponible pour toutes les distributions (contrairement à xev).

Commencer par sélectionner le modèle de clavier qui se rapproche le plus du votre (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 fait apparaitre une vue du clavier.

Presser une touche l'allume en jaune, 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.
La liste des keysyms associés est affichée.

Il est 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.

En cas de difficulté, le bouton [Select keyboard] (en haut à gauche) permet de revenir au choix du clavier.
Si rien ne va, revenez à la méthode xev, moins jolie, mais plus fiable.

Voir les keysyms associés à une touche

À chaque “keycode” sont associés au maximum 8 keysyms représentant les cas suivants :

  1. Touche seule
  2. Shift + touche
  3. mode_switch + touche
  4. mode_switch + shift + touche
  5. AltGr + touche
  6. AltGr + shift + touche
  7. AltGr + mode_switch + touche
  8. 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. (à développer…)


2 solutions pour voir la liste des keysyms :

  • xkeycaps, vu ci-dessus (si votre distribution la possède dans ses dépôts).
  • xmodmap, autre utilitaire de Xorg, présent dans tous les dépôts et installé de base.

——–

xmodmap

xmodmap est un utilitaire permettant de modifier les mappages des touches et des boutons du pointeur dans Xorg, à lancer dans la console. L'option -pke pour lister les associations actuelles.
On peut envoyer cette liste dans un fichier (pour l'examiner via un éditeur de texte) en tapant :

xmodmap -pke > MONFICHIER.TXT

On peut n'afficher que la ligne d'un keycode souhaité en filtrant avec grep.

xmodmap -pke | grep " 24 = "       (garder les blancs entre " ")

Ce qui donne :

Ce résultat obtenu par xmodmap (ou par xkeycaps, ligne Keysym) se lit :

keycode 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
24aAaAaeAEaeAEqQ

Note: il y a 2 keysyms 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

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki