Page suivante - Page précédente - Table des matières

2. Le clavier - généralités

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.


Page suivante - Page précédente - Table des matières