Posted on

Since December I am on Linux with my main machine again. I always wanted to do a rant post about the year of the linux desktop but instead I am posting something useful.

I am using US keyboards on my laptop and whenever I have to type some german umlauts I mostly just don't care. However for the rare cases when I care (writing serious german emails) I was super annoyed. I was mostly opening this page here https://learn-german-easily.com/german-umlauts and copy-pasted the characters. Obviously I tried avoiding using umlauts all together because this is super annoying.

Today I finally fixed it and it was a lot easier than I thought.

Apparently xkb (X Keyboard Extension) already provides everything you need. When you enable the xkb variant "altgr-intl" you are able to type special characters using the so called "Compose" Key.

Most examples you find will tell you how to configure it in X11.

My setup is using wayland via sway. My ~/.config/sway/config:

[...]

input "1:1:AT_Translated_Set_2_keyboard" {
    xkb_layout us
    xkb_variant altgr-intl
    xkb_options compose:ralt
}

input "1241:41265:HOLTEK_USB-HID_Keyboard" {
    xkb_layout us
    xkb_variant altgr-intl
    xkb_options compose:ralt
}

This will enable everything for both of the keyboards (I am using an external keyboard most of the time).

To find out the identifier do the following:

[mop@konrad-georg ~]$ sudo libinput debug-events

This will print out a list of input devices. When you press a key you will see an eventid which you can map to the input device:

[...device list]
-event4   DEVICE_ADDED     AT Translated Set 2 keyboard      seat0 default group13 cap:k
[...more devices]
[...pressing a key]
-event4   KEYBOARD_KEY      +1.31s	*** (-1) pressed

Now we know the name of our keyboard. Unfortunately sway needs the identifier.

[mop@konrad-georg ~]$ swaymsg -t get_inputs
[...]
Input device: AT Translated Set 2 keyboard
  Type: Keyboard
  Identifier: 1:1:AT_Translated_Set_2_keyboard
  Product ID: 1
  Vendor ID: 1
  Active Keyboard Layout: English (intl., with AltGr dead keys)
  Libinput Send Events: enabled
[...]

Finally after restarting sway we can type german umlauts again:

Press RAlt, Release RAlt, Press a, Release a, Press ", Release " => ä
Press RAlt, Release RAlt, Press o, Release o, Press ", Release " => ö
Press RAlt, Release RAlt, Press u, Release u, Press ", Release " => ü
Press RAlt, Release RAlt, Press s, Release s, Press s, Release s => ß
Press RAlt, Release RAlt, Press C, Release C, Press =, Release = => €

There is probably more :)