GNU/Linux >> Tutoriels Linux >  >> Linux

Changer la disposition/le mappage du clavier sur la console (tty) et X d'une manière indépendante de X/console ?

J'ai pu modifier la disposition/le mappage du clavier lorsque le système X Window est en cours d'exécution à l'aide de ~/.Xmodmap (et je suppose que vous pouvez également le faire via le protocole X directement, par exemple en utilisant libxcb comme wrapper autour des appels de protocole X).

J'ai pu faire la même chose (un peu) sur la console/tty (c'est-à-dire lorsque X n'est pas en cours d'exécution) en utilisant loadkeys .

Existe-t-il un moyen de personnaliser la disposition du clavier de la même manière, mais à partir d'une source unique , de telle sorte qu'il affecte à la fois X et la console, c'est-à-dire. d'une manière "indépendante de X et de la console" ?

(La seule façon à laquelle je peux penser est d'écrire un "pilote de clavier" qui communique avec l'interface d'entrée du noyau, evdev , et envoie l'entrée souhaitée (via uinput ?), ou quelque chose, mais je ne sais pas si cela a du sens, ou s'il existe un moyen plus simple.)

Réponse acceptée :

Oui, il y a un moyen, et c'est en effet ainsi que le paquet de configuration de la console de Debian le fait.

  • Les dispositions de clavier sont spécifiées en termes XKB (modèle, disposition, variante et options) par l'administrateur dans un fichier nommé keyboard , généralement /etc/default/keyboard . C'est la source unique. Il peut être modifié avec un éditeur de texte.
  • Le setxkbmap programme reçoit ces mêmes paramètres XKB et configure un serveur X11 en conséquence.
    • Le script de maintenance post-installation du package de configuration du clavier exécute setxkbmap directement, avec le /etc/default/keyboard paramètres, s'il se retrouve avec un affichage X11. Ainsi dpkg-reconfigure keyboard-configuration exécuté à partir d'un émulateur de terminal graphique X11 affectera la disposition du clavier X11.
  • Le setupcon le script prend ces paramètres XKB, les passe à travers le ckbcomp utilitaire pour générer une carte de clavier et charge cette carte de clavier dans les terminaux virtuels du noyau avec loadkeys /kbdcontrol .
    • Ce script est exécuté au démarrage du système par un service.
    • Il peut également être exécuté manuellement autrement.

Les autres systèmes d'exploitation systemd fonctionnent différemment mais ont également une source unique.

  • La mise en page, la variante et les options XKB sont stockées dans /etc/X11/xorg.conf.d/00-keyboard.conf . C'est la source unique.
    • Ce fichier est directement lu par le serveur X11 au démarrage et définit directement la carte du clavier X11.
    • Ce fichier est analysé par systemd-localed au démarrage. Le fichier ne peut pas être modifié de manière utile avec un éditeur de texte alors que systemd-localed est en cours d'exécution, car le service l'écrasera allègrement avec ses propres informations en mémoire.
    • Pour changer les informations XKB, on lance localectl , qui parle à un autre serveur qui à son tour parle à systemd-localed .
  • systemd-localed convertit les paramètres XKB en un nom de carte de clavier de terminal virtuel en utilisant les mappages dans /usr/share/systemd/kbd-model-map , qu'il écrit ensuite dans /etc/vconsole.conf . Contrairement au système Debian, il ne génère pas de cartes à la volée à partir des informations XKB, mais sélectionne uniquement les cartes statiques pré-fournies répertoriées dans le fichier de carte.
  • systemd-vconsole-setup s'exécute au démarrage, lit /etc/vconsole.conf , et charge la carte du clavier dans les terminaux virtuels du noyau en exécutant loadkeys .

Autres lectures

  • keyboard . Manuel de l'utilisateur de configuration de la console . Debian.
  • ckbcomp . Manuel de l'utilisateur de configuration de la console . Debian.
  • Andrew T. Young (2011). Configuration du clavier .
  • Où Xkb obtient-il sa configuration ?
  • https://unix.stackexchange.com/a/326804/5132
Connexe :le script n'exécute la boucle qu'une seule fois ?
Linux
  1. Utiliser Reddit depuis la console en 2020

  2. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  3. printk et niveau de journalisation de la console

  4. Effacer la ligne de console imprimée actuelle

  5. Quelle est la bonne façon de faire fermer mon application PyQt lorsqu'elle est tuée depuis la console (Ctrl-C) ?

Comment changer le type et la taille de la police de la console Linux

Quelle est la différence entre une console, un terminal et un shell ?

Obtenir les caractères  et â dans la console Linux PuTTY

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

Où est la vue terminale de tty7

console virsh et taille tty