Quand on appuie sur une touche, le contrôleur clavier envoie des
scancodes au pilote clavier du noyau. Certains claviers sont
programmables, mais en général les scancodes sont fixes.
Quand le pilote clavier est en mode scancode (dit aussi
mode raw), le noyau se contente
de transmettre les codes tels quels à l'application, c'est ce qui se
passe sous X
. Sinon le flux de scancodes est décomposé en
keycodes correspondant à l'appui ou au relâchement d'une touche. (Le
simple fait d'appuyer sur une touche peut produire jusqu'à 6
scancodes, réduits ici en un seul keycode.) Si le pilote clavier est
en mode keycode (ou
mode mediumraw),
l'application reçoit les keycodes (ce mode est utilisé, par exemple,
par showkey
).
Sinon, les keycodes sont traduits d'après une table (keymap), ensuite,
soit un caractère (ou un chaîne) est envoyé à l'application, soit une
action est déclenchée.
(Exemple: si on appuie et relâche la touche q
, le clavier envoie
les scancodes 0x1E et 0x9E, ce qui est converti en keycodes 30 et
158, puis en la valeur 113, qui est le code ASCII ou Latin-1 de q
(avec un clavier Azerty et une keymap adaptée).
Si on appuie et relâche la touche Suppr
, le clavier envoie les
scancodes 0xE0 0x53 0xE0 0xD3, convertis en keycodes 111 et 239, ce
qui donne finalement la séquence ESC [ 3 ~
. Ctrl-Alt-Suppr
est une combinaison de touches qui déclenche une action.)
La conversion de scancodes exotiques en keycodes peut être programmée
avec l'utilitaire setkeycodes
, mais peu de gens ont besoin.
La table de traduction des keycodes en caractères, chaînes ou
actions, i.e. la keymap, se manipule grâce à loadkeys
.
Pour plus de détails, voir getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1).
Dans ce paragraphe, le terme `envoyé à l'application' signifie en
fait `transmis au pilote du terminal'. Le texte est ensuite traité de
la même façon que s'il venait d'une ligne série. Les détails de ce
traitement sont ajustés par le programme stty
.