Que veulent dire les gens lorsqu'ils soulignent que les «keys ne sont pas correctement mappées» dans une installation Linux lorsqu'ils travaillent sur la command line?
L'installation par défaut n'est-elle pas correcte? Quels mappages supplémentaires / spécifiques sont nécessaires?
On m'a aussi dit que pour mon Mac où mes touches Home et End et Ctrl ne font pas ce que je pensais.
En général, lorsque quelqu'un dit ceci, cela signifie que la fonction étiquetée sur une key ne correspond pas à ce que "code" cette key envoie au kernel Linux lorsqu'il est pressé. Vous pouvez y penser car la key est étiquetée Home mais le kernel reçoit le code pour la touche Ctrl .
A un niveau beaucoup plus bas, une partie de ce qui se passe réellement est que chaque key est assignée à un scancode.
extrait de scancode wikipedia page
Un scancode (ou code de balayage) est la donnée que la plupart des keyboards d'ordinateur envoie à un ordinateur pour signaler quelles touches ont été pressées. Un numéro ou une séquence de numbers est atsortingbué à chaque touche du keyboard.
Ces scancodes sont mappés dans les keycodes par le kernel Linux. Ce sont ces codes keys qui sont généralement communiqués aux applications. Voici une autre ressource scancode si vous souhaitez plus de détails.
NOTE: ceci est une simplification, mais j'essaie juste de vous donner une compréhension générale de cette couche. La key à retenir est que les keys sont pressées, les scancodes sont générés, le kernel Linux voit ces scancodes et émet des codes-keys.
Vous pouvez modifier le mappage du code key scancode à l'aide d'un outil setkeycodes
:
setkeycodes scancode keycode ...
La command setkeycodes lit ses arguments deux par deux, chaque paire d'arguments étant constituée d'un scancode (donné en hexadécimal) et d'un keycode (en décimal). Pour chacune de ces paires, il indique au pilote du keyboard du kernel de mapper le scancode spécifié sur le keycode spécifié.
Le mappage de code key est conservé dans les files keymap. Sur mon système Fedora, mon file keymap américain se trouvait ici, /lib/kbd/keymaps/i386/qwerty/us.map.gz
. Je l'ai trouvé en sleuthing un peu avec cette command:
$ locate map.gz|grep us /lib/kbd/keymaps/amiga/amiga-us.map.gz /lib/kbd/keymaps/atari/atari-us.map.gz /lib/kbd/keymaps/i386/qwerty/br-latin1-us.map.gz /lib/kbd/keymaps/i386/qwerty/is-latin1-us.map.gz /lib/kbd/keymaps/i386/qwerty/us-acentos.map.gz /lib/kbd/keymaps/i386/qwerty/us.map.gz /lib/kbd/keymaps/i386/qwertz/cz-us-qwertz.map.gz /lib/kbd/keymaps/mac/all/mac-us.map.gz /lib/kbd/keymaps/sun/sunt5-cz-us.map.gz /lib/kbd/keymaps/sun/sunt5-us-cz.map.gz
Notez que ces files sont compressés (.gz), donc vous devez les décompresser (ne vous embêtez pas) ou utilisez zcat
ou zless
pour les parcourir:
$ zless /lib/kbd/keymaps/i386/qwerty/us.map.gz # us.map keymaps 0-2,4-6,8-9,12 alt_is_meta include "qwerty-layout" include "linux-with-alt-and-altgr" include "compose.latin1" include "euro1.map" ssortingngs as usual keycode 1 = Escape keycode 2 = one exclam keycode 3 = two at at nul nul keycode 4 = three numbersign control keycode 4 = Escape keycode 5 = four dollar dollar Control_backslash keycode 6 = five percent ... ... keycode 97 = Control
Donc, si vous vouliez changer la key "Control" (keycode 97) et la placer sur le scancode de la touche "Left Control", (scancode 0x1d 0x9d), utilisez les commands suivantes:
$ setkeycodes 1d9d 97 &
Vous pouvez également voir à quel code key une key est showkey
à l'aide de la command showkey
:
$ showkey -a Press any keys - Ctrl-D will terminate this program 1 49 0061 0x31 2 50 0062 0x32 3 51 0063 0x33 a 97 0141 0x61 b 98 0142 0x62 c 99 0143 0x63 ^[OH 27 0033 0x1b 79 0117 0x4f 72 0110 0x48 ^D 4 0004 0x04
Le "^ [OH" est moi en appuyant sur ma touche HOME .
NOTE1: En ascii' dump mode (
ascendant ascii' dump mode (
showkey -a), la touche showkey affiche sur la sortie standard les valeurs décimale, octale et hexadécimale de la touche enfoncée, selon qu'il présente keymap.
NOTE2: Vous devrez peut-être utiliser sudo
lors de l'exécution de showkey
.
J'utilise un MacBook Pro et je n'ai aucun problème avec les mappages de keys lorsque je me connecte aux systèmes UNIX, donc les parameters par défaut sont certainement très bien et aucun mappage n'est nécessaire. J'utilise régulièrement Debian, Ubuntu, RedHat et Solaris 11.
Cependant, ce que les gens veulent dire quand ils disent que c'est dans les Preferences Terminal sous Paramètres dans l'onglet Clavier . Vous pouvez modifier vos mappages de touches là.
Le seul changement que j'ai fait est d'activer l' option d'utilisation en tant que meta .
En ce qui concerne Home et End , j'utilise ctrl + A pour Home et ctrl + E pour End à la place parce que je n'aime pas où les touches Home et End sont sur les keyboards. J'ai également changé ma key de locking de majuscules dans une autre touche ctrl (dans les Preferences Système sous Clavier) parce que c'est l'location traditionnel pour une touche ctrl, c'est plus confortable et sérieux, qui utilise le locking des majuscules?