Linux console (Français)/Keyboard configuration (Français)
Les mappages de clavier (keymaps), les polices de caractères de la console et les mappages de la console pour la console Linux sont fournis par le paquet kbd (une dépendance de systemd), qui fournit également de nombreux outils de bas niveau pour gérer la console texte. De plus, systemd fournit également l'outil localectl, qui peut contrôler à la fois la locale du système et les paramètres de disposition du clavier pour la console et Xorg.
Visualiser les configurations du clavier
Utilisez localectl status
pour afficher les configurations actuelles du clavier.
Keymaps
Les fichiers keymap sont stockés dans l'arborescence des répertoires /usr/share/kbd/keymaps/
. Habituellement, un fichier keymap correspond à une disposition de clavier (l'instruction include
peut être utilisée pour partager des parties communes et un fichier keymap peut contenir plusieurs dispositions avec une certaine combinaison de touches utilisée pour la commutation). Pour plus de détails, consultez keymaps(5).
Lister les keymaps
Les conventions de nommage des keymaps de la console sont quelque peu arbitraires, mais elles sont généralement basées sur :
- Codes de langue : où le code de la langue est le même que celui du pays (par exemple,
de
pour l'allemand, oufr
pour le français). - Codes pays : lorsque des variantes d'une même langue sont utilisées dans différents pays (par exemple,
uk
pour l'anglais du Royaume-Uni, ouus
pour l'anglais des États-Unis) ; une liste des codes de pays peut également être trouvée dans wikipedia:fr:ISO 3166-1#Table de codage. - Disposition du clavier : lorsque la disposition n'est pas liée à un pays ou à une langue particulière (par exemple,
dvorak
pour la Disposition Dvorak).
Pour obtenir une liste de toutes les keymaps disponibles, utilisez la commande :
$ localectl list-keymaps
Pour rechercher un keymap, utilisez la commande suivante, en remplaçant search_term
par le code de votre langue, pays ou disposition :
$ localectl list-keymaps | grep -i search_term
Vous pouvez également utiliser find :
$ find /usr/share/kbd/keymaps/ -type f -name "*search_term*"
Charger les touches
Il est possible de définir une keymap uniquement pour la session en cours. Ceci est utile pour tester différentes keymaps, résoudre des problèmes, etc.
L'outil loadkeys est utilisé dans ce but, il est utilisé en interne par systemd lors du chargement de la keymap configurée dans /etc/vconsole.conf
. Il peut être utilisé très simplement dans ce but :
# loadkeys keymap
Consultez les détails de loadkeys(1).
Configuration persistante
Une keymap persistante peut être définie dans /etc/vconsole.conf
, qui est lu par systemd au démarrage. La variable KEYMAP
est utilisée pour spécifier la keymap. Si la variable est vide ou non définie, la keymap us
est utilisée comme valeur par défaut. Consultez vconsole.conf(5) pour toutes les options. Par exemple :
/etc/vconsole.conf
KEYMAP=uk
Pour plus de commodité, localectl peut être utilisé pour définir la keymap de la console. Il modifiera la variable KEYMAP
dans /etc/vconsole.conf
et définira également la keymap de la session en cours :
# localectl set-keymap --no-convert keymap
L'option --no-convert
peut être utilisée pour empêcher localectl
de changer automatiquement la configuration du clavier dans Xorg| pour la correspondance la plus proche. Consultez localectl(1) pour plus d'informations.
Si nécessaire, la keymap de /etc/vconsole.conf
peut être chargé au début de l'espace utilisateur par le «hook» de mkinitcpio keymap
.
- Si vous avez sauvegardé votre keymap personnalisée ailleurs que dans
/usr/share/kbd/keymaps/
, il doit être spécifié par un chemin complet vers le fichier dansvconsole.conf
ou lors de l'utilisation de la commande localectl ci-dessus. - Les variables
XKB*
de/etc/vconsole.conf
sont pour la configuration du clavier dans Xorg|. loadkeys ne prends pas encore en charge leur utilisation; Voir kbd issue 72. Xorg ne le permet pas non plus.
Création d'une keymap personnalisé
Lorsque vous utilisez la console, vous pouvez utiliser des touches de raccourci pour imprimer un caractère spécifique. De plus, nous pouvons également imprimer une séquence de caractères et certaines séquences d'échappement. Ainsi, si nous imprimons la séquence de caractères constituant une commande et ensuite un caractère d'échappement pour une nouvelle ligne, cette commande sera exécutée.
Une méthode pour y parvenir consiste à éditer le fichier keymap. Cependant, comme il sera réécrit à chaque fois que le paquet auquel il appartient sera mis à jour, il est déconseillé d'éditer ce fichier. Il est préférable d'intégrer le keymap existant avec un keymap personnel. L'utilitaire loadkeys
peut le faire.
Tout d'abord, créez un fichier keymap. Ce fichier peut se trouver n'importe où, mais une méthode consiste à imiter la hiérarchie des répertoires dans /usr/local
: créez le répertoire /usr/local/share/kbd/keymaps
, puis modifiez /usr/local/share/kbd/keymaps/personal.map
.
En passant, il est intéressant de noter qu'une telle keymap personnelle est également utile pour redéfinir le comportement des touches déjà traitées par la keymap par défaut : lors du chargement avec loadkeys
, les directives de la keymap par défaut seront remplacées lorsqu'elles entrent en conflit avec les nouvelles directives et conservées sinon. De cette façon, seules les modifications de la keymap doivent être spécifiées dans la keymap personnelle.
- Vous pouvez également modifier une keymap existant situé dans l'arborescence du répertoire
/usr/share/kbd/keymaps/
. Les keymaps ont une extension .map.gz, par exempleus.map.gz
est une keymap américain. Il suffit de copier la keymap dans/usr/local/share/kbd/keymaps/personal.map.gz
et de le gunzip. - La carte des raccourcis personnalisée peut être rendue persistante en la définissant dans
/etc/vconsole.conf
. Ainsi, si vous utilisez le «hook» de mkinitcpiosd-vconsole
au lieu dekeymap
, vous pouvez placer votre fichier keymap personnalisé dans/usr/share/kbd/keymaps/
. De cette façon, les dépendances de/usr/share/kbd/keymaps
seront automatiquement ajoutées à l'image ramdisk initiale par le hook. D'autre part, si vous placez votre fichier keymap personnalisé sous/usr/local/
, alors ses dépendances devront être spécifiées manuellement dans le tableauFILES
demkinitcpio.conf
.
Ajout de directives
Deux types de directives sont nécessaires dans cette keymap personnelle. Tout d'abord, les directives keycode, qui correspondent au format consulté dans les keymaps par défaut. Ces directives associent un keycode à un keysym. Les keysyms représentent les actions du clavier. Les actions disponibles incluent la sortie de codes de caractères ou de séquences de caractères, le changement de console ou de la keymap, le démarrage de la machine, et bien d'autres actions. La table de clavier complète actuellement active peut être obtenue avec
# dumpkeys -l
La plupart des keymaps sont intuitives. Par exemple, pour que la touche 112 produise un 'e', la directive sera la suivante :
keycode 112 = e
Pour que la touche 112 affiche le symbole de l'euro, la directive sera la suivante :
keycode 112 = euro
Certains keysym ne sont pas immédiatement liés à des actions du clavier. En particulier, les keysyms préfixés par un F majuscule et un à trois chiffres (F1-F246) constituant un nombre supérieur à 30 sont toujours libres. Ceci est utile pour diriger une touche de raccourci pour sortir une séquence de caractères et d'autres actions :
keycode 112 = F70
Ensuite, F70 peut être lié à la sortie d'une chaîne spécifique :
string F70 = "Bonjour"
Lorsque vous appuyez sur la touche 112, le contenu de F70 est affiché. Afin d'exécuter une commande imprimée dans un terminal, un caractère d'échappement «newline» doit être ajouté à la fin de la chaîne de commande. Par exemple, pour entrer en hibernation, la keymap suivante est ajoutée :
string F70 = "sudo systemctl hibernate\n"
Autres exemples
- Pour que la touche Alt droite soit identique à la touche Alt gauche (pour Emacs), utilisez la ligne suivante dans votre keymap. Elle inclura le fichier
/usr/share/kbd/keymaps/i386/include/linux-with-two-alt-keys.inc
, consultez-le pour plus de détails.
include "linux-with-two-alt-keys"
- Pour remplacer CapsLock par Escape (pour Vim), remappez les keycodes respectifs :
keycode 1 = Caps_Lock keycode 58 = Escape
- Pour que CapsLock soit une autre touche de contrôle, remappez les codes respectifs :
keycode 58 = Control
- Pour échanger CapsLock avec la touche de contrôle gauche, remappez les codes respectifs :
keycode 29 = Caps_Lock keycode 58 = Control
Sauvegarde des modifications
Afin d'utiliser le clavier personnel, il doit être chargé avec loadkeys :
# loadkeys /usr/local/share/kbd/keymaps/personal.map
Cependant, cette keymap n'est active que pour la session en cours. Afin de charger le keymap au démarrage, spécifiez le chemin complet du fichier dans la variable KEYMAP
dans /etc/vconsole.conf. Le fichier n'a pas besoin d'être gzippé comme les keymaps officiels fournis par kbd.
Réglage du délai et du taux de répétition
Le délai typographique indique la durée (généralement en millisecondes) pendant laquelle une touche doit être maintenue enfoncée pour que le processus de répétition commence. Une fois le processus de répétition déclenché, le caractère sera répété à une certaine fréquence (généralement exprimée en Hz) spécifiée par le taux typographique. Ces valeurs peuvent être modifiées en utilisant la commande kbdrate. Notez que ces paramètres sont configurés séparément pour la console et pour Xorg.
# kbdrate [-d delay] [-r rate]
Par exemple, pour régler un retard typographique à 200ms et un taux typographique à 30Hz, utilisez la commande suivante :
# kbdrate -d 200 -r 30
Si vous lancez la commande sans spécifier le délai et le taux, les valeurs typographiques seront réinitialisées à leurs valeurs par défaut respectives, soit un délai de 250 ms et un taux de 11 Hz :
# kbdrate
Service Systemd
Un service systemd peut être utilisé pour définir la fréquence du clavier. Par exemple :
/etc/systemd/system/kbdrate.service
[Unit] Description=Keyboard repeat rate in tty. [Service] Type=oneshot RemainAfterExit=yes StandardInput=tty StandardOutput=tty ExecStart=/usr/bin/kbdrate --silent --delay 250 --rate 30 [Install] WantedBy=multi-user.target
Puis démarrez et activez le service systemd kbdrate.service
.