If some program using K_RAW keyboard mode exits without restoring
the keyboard mode to K_XLATE, then it is difficult to do anything
- not even Ctrl-Alt-Del works. However, it is sometimes possible
to avoid hitting the reset button. (And desirable as well: your
users may get angry if you kill their Hack game by rebooting; you
might also damage your file system.) Easy solutions involve
logging in from another terminal or another machine and doing
kbd_mode -a. The procedure below assumes that no X
is running, that the display is in text mode, and that you are at
your bash prompt, that you are using a US keyboard layout, and
that your interrupt character is Ctrl-C.
Step 1. Start X. As follows: press 2 (and don't release), press
F12 (and don't release) and immediately afterwards press = . This
starts X. (Explanation: if a key press produces keycode K, then
the key release produces keycode K+128. Probably your shell does
not like these high characters, so we avoid generating them by
not releasing any key. However, we have to be quick, otherwise
key repeat starts. The digit 2 produces a Ctrl-C that discards
previous junk, the F12 produces an X and the = a Return.)
Probably your screen will be grey now, since no
.xinitrc was specified. However, Ctrl-Alt-Fn will
work and you can go to another VT. (Ctrl-Alt-Backspace also
works, but that exits X, and gets you back into the previous
state, which is not what you want.)
Step 2. Setup to change the keyboard mode. (For example, by
sleep 5; kbd_mode -a.)
Step 3. Leave X again. Alt-Fx (often Alt-F7) brings you back to X, and then Ctrl-Alt-Backspace exits X. Within 5 seconds your keyboard will be usable again.
If you want to prepare for the occasion, then make
\215A\301 (3 symbols) an alias for kbd_mode
-a. Now just hitting = F7 = (3 symbols) will return you to
sanity.