Files
vt1200/reference/keyboard-mouse/elkay/host/linux
SDD 3fd1e13b2e docs: keyboard/mouse protocol spec — LK401 (LK201 protocol) + VSXXX-AA mouse, sources, MAME lk201 device
Distils public docs into reference/keyboard-mouse/PROTOCOL.md for the level-1
Keyboard (27) / Mouse (26) device tests:
- keyboard: 4800 8N1 RS-423, self-test via FD -> 01 00 00 00 (errors 3D/3E)
- mouse: 4800 8O1 RS-232, self-test via 'T' -> 4-byte report (errors 3D/3E, >=0x20 fatal)
- separate ports: DUART2 A=keyboard, B=mouse (NOT daisy-chained)
MAME already has an LK201 device (src/mame/dec/lk201.cpp/.h) but no DEC mouse.
2026-10-16 11:38:52 +03:00
..

Linux host setup

elkay sends the LK401's F13–F20 as the standard USB keys F13–F20. The kernel reports them as KEY_F13–KEY_F20, but xkb's default symbols then turn them into other keys:

LK401 key Default keysym GNOME does
F13 XF86Tools opens Settings
F14 XF86Launch5
Help (F15) XF86Launch6
Do (F16) XF86Launch7
F17 XF86Launch8
F18 XF86Launch9
F19 none
F20 XF86AudioMicMute mutes the microphone

GNOME acts on F13 and F20 before any application sees them, so veetee can't fix this on its own. The xkb option elkay:fkeys gives all eight keys the keysyms F13–F20, and veetee's default keymap already binds those.

Install

host/linux/install-xkb.sh

This copies xkb/ to ~/.config/xkb/, where libxkbcommon looks for user rules, and adds elkay:fkeys to GNOME's xkb-options, keeping any options already set. On other desktops, run it and then enable the option in the keyboard settings.

The option applies to every keyboard. That's harmless: few PC keyboards have F13–F20, and the ones that do then send F13–F20 too.

Remove

gsettings reset org.gnome.desktop.input-sources xkb-options   # or remove just elkay:fkeys
rm ~/.config/xkb/symbols/elkay ~/.config/xkb/rules/evdev

Testing without the keyboard

xkb/ was checked by compiling evdev / pc105 / us keymaps with libxkbcommon, with and without the option. Keycodes FK13–FK20 resolve to F13–F20 only with it. The rules file includes the system rules first: rules apply in file order, and the option has to come after inet(evdev) to override it.