GNU/Linux >> Tutoriels Linux >  >> Linux

Relation entre la disposition du clavier et Xmodmap ?

J'utilise Xubuntu. Avant de me connecter, je peux choisir une disposition de clavier. J'utilise xmodmap pour remapper certaines clés.

Deux choses m'intéressent :

  1. Comment l'état du mappage du clavier change (a) lorsque j'allume l'ordinateur portable, (b) pendant le processus de démarrage et (c) lors de la connexion au système (dans ces trois phases) et lorsque je travaille avec le système (connecté ).
  2. Quelles sont les causes des symboles qui seront affichés à l'écran (et des touches de commande envoyées) pendant les phases individuelles. Lorsque j'appuie sur une touche, il envoie un signal au pilote du clavier (?), puis il doit y avoir un processus de décision (applications et fichiers de configuration) déterminant quels symboles seront affichés. La réponse à cette question devrait être la liste des applications et les chemins d'accès à ces fichiers de configuration (je suis particulièrement intéressé par Ubuntu (système basé sur Debian), mais vous pouvez décrire un autre système, mais Ubuntu est préféré).

Réponse acceptée :

Il y a deux couches ici, le mappage KEYCODE vers KEYSYM et le mappage KEYSYM vers le texte. Il y a plus de couches si vous comptez le noyau, qui doit mapper les scancodes AT Keyboard à un KEYCODE de style XT ou un code HID de clavier USB à un KEYCODE. Un KEYCODE est simplement un entier non signé de 8 bits que le noyau d'un système d'exploitation transmet au serveur X11. Il peut varier entre les systèmes d'exploitation tels que Linux et Solaris. Sous Linux, ces KEYCODEs sont généralement le même numéro que celui utilisé sur les anciens claviers PC XT. Les ordinateurs plus récents avec des claviers AT, PS/2 ou USB mappent généralement ces claviers à l'ancien code XT pour que la clé simplifie la vie.

Les codes de clavier bruts, qu'ils soient XT, AT, PS/2 ou USB, représentent un emplacement physique sur un clavier. Le clavier XT n'envoie qu'un seul numéro 8 bits lors de l'appui ou du relâchement d'une touche. La touche q d'un clavier US/British XT envoie le chiffre 16. Sur un clavier français, cette même touche physique est étiquetée a, mais elle envoie toujours 16. Ce sont les couches supérieures du système d'exploitation qui lui attribuent une véritable signification. Lorsqu'une touche est relâchée sur un clavier XT, le même code de touche est envoyé plus 128. Pour cet exemple, lorsque q est enfoncé, un 16 est envoyé, mais au relâchement, le nombre 142 (16+128) est envoyé. Les claviers AT utilisent des scancodes qui sont une série de chiffres et peuvent devenir assez longs. Les versions de clé ajoutent des codes supplémentaires. Par exemple, le scancode pour Pause est E1, 1D, 45, E1, 9D, C5. La plupart des systèmes d'exploitation, y compris DOS, Windows, Linux, FreeBSD et le BIOS, mappent tous les scancodes en scancodes de style XT beaucoup plus simples. Il facilite également la prise en charge des claviers plus récents qui utilisent des codes différents tels que les claviers USB qui envoient des codes HID. Tous les codes sont mappés sur le même ensemble cohérent de codes par le système d'exploitation avant que X11 ou l'application ne les voie.

Connexe :Comment grep pour ceci ou cela (2 choses) dans un fichier ?

X11 ignore cette partie du processus, il obtient simplement le KEYCODE du noyau et applique son propre mappage pour convertir ce KEYCODE en KEYSYM. Xmodmap est l'outil standard pour contrôler ce mappage. Une grande partie du comportement du mappage du clavier est configurable, mais il existe plusieurs cas particuliers tels que Num Lock, Mode Switch et Caps Lock/Shift Lock qui sont codés en dur dans X11. D'autres aspects comme Shift sont en fait configurables. N'importe quelle touche peut être mappée pour servir de décalage, contrairement au commutateur de mode ou au verrouillage numérique.

Les KEYCODE représentent les clés physiques envoyées par le noyau du système d'exploitation. Chaque KEYCODE peut correspondre à 8 KEYSYM possibles. Seuls 4 sont utilisés et sont parfois appelés niveaux 1 à 4. Le niveau 1 spécifie le KEYSYM qui est imprimé lorsqu'aucun modificateur n'est actif. Ce sont souvent des lettres minuscules et des chiffres. Les modificateurs sont des KEYCODE qui modifient le KEYSYM généré par d'autres KEYCODE lorsque le modificateur est actif (appuyé ou activé). Les codes de touche des modificateurs sont également contrôlés via Xmodmap. Le niveau 2 spécifie un KEYSYM à envoyer lorsque le modificateur de décalage est enfoncé. Le niveau 3 est activé chaque fois que le commutateur de mode KEYSYM a été enfoncé. Le niveau 4 est activé lorsqu'une touche Maj et un commutateur de mode sont actifs.

Une fois qu'un KEYSYM a été généré, celui-ci peut être interprété directement, mais le plus souvent sera converti en texte. Tous les KEYSYM ne se transforment pas en texte ou peuvent n'affecter qu'un futur KEYSYM. Un exemple est Shift_L, bien sûr, qui n'a pas de représentation textuelle, mais il existe également un certain nombre de KEYSYM qui sont utilisés pour composer un autre caractère. Une liste d'entre eux sur mon système est sous /usr/share/X11/locale/en_US.UTF-8/Compose . Un tel exemple est le dead_acute KEYSYM qui, lorsqu'il est pressé, tentera de convertir le prochain KEYSYM en une lettre accentuée aiguë. Il existe un mappage standard pour transformer les KEYSYM en Unicode.

Maintenant que tout cela a été dit, notez que Xmodmap est obsolète et remplacé par XKB qui est beaucoup plus sophistiqué. Cela affecte la façon dont les KEYCODE sont mappés aux KEYSYM, mais pas la façon dont le noyau génère les KEYCODE ni la façon dont les KEYSYM sont convertis en texte ou composés, ce qui est toujours le même. XKB peut être désactivé en restaurant le comportement de Xmodmap. Il a également une couche de compatibilité pour prendre en charge Xmodmap, mais il peut avoir des problèmes car il n'est pas complètement compatible. Les règles XKB sont sous /usr/share/X11/xkb/ et sont beaucoup plus sophistiqués. Il existe une bonne documentation ailleurs sur la façon dont il génère des dispositions de clavier pour mapper les KEYCODE aux KEYSYM.

Quant à la console Linux, elle possède ses propres dispositions de clavier qui sont stockées dans /usr/share/keymaps et chargé avec les loadkeys commande. Dans le BIOS et les étapes précédentes du chargeur de démarrage, y compris GRUB2, le mappage du clavier est quel que soit le numéro auquel le BIOS décide de mapper la clé.

Connexe :Debian – Openssl mis à jour via apt-get, `openssl version` montrant la version précédente ?
Linux
  1. Comment fonctionnent la saisie au clavier et la sortie de texte ?

  2. Cartographier la combinaison de touches avec Xmodmap ?

  3. Changer la disposition du clavier dans Lightdm ?

  4. Forcer l'écran vide et ignorer l'entrée ?

  5. Quelle disposition de clavier me permet de taper ç ?

Comment ajouter et changer la disposition du clavier sur Ubuntu 22.04 Desktop

Albert - Un lanceur de clavier rapide et flexible

Corriger la mauvaise disposition du clavier dans Ubuntu

Secrets du plasma :langues et configurations de clavier supplémentaires

Xmodmap Shift + Keycode pour produire Keysym ?

Comment masquer l'indicateur de disposition du clavier dans Ubuntu 17.10 et versions ultérieures avec Gnome 3 ?