Last year I've bought a mechanical keyboard because I was annoyed by the unappealing feedback of the laptop keyboard. Also, since the laptop chassis and its touchpad both already show early signs of wear (both cosmetic and physical) just after about two years of intense everyday day.
I was hoping these parts were more durable in a Lenovo Thinkpad. The years of the X220 are well in the past, unfortunately. Therefore I've decided I'd go back to a "classic" setup with keyboard + external mouse (which I don't use often).
I am a longtime fan of mechanical keyboards, I have two IBM Model M plus another one (forgot which brand). The Model M is gorgeous but honestly I find a prolonged use exhausting, both physically (it's huge) and mentally (it's loud). Not to mention that it is strictly forbidden in any working environment of the XXI century. This kind of poetry is also a relic of the previous century, apparently.
So I've tried finding a compromise with a Cherry MX brown from a Chinese vendor a friend of mine suggested (he had bought one and demoed it for me). I was convinced by the really good price (about 120 USD is a bargain compared to other mechanical keyboards) the sturdy look and having my friend-as-guinea-pig tested it before me. The keyboard in question is the Keychron K2.
After a few months of usage, I now have a clear picture of the product and the company, so here's some thoughts.
I won't repeat the tech specs from the website, let's just summarize the keypoints:
- Cherry MX brown switches
- USB-C and Bluetooth 5.0 connections
- QWERTY layout, ~70% size
- Proprietary blob firmware
This keyboard (like many reduced layouts) has by design some missing keys. In
this case two important keys: the Insert
and the PrintScreen
are missing. I
had realized this detail only when I receveid it and cursed against my being an
idiot.
§ Good customer service
The company replies reasonably fast to inquiries and tries to work out problems with the customer, they're not dismissive (looks like to be a small company). Strangely, they provide support on ... facebook (wtf?!) by using a group where users exchange tips and ask questions. Luckily someone thought to at least create a Reddit forum. But seriously, facebook?!
§ Shipment and packaging
The shipment and delivery was ok, minus the usual wrinkles when receiving stuff from China: the tracking starts at the origin, follows the package until it leaves the continent, disappears for days in a black hole while traversing the Plateau of Leng to suddenly appear at your door without any notification from the courier.
§ It works on Linux by "chance"
The official support is for Win/MacOS/Android/iPhone, the instructions are Apple-style (a thin leaflet explaining the "happy paths" and some turn-it-off-then-on kind of troubleshooting) so I had to figure out some stuff by myself or with the help of other Linux users. I have contacted the company to push for a better Linux support but they politely declined to release more specs or to help me figure out some low-level stuff I was investigating. This does not mean that it could stop working on Linux at some point, just that the hacking is pretty limited for a non-expert hacker.
The Apple-centric design is also visible in the keys layout: the last row with Ctrl, Modifier and Super are arranged like an Apple keyboard.

This is really annoying because switching from one keyboard to the other needs some time to adjust. And in that row, there are keys I use like 1000 times a day! When you're in Emacs, clicking Alt instead of Control it's dangerous and will drive you nuts. Every. Single. Time.
To a certain extend, this can be however circumvented with software :) and that's where the fun begins.
§ XKB, here be dragons
XKB is an X11 module (?) extension (?) whatever reading the incoming scancodes
from the keyboard and translating them into keystrokes. This XKB thing is the
most awkward and retrocomputing thing I saw since the time I was playing with a
Motorola 68000 CPU. Just scroll the documentation and try to make sense
of it.
It's obscure and hostile but it's what we have on Linux to be able to
use any input device, so luckily Sway (the window manager / Wayland composer I
use) supports it. The maintainer of libinput has some interesting
writeups on how to deal with this monster, allow me to quote
him on that:
Now, I fully agree that this is cumbersome, clunky and feels outdated. This is
easy to fix, all that is needed is for someone to develop a better file format,
make sure it's backwards compatible with the full spec of the XKB parser (the
above is a fraction of what it can do), that you can generate the old files
from the new format to reduce maintenance, and then maintain backwards
compatibility with the current format for the next ten or so years. Should be a
good Google Decade of Code beginner project.
Long story short, by using these strange levers, I could customize the scancodes remapping them to match the keystrokes I wanted. I won't explain the following snippets because it would take too long. I'll paste them here just for teh lulz.
-
First of all, I have replicated a customization that I cannot live without: the CapsLock as another Control key.
-
The missing
Insert
key was replaced by remappingShift+Delete
:default partial alphanumeric_keys xkb_symbols "basic" { include "us" name[Group1] = "Keychron"; key <DELE> { [ Delete, Insert ] }; <---
the line pointed by the arrow does the trick. This also illustrates how hostile the syntax is.
-
The
Control
andModifier
keys are switched (Apple design tax), the code snippet to fix it is even funnier.key <LALT> { [ Super_L, Super_L, Super_L, Super_L, Super_L ] }; key <LWIN> { [ Alt_L, Alt_L, Alt_L, Alt_L, Alt_L ] };
The reason why I repeat 5 times the mapping will be revealed in the Book of Revelations.
-
The missing
PrintScreen
is replaced by sacrificingRight Alt
(which I think I've never used in a US American layout).key <RALT> { [ Print, Print, Print, Print, Print ] };
Everything is noted down in excruciating detail in my dotfiles on Sourcehut.
Then at some point I realized there's a tiny firmware bug. The USB-C and the Bluetooth controllers expose a slightly different device name. This got me scratching my head wondering why the Keychron worked when connected via Bluetooth and not via USB.
Here's what Sway says about the keyboard when connected via USB and then Bluetooth: can you spot the difference? :)
# Keychron K2 via USB
$ swaymsg -t get_inputs
Input device: Keychron Keychron K2
Type: Keyboard
Identifier: 1452:591:Keychron_Keychron_K2
Product ID: 591
Vendor ID: 1452
Active Keyboard Layout: English (US)
Libinput Send Events: enabled
# Keychron K2 via Bluetooth
$ swaymsg -t get_inputs
Input device: Keychron K2 Keyboard
Type: Keyboard
Identifier: 1452:591:Keychron_K2_Keyboard
Product ID: 591
Vendor ID: 1452
Active Keyboard Layout: English (US)
Libinput Send Events: enabled
The USB Identifier
field has a typo (lol). The xkb
reads the device by its
name, so in my config I was just reading one of them. I had to
duplicate the mappings to also have xkb
read the other device.
I had reported this to Keychron but received no answer. I suspect that my mails now go straight to /dev/null :)
§ Using the keyboard
After having fun learning some 30 years old sort-of-DSL, I could finally use the keyboard without feeling that weird moment of "adjustment" when coming from my laptop keyboard. The keys are now more or less where I expect them to be.
The sound is great, typing on it gives a lovely feedback without being annoying. The weight makes the keyboard very stable on the surface, the keys looks solid. The aluminium surface of the external closure adds to the feel of a solid piece of hardware. The closure is removable using a Torx screwdriver, so I think it is also serviceable. It's also compact so I can bring it everywhere. On Bluetooth connection, the battery lasts a couple of days of intense use.
One more complaint, though, is that the Fn
keys (from F5 to F9) are only
partially lid, so when I turn its light on I don't read the labels very well.

To see and hear the keyboard in action, please go to one of the many online reviews with better camera and microphone I can possibly have.
§ Conclusions
Overall, I like it very much. I think I'll keep it for a long while.
But I've learned a couple of things to keep in mind for the next one:
- Definitively buy a keyboard with a QMK firmware, they're more customizable. Enough with these proprietary blobs.
- Look carefully at the missing keys on a reduced layout keyboard!! I don't care
about the numpad, but damn the missing
Insert
forces me to look at the keyboard, that's dumb.