How to use custom layout on and laptop keyboard (hardware vs software layout)

Just got my Model 01 and so far it has great potential of becoming my main – dare I say endgame? – keyboard! (still getting used to it, which is why typing this is taking more effort)

Where it gets hairy and where I am trying to get help is that I currently use Neo2 and plan to create my own ergonomic layout. So far my external keyboard’s physical layout 99% matched the laptop‘s. But now there is a big difference between the number of keys, as well as their positioning.

My first idea is, of course, that I would like to flash the Model 01 with my custom layout, perhaps with some QWERTZ fallback for gaming and/or lending the keyboard to others.

But then I run into a new problem – the interaction between the signal that the Model 01 output and the operating system’s/desktop’s software layout remapping the signals to other keys.

Is there any way to have Linux (with Plasma) use a software layout for the built-in laptop keyboard, but leave the Model 01 pass through directly?

Or how do others solve this issue?

I suspect a fallback solution could be to have several software layouts in the desktop – at least a “default” (which one is that?) one to replicate 1:1 the laptop keyboard and also let the Model 01 work as programmed, and another one to implement the ergonomic layout to the laptop keyboard.

And in any case, is there no way to make sure that the Model 01 works predictably the same on all machines – regardless if they use QWERTY, QWERTZ, AZERTY, Dvorak, … i.e. how can I make sure when I plug in my Model 01 to some random machine, it will output the layout I programmed it to?

I would do this in two stages - firstly create a software layout that works for your laptop keyboard, using whatever OS tool you like, and then create a firmware layout in the model01 that maps each physical key to the original US English legend of the corresponding laptop key. So for example, say I wanted the key to the right of P (labelled [ on a US English laptop) to be an equals key =, I would first remap in the OS [ to =, and then map the corresponding key on the Model01 (R1C15) to [ (the original legend). That way you can leave the OS settings the same and have both the laptop keyboard and the Model01 keyboard in a correct state.

I am not aware of any way to enforce a given software layout on a random machine by just plugging in a keyboard - all keyboard events must pass through both the Model01 firmware mapping and the OS software mapping. Keyboards do not generate characters, they generate keypress events, and these must be interpreted by the OS.


Hmmm, this seems to be the inverse of the logic that was in my mind so far. But I see how that would make sense.

What still baffles me is whether and how the built-in keyboard influences all this. You provide an example with mapping from a US – I assume ANSI – keyboard, but what if e.g. one laptop is equipped with a Slovenian QWERTZ, another with a US ANSI, and the desktop has no other keyboard?

What I – perhaps falsely – assumed was that all keyboard speak some uniform language to the OS. That is why I hoped that the OS could tell one keyboard apart from another, and that I could simply program it to be plugged into any random box and start clacking.

The keypress events seem to come close to what I hoped, but I suspect not really the same. So I guess there is no way to get a keypress event to output e.g. ö or š directly? It always needs to go through the OS and the OS needs to know/guess what kind of keyboard it is and what layout it should apply?

Keyboards do speak a universal language to the OS, and it goes something like this:

second row, third column, press
second row, third column, release
third row, first column, press
third row, first column, release

Everything else is done in software. The only difference between the keyboards on a Slovenian QWERTZ laptop and a US QWERTY laptop is the paint on the keys. That’s why you have to manually select which keyboard language you want to use when installing an OS for the first time - as far as the computer is concerned all keyboards are identical.

They way the Model01 remaps its keys is by essentially telling white lies to the OS.


Aaaah, that explains a lot. Thanks, this answers my question (although will lead to others) :smiley:

Follow these steps for layout on
1.Activate the Microsoft Keyboard Layout Creator application.
2.Select File > Load Existing Keyboard from the menu.
3.Select the layout you want to change.
4.Before making any changes, select File > Save Source File As to create a backup.

For those of us that have Linux, I assume there must be something like this, but if anyone knows what it is I would be very grateful.

Thanks a lot… :pray:t4:

As with most things in Linux there are a number of different ways to accomplish this based on your preferences. How to Change the Keyboard Layout in Linux - Make Tech Easier is a pretty good reference for some of the most common.

Thanks a lot @admorgan :slight_smile:

In my case, I needed something that allows:

  • the system to work non interactively, and
  • to have different layouts on different keyboards (the one in the laptop and the M100).

I found something with setxkbmap -device id layout and just wrote about it today in another thread Help with inconsistency between Chrysalis and OS levels (M100)

Thanks again and best regards… :smiley: