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.