− load kernel scancode-to-keycode mapping table
scancode keycode ...
setkeycodes command reads its arguments two at a
time, each pair of arguments consisting of a scancode (given
in hexadecimal) and a keycode (given in decimal). For each
such pair, it tells the kernel keyboard driver to map the
specified scancode to the specified keycode.
This command is
useful only for people with slightly unusual keyboards, that
have a few keys which produce scancodes that the kernel does
The usual PC
keyboard produces a series of scancodes for each key press
and key release. (Scancodes are shown by showkey
−s, see showkey(1).) The kernel parses this stream
of scancodes, and converts it to a stream of keycodes (key
press/release events). (Keycodes are shown by
showkey.) Apart from a few scancodes with special
meaning, and apart from the sequence produced by the Pause
key, and apart from shiftstate related scancodes, and apart
from the key up/down bit, the stream of scancodes consists
of unescaped scancodes xx (7 bits) and escaped scancodes e0
xx (8+7 bits). To these scancodes or scancode pairs, a
corresponding keycode can be assigned (in the range 1-127).
For example, if you have a Macro key that produces e0 6f
according to showkey(1), the command
setkeycodes e06f 112
will assign the keycode 112 to
it, and then loadkeys(1) can be used to define the function
of this key.
kernels might hardwire a low scancode range to the
equivalent keycodes; setkeycodes will fail when you try to
In 2.6 kernels
key codes lie in the range 1-255, instead of 1-127. (It
might be best to confine oneself to the range 1-239.)
In 2.6 kernels
raw mode, or scancode mode, is not very raw at all. The code
returned by showkey −s will change after use of
setkeycodes. A kernel bug. See also showkey(1).
The keycodes of
X have nothing to do with those of Linux. Unusual keys can
be made visible under Linux, but not under X.
(1), loadkeys (1), showkey (1), getkeycodes (8)