The K811 is a hot-swappable mechanical keyboard sold on Aliexpress. As it has a joystick and a thumbwheel, it is ideal as a simple but effective PTZ controller (camera shortcuts can be mapped onto keys or side buttons).
Driver Download: K811 Driver (ZIP)
User Manual: K811 User Manual (PDF)
These are the button events as captured with evtest on Ubuntu 25.04 on September 7, 2025, and re-verified on Ubuntu 25.10 in April 2026 — every mapping below was unchanged between captures, so the firmware defaults appear stable across hosts and over time.
On Linux the K811 enumerates as a composite HID device under VID:PID 5566:000a, advertising itself as "YJS MicroChip Mechanical Keyboard" (YJS MicroChip is the HID chipset supplier, not the device brand). Detect it with:
lsusb | grep 5566:000aEvent-node numbers (/dev/input/eventN) are not stable across reboots or hosts. Use the /dev/input/by-id/ symlinks instead — these resolve by device serial and interface and remain stable:
| Role in this document | Stable path |
|---|---|
| Main keys + joystick (event0 below) | /dev/input/by-id/usb-YJS_MicroChip_Mechanical_Keyboard_*-event-kbd |
| Side / knob / media keys (event1 below) | /dev/input/by-id/usb-YJS_MicroChip_Mechanical_Keyboard_*-event-if01 |
| Mouse wheel (event2 below) | /dev/input/by-id/usb-YJS_MicroChip_Mechanical_Keyboard_*-if01-event-mouse |
(The * is the device's per-unit serial, e.g. 5B3A101561Z2.)
The joystick is the single most counter-intuitive thing about this device. Even though:
- the product listing describes it as a "game joystick which allows the computer cursor to move", and
- the mouse HID interface advertises
REL_XandREL_Ycapabilities in its evtest capability dump,
the default firmware mapping does not use either of those. Pushing the joystick emits plain arrow keys (KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT) on the keyboard interface (event0 / -event-kbd), with standard keyboard autorepeat while held.
Practical consequences:
- You can bind the joystick like any arrow-key input. No joystick/gamepad library needed, no mouse-cursor behaviour to suppress.
- If you want cursor-like behaviour (REL_X / REL_Y) you would need to reflash the mapping via the vendor Windows config tool — default firmware will not produce it.
- On a running desktop session the joystick will move text cursors, scroll lists, and interact with anything keyboard-focused unless you exclusively grab
-event-kbd(which would also kill the 19 keypad keys, so rarely what you want).
- EV_KEY: Keyboard and button press events (type 1)
- EV_REL: Relative movement events like mouse wheel (type 2)
- EV_MSC: Miscellaneous events including scan codes (type 4)
- Each key press generates both press (value 1) and release (value 0) events
- Mouse wheel events include both standard resolution (REL_WHEEL) and high resolution (REL_WHEEL_HI_RES) data
- Scan codes are hardware-specific identifiers for each key
- Key codes are Linux input subsystem standard codes (Ubuntu Linux)
Event 0 — /dev/input/by-id/usb-YJS_MicroChip_Mechanical_Keyboard_*-event-kbd
Event 0 — same interface as the main keys. Emits arrow keys, not mouse movement or joystick axes. See "Key behaviour gotcha" above.
Event 2 — /dev/input/by-id/usb-YJS_MicroChip_Mechanical_Keyboard_*-if01-event-mouse
Event 1 — /dev/input/by-id/usb-YJS_MicroChip_Mechanical_Keyboard_*-event-if01
| Event Device | Key/Control | Key Code | Scan Code | Event Type | Description |
|---|---|---|---|---|---|
| event0 (Main Keys) | ESC | 1 | 70029 | EV_KEY | Escape key |
| event0 | W | 17 | 7001a | EV_KEY | Letter W |
| event0 | E | 18 | 70008 | EV_KEY | Letter E |
| event0 | R | 19 | 70015 | EV_KEY | Letter R |
| event0 | T | 20 | 70017 | EV_KEY | Letter T |
| event0 | DELETE | 111 | 7004c | EV_KEY | Delete key |
| event0 | TAB | 15 | 7002b | EV_KEY | Tab key |
| event0 | A | 30 | 70004 | EV_KEY | Letter A |
| event0 | S | 31 | 70016 | EV_KEY | Letter S |
| event0 | D | 32 | 70007 | EV_KEY | Letter D |
| event0 | ENTER | 28 | 70028 | EV_KEY | Enter/Return key |
| event0 | LEFT SHIFT | 42 | 700e1 | EV_KEY | Left Shift modifier |
| event0 | Z | 44 | 7001d | EV_KEY | Letter Z |
| event0 | X | 45 | 7001b | EV_KEY | Letter X |
| event0 | C | 46 | 70006 | EV_KEY | Letter C |
| event0 | LEFT CTRL | 29 | 700e0 | EV_KEY | Left Control modifier |
| event0 | LEFT ALT | 56 | 700e2 | EV_KEY | Left Alt modifier |
| event0 | SPACE | 57 | 7002c | EV_KEY | Spacebar |
| event0 | KEYPAD DOT | 83 | 70063 | EV_KEY | Numeric keypad dot/period |
| event0 (Joystick) | RIGHT ARROW | 106 | 7004f | EV_KEY | Right arrow/directional key |
| event0 | LEFT ARROW | 105 | 70050 | EV_KEY | Left arrow/directional key |
| event0 | UP ARROW | 103 | 70052 | EV_KEY | Up arrow/directional key |
| event0 | DOWN ARROW | 108 | 70051 | EV_KEY | Down arrow/directional key |
| event1 (Side Keys) | VOLUME UP | 115 | c00e9 | EV_KEY | Volume increase button |
| event1 | VOLUME DOWN | 114 | c00ea | EV_KEY | Volume decrease button |
| event1 | PREVIOUS SONG | 165 | c00b6 | EV_KEY | Media previous track |
| event1 | NEXT SONG | 163 | c00b5 | EV_KEY | Media next track |
| event1 | PLAY/PAUSE | 164 | c00cd | EV_KEY | Media play/pause toggle |
| event2 (Mouse Wheel) | WHEEL UP | - | - | EV_REL | Mouse wheel scroll up (REL_WHEEL value: 1) |
| event2 | WHEEL DOWN | - | - | EV_REL | Mouse wheel scroll down (REL_WHEEL value: -1) |


