Customizing EurKey on Ubuntu

Published: (February 23, 2026 at 09:53 AM EST)
3 min read
Source: Dev.to

Source: Dev.to

This has been tested in Ubuntu 24.04.

When you need to type in different languages, you can configure your OS to handle their respective layouts. Often, when switching layouts, more than just the letters change: punctuation and shifted keys can change too, and you need to continuously adjust (where is the open parenthesis? Shift 9 or someplace entirely different? What happens if you hit the key right of L? etc.).

I recently switched to a ZSA Voyager programmable keyboard and got tired of continuously mistyping special characters and furiously switching keyboard layouts. I needed a single layout that would let me type everything! EurKey could be the answer, but despite its name EurKey does not handle all the languages spoken in Europe.

I needed to support Italian, English and German (which are supported) and Polish (which is not). I also do programming. My solution was to create a new OS layout, based on EurKey. This is not portable, but it makes my life easier most of the time.

Situation

On my own Ubuntu PC

  • Everything works.

On a PC with EurKey

  • Set layout to EurKey. Italian, German and English work; Polish does not work.

On a PC without EurKey

  • Set language to English. Italian, German and Polish do not work.

Resulting layout

The layout was created using Oryx, the ZSA configuration utility (easy to reproduce on other programmable keyboards):

  1. Get the EurKey layout (print it if you prefer) and choose a few keys on the AltGr layer you will never use (for me, the first keys on the Q row are fine).
  2. Override those keys with the characters you need. Decide, for each key, what it should produce when hit with AltGr.

Example key mapping

KeyKey + AltGr will produce
Qą
Wę
Eó
Rć

Installation steps

Follow the tutorial (or the newer version linked there):

1. Create a new XKB symbols file

Create /usr/share/X11/xkb/symbols/euspecial with the following content:

default partial alphanumeric_keys modifier_keys
xkb_symbols "basic"  {
    include "eu"

    key  { [ q, Q, aogonek, Aogonek ] };
    key  { [ w, W, eogonek, Eogonek ] };
    key  { [ e, E, oacute,  Oacute  ] };
    key  { [ r, R, cacute,  Cacute  ] };
    key  { [ t, T, zabovedot, Zabovedot ] };
    key  { [ y, Y, zacute,  Zacute  ] };
    key  { [ u, U, nacute,  Nacute  ] };
    key  { [ i, I, lstroke, Lstroke ] };
    key  { [ o, O, sacute,  Sacute  ] };

    include "level3(ralt_switch)"
};

This changes the behavior of keys Q, W, EO on the first row.

2. Register the new layout

Edit /usr/share/X11/xkb/rules/evdev.extras.xml and add a new section alongside the existing ones, inside the element:


  
    euspecial
    
    eu
    EurKEY (Special)
    
      US
    
    
      cat
      dan
      eng
      est
      fao
      fin
      deu
      ell
      gsw
      ita
      lav
      lit
      nld
      nor
      por
      spa
      swe
    
  

3. Activate the layout

After saving the files, you should see a new “EurKEY (Special)” entry in your keyboard layout list. If it does not appear, restart your computer (or reload the XKB configuration).

Now you can type Italian, English, German and Polish characters—including the special characters you mapped—without constantly switching layouts.

0 views
Back to Blog

Related posts

Read more »

A Discord Bot that Teaches ASL

This is a submission for the Built with Google Gemini: Writing Challengehttps://dev.to/challenges/mlh/built-with-google-gemini-02-25-26 What I Built with Google...