showkey - examine the codes sent by the keyboard
showkey [-h|--help] [-a|--ascii] [-s|--scancodes] [-k|--keycodes]
showkey prints to standard output either the scan codes or the keycode or the `ascii' code
of each key pressed. In the first two modes the program runs until 10 seconds have
elapsed since the last key press or release event, or until it receives a suitable signal,
like SIGTERM, from another process. In `ascii' mode the program terminates when the user
When in scancode dump mode, showkey prints in hexadecimal format each byte received from
the keyboard to the standard output. A new line is printed when an interval of about 0.1
seconds occurs between the bytes received, or when the internal receive buffer fills up.
This can be used to determine roughly, what byte sequences the keyboard sends at once on a
given key press. The scan code dumping mode is primarily intended for debugging the key-
board driver or other low level interfaces. As such it shouldn't be of much interest to
the regular end-user. However, some modern keyboards have keys or buttons that produce
scancodes to which the kernel does not associate a keycode, and, after finding out what
these are, the user can assign keycodes with setkeycodes(8).
When in the default keycode dump mode, showkey prints to the standard output the keycode
number or each key pressed or released. The kind of the event, press or release, is also
reported. Keycodes are numbers assigned by the kernel to each individual physical key.
Every key has always only one associated keycode number, whether the keyboard sends single
or multiple scan codes when pressing it. Using showkey in this mode, you can find out what
numbers to use in your personalized keymap files.
When in `ascii' dump mode, showkey prints to the standard output the decimal, octal, and
hexadecimal value(s) of the key pressed, according to he present keymap.
showkey prints to the standard error output its version number, a compile option
and a short usage message, then exits.
Starts showkey in scan code dump mode.
Starts showkey in keycode dump mode. This is the default, when no command line
options are present.
Starts showkey in `ascii' dump mode.
In 2.6 kernels key codes lie in the range 1-255, instead of 1-127. Key codes larger than
127 are returned as three bytes of which the low order 7 bits are: zero, bits 13-7, and
bits 6-0 of the key code. The high order bits are: 0/1 for make/break, 1, 1.
In 2.6 kernels raw mode, or scancode mode, is not very raw at all. Scan codes are first
translated to key codes, and when scancodes are desired, the key codes are translated
back. Various transformations are involved, and there is no guarantee at all that the
final result corresponds to what the keyboard hardware did send. So, if you want to know
the scan codes sent by various keys it is better to boot a 2.4 kernel. Since 2.6.9 there
also is the boot option atkbd.softraw=0 that tells the 2.6 kernel to return the actual
The raw scan codes are available only on AT and PS/2 keyboards, and even then they are
disabled unless the atkbd.softraw=0 kernel parameter is used. When the raw scan codes are
not available, the kernel uses a fixed built-in table to produce scan codes from keycodes.
Thus, setkeycodes(8) can affect the output of showkey in scan code dump mode.
loadkeys(1), dumpkeys(1), keymaps(5), setkeycodes(8)
1 Feb 1998 SHOWKEY(1)