Xorg - configuration du clavier

Posté le ven 03 décembre 2010 dans linux

Lors de son démarrage, xorg scrute une liste de dossiers dans un ordre déterminé, à la recherche d'un fichier xorg.conf ou de fichiers .conf dans un dossier nommé xorg.conf.d. Le dossier xorg.conf.d permet simplement de découper la configuration en plusieurs fichiers.

Notez que si vous utilisez le fichier xorg.conf, le dossier xorg.cond.d est simplement ignoré et que, dès lors le fichier xorg.conf doit contenir la totalité de la configuration.

La liste de dossiers scrutés par xorg est généralement :

  • /etc/X11/xorg.conf
  • /etc/X11/xorg.conf.d/…
  • /usr/share/X11/xorg.conf
  • /usr/share/X11/xorg.conf.d/…

Il est fort probable de ne rien trouver dans /etc/X11, qui est là pour vous permettre de modifier la configuration sans toucher aux fichiers d'origines. Il suffit alors de recopier (avec sudo) le fichier que vous souhaitez modifier depuis /usr/share/X11/… vers /etc/X11/…

Modifier le clavier

Sous Archlinux, je crée dans /etc/X11/xorg.conf.d un fichier nommé 10-keyboard-layout.conf, avec le code suivant:

Section "InputClass"
        Identifier      "keyboard Layout"
        MatchIsKeyboard "on"
EndSection

Pour un clavier belge, j'ajoute après la ligne driver :

Option "XkbLayout" "be"

Pour un clavier mac, j'ajoute :

Option "XkbLayout" "fr"
Option "XkbVariant" "mac"

Sous Debian, il est conseillé de modifier le fichier /etc/default/keyboard et d'utiliser la commande dpkg-reconfigure keyboard-configuration, à exécuter en sudo. Celle-ci lance un utilitaire de configuration qui modifiera le fichier de configuration de xorg pour vous.

Modifier temporairement le clavier

Il est également possible de modifier le clavier temporairement - jusqu'à la prochaine déconnexion de l'interface graphique - en utilisant la commande setxkbmap :

setxkbmap -layout "fr" -variant "mac"

Corriger les touches qui déconnent

Si comme moi les touches @ et < sont inversées sur votre clavier mac, il est possible de corriger le mapping clavier.

La commande xev (à lancer dans un terminal) permet de connaître le keycode des touches. Elle affiche le contenu de chaque événement capté par l'interface graphique. Le moindre mouvement de souris, pression ou relâchement de touche génère un événement.

xev
...
KeyPress event, serial 37, synthetic NO, window 0x3200001,
    root 0x165, subw 0x0, time 3927162, (163,-10), root:(474,228),
    state 0x10, keycode 94 (keysym 0x3c, less), same_screen YES,
    XLookupString gives 1 bytes: (3c) "<"
    XmbLookupString gives 1 bytes: (3c) "<"
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x3200001,
    root 0x165, subw 0x0, time 3927914, (163,-10), root:(474,228),
    state 0x10, keycode 49 (keysym 0x40, at), same_screen YES,
    XLookupString gives 1 bytes: (40) "@"
    XmbLookupString gives 1 bytes: (40) "@"
    XFilterEvent returns: False

La touche @ correspond au keycode 94 et la touche < correspond au keycode 49. L'inverse de ce que le message précédent nous indique.

La commande xmodmap -pke affiche le mapping du clavier. Les commandes suivantes permettent d'extraire uniquement les lignes qui nous intéressent et de les placer directement dans le fichier .Xmodmap (situé à la racine de votre dossier personnel).

Noter qu'il y a deux espaces entre keycode et le nombre.

 xmodmap -pke | grep 'keycode  49 =' >> ~/.Xmodmap
 xmodmap -pke | grep 'keycode  94 =' >> ~/.Xmodmap

Éditer le fichier ~/.Xmodmap, vous devriez avoir ceci à la fin du fichier :

keycode 49 = at numbersign at numbersign periodcentered ...
keycode 94 = less greater less greater VoidSymbol ...

Il reste à intervertir le 49 et le 94 comme suit :

keycode 94 = at numbersign at numbersign periodcentered ...
keycode 49 = less greater less greater VoidSymbol ...

Pour prendre en compte cette modification, il faut quitter sa session graphique.

Chaque utilisateur devra copier ce fichier dans son dossier personnel. L'idéal est d'en placer une copie dans le dossier /etc/skel, de cette manière, à chaque création d'un nouvel utilisateur, ce fichier sera copié.