You press a key, and the keyboard controller sends scancodes to the
kernel keyboard driver. Some keyboards can be programmed, but usually
the scancodes corresponding to your keys are fixed.
The kernel keyboard driver just transmits whatever it receives
to the application program when it is in scancode mode,
like when X
is running. Otherwise, it parses the stream of scancodes
into keycodes, corresponding to key press or key release events.
(A single key press can generate up to 6 scancodes.)
These keycodes are transmitted to the application program when it is
in keycode mode (as used, for example, by showkey
).
Otherwise, these keycodes are looked up in the keymap, and the character
or string found there is transmitted to the application, or the action
described there is performed.
(For example, if one presses and releases the a
key, then the keyboard
produces scancodes 0x1e and 0x9e, this is converted to keycodes 30 and 158,
and then transmitted as 0141, the ASCII or latin-1 code for 'a';
if one presses and releases Delete
, then the keyboard produces scancodes
0xe0 0x53 0xe0 0xd3, these are converted to keycodes 111 and 239, and then
transmitted as the 4-symbol sequence ESC [ 3 ~
, all assuming a US keyboard
and a default keymap. An example of a key combination to which an action
is assigned is Ctrl-Alt-Del.)
The translation between unusual scancodes and keycodes can be set using the
utility setkeycodes
- only very few people will need it.
The translation between keycodes and characters or strings or actions, that is,
the keymap, is set using the utility loadkeys
.
For details, see getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1).
Where it says `transmitted to the application' in the above description,
this really means `transmitted to the terminal driver'. That is, further
processing is just like that of text that comes in over a serial line.
The details of this processing are set by the program stty
.