Without argument, kbd_mode prints the current keyboard mode. With argument, it sets the keyboard mode as indicated:
scancode mode (RAW),
-k: keycode mode (MEDIUMRAW),
-a: ASCII mode (XLATE),
-u: UTF-8 mode (UNICODE).
The XLATE mode is the traditional one, where the codes used can be any 8-bit character set. Is is usually expected that this character set matches the one used later to translate them internally into Unicode, after they are sent to the screen to be displayed, using the map selected by consolechars -m.
In UNICODE mode, a 16-bit character set is expected, and these chars are transmitted to the kernel as 1, 2, or 3 bytes (following the UTF-8 coding). In these latter two modes the key mapping defined by loadkeys(1) is used.
WARNING: changing the keyboard mode, other than between ASCII and Unicode, will probably make your keyboard unusable. This command can also be useful (say via remote login) when some program left your keyboard in the wrong state, to get the keyboard back into XLATE or UNICODE mode.
Note that in some obsolete versions of this program the -u option was a synonym for -s.