$linuxjunkies
>

Esperanto and Multilingual Support on Linux

Add Esperanto locale, keyboard layout, and input methods on Linux. A practical walkthrough covering GNOME, KDE, Wayland, TTY, and Fcitx5 that applies to any language.

BeginnerUbuntuDebianFedoraArch8 min readUpdated June 7, 2026

Before you start

  • A working Linux desktop with GNOME, KDE, or another graphical environment
  • sudo/root access to edit system locale files
  • A terminal emulator and font that supports Unicode (UTF-8)

Linux has excellent multilingual support baked in at every layer — locale databases, keyboard layout files, and input method frameworks. Esperanto makes a great worked example because it uses a Latin-based alphabet with six unique characters (ĉ, ĝ, ĥ, ĵ, ŝ, ŭ) that sit outside the basic ASCII range. The same steps apply to dozens of other languages. By the end you will have the correct locale, a working keyboard layout, and an input method as a fallback.

Step 1: Understand What You Are Configuring

Three independent layers control multilingual support:

  • Locale — tells the system how to format dates, numbers, and text sorting for a language/region pair (e.g., eo for Esperanto).
  • Keyboard layout — maps physical key presses to characters. For Esperanto, the standard layout is eo in the X keyboard database (XKB). A popular alternative is the h-system overlay that remaps digraphs (cx → ĉ, gx → ĝ, etc.).
  • Input method framework — software like IBus or Fcitx5 that intercepts key sequences and produces complex characters, useful for languages needing context-sensitive composition.

You do not need all three for every use case. Most Esperanto speakers only need the keyboard layout. Configure the locale only if you need Esperanto-language system messages or sorting rules.

Step 2: Generate and Enable the Locale

The Esperanto locale identifier is eo (no country suffix needed, though eo.UTF-8 is the practical form).

Debian and Ubuntu

Edit /etc/locale.gen and uncomment the line for eo.UTF-8, then regenerate:

sudo sed -i 's/^# *eo.UTF-8/eo.UTF-8/' /etc/locale.gen
sudo locale-gen

To make it your system default (unusual — most users keep English as default and add Esperanto for specific apps):

sudo update-locale LANG=eo.UTF-8

For a single user session only, add to ~/.profile or export before launching the app:

export LANG=eo.UTF-8

Fedora and RHEL/Rocky

DNF-based systems use glibc-langpack-eo:

sudo dnf install glibc-langpack-eo

Set it system-wide with localectl:

sudo localectl set-locale LANG=eo.UTF-8

Arch Linux

Uncomment eo.UTF-8 UTF-8 in /etc/locale.gen, generate, and set:

sudo sed -i 's/^#eo.UTF-8/eo.UTF-8/' /etc/locale.gen
sudo locale-gen
echo 'LANG=eo.UTF-8' | sudo tee /etc/locale.conf

Verification

locale -a | grep eo

You should see eo.utf8 (Linux normalises the name) in the output.

Step 3: Add the Esperanto Keyboard Layout

The eo XKB layout puts the accented letters on the keys you would expect: ^ acts as a dead key, so ^ then c produces ĉ. There is also the epo variant which uses the h-system digraph approach.

Command-Line (all distros, Wayland and X11)

localectl writes to /etc/vconsole.conf and the X11/Wayland compositor config atomically:

sudo localectl set-x11-keymap us,eo pc105 ,

This sets US English as the primary layout and Esperanto as a second layout. Swap between them with your desktop's keyboard shortcut (usually Super+Space or Alt+Shift).

To set Esperanto as the only layout:

sudo localectl set-x11-keymap eo pc105

GNOME (Wayland or X11)

Open Settings → Keyboard → Input Sources. Click +, search for "Esperanto", and add it. Use the system language switcher in the top bar to toggle.

The same configuration via gsettings (useful in scripts):

gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us'), ('xkb', 'eo')]"

KDE Plasma (Wayland or X11)

Go to System Settings → Input Devices → Keyboard → Layouts. Enable "Configure layouts", click Add, choose Esperanto (eo). KDE writes this to ~/.config/kxkbrc and the Wayland compositor picks it up immediately.

Virtual Console (TTY)

The TTY uses a separate keymap. Install the console fonts and set the map:

# Debian/Ubuntu
sudo apt install console-data
sudo loadkeys esperanto

# Persistent (Debian/Ubuntu)
echo 'KEYMAP=esperanto' | sudo tee -a /etc/vconsole.conf

On Fedora/Arch, localectl set-keymap esperanto updates /etc/vconsole.conf directly.

Step 4: Set Up an Input Method Framework (Optional but Useful)

Input method frameworks (IMFs) are essential for CJK languages but also solve the Esperanto problem elegantly via the X-system: type cx to get ĉ without switching layouts. IBus and Fcitx5 are the two mainstream choices; Fcitx5 has better Wayland support as of 2024.

Install Fcitx5

# Debian/Ubuntu
sudo apt install fcitx5 fcitx5-configtool

# Fedora
sudo dnf install fcitx5 fcitx5-configtool

# Arch
sudo pacman -S fcitx5 fcitx5-configtool fcitx5-gtk fcitx5-qt

Enable Fcitx5 at Login

Add these environment variables to ~/.profile (for X11 sessions) or /etc/environment (system-wide, works for Wayland too):

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

Then enable the systemd user service so it starts with your session:

systemctl --user enable --now fcitx5.service

Configure the Esperanto Input Method

Run fcitx5-configtool, click + in the Input Method panel, search for "Esperanto" or add the Keyboard - Esperanto entry. The built-in X-system addon converts cx→ĉ, gx→ĝ, hx→ĥ, jx→ĵ, sx→ŝ, ux→ŭ on the fly as you type in any application.

Step 5: Verify Everything Works

Open a terminal and test character output directly:

echo "Saluton, mondo! ĉ ĝ ĥ ĵ ŝ ŭ"

Expected output:

Saluton, mondo! ĉ ĝ ĥ ĵ ŝ ŭ

Check the active locale:

locale

Check the active keyboard layout from the X server (X11) or via localectl:

localectl status

The output will show your X11 keymap settings. If Fcitx5 is running, verify its status:

systemctl --user status fcitx5.service

Troubleshooting

  • Characters appear as boxes or question marks: Your terminal or font does not support the Unicode code points. Install a comprehensive font: sudo apt install fonts-noto / sudo dnf install google-noto-sans-fonts / sudo pacman -S noto-fonts.
  • Layout switch does nothing under Wayland: Some compositors (especially minimal ones like Sway or Hyprland) ignore localectl and require their own config blocks. In Sway, add input * xkb_layout "us,eo" to ~/.config/sway/config.
  • Fcitx5 does not intercept keystrokes in GTK4 apps on Wayland: GTK4 dropped legacy IM modules. Install fcitx5-gtk and ensure you are running Fcitx5 version 5.0.23 or later, which uses the text-input-v3 Wayland protocol instead.
  • eo.UTF-8 locale is missing after reboot (Debian/Ubuntu): Check that /etc/locale.gen is uncommented and that locale-gen ran without errors. The locales package must be installed (sudo apt install locales).
  • Console keymap reverts: If /etc/vconsole.conf is managed by a config management tool or cloud-init, your manual edits may be overwritten on next boot. Set the keymap through whatever tool owns that file.
tested on:Ubuntu 24.04Fedora 40Arch 2024.06.01Debian 12

Frequently asked questions

Do I need the Esperanto locale if I just want to type Esperanto characters?
No. The locale controls formatting and system messages; the keyboard layout controls character input. You can type ĉ, ĝ, ŝ, etc. perfectly well with just the eo XKB layout and no locale change at all.
What is the difference between the eo keyboard layout and the h-system?
The standard eo layout uses a dead circumflex key so ^ then c produces ĉ. The h-system is a convention where cx, gx, sx etc. are typed as digraphs — this is handled by input method software like Fcitx5 rather than a different XKB layout file.
Will this work under Wayland as well as X11?
Yes. XKB layouts are used by both Xorg and Wayland compositors. Fcitx5 version 5.0.23+ supports the text-input-v3 Wayland protocol. The main exception is minimal compositors like Sway that require their own input configuration blocks.
Can I add multiple languages and switch between them?
Yes. Pass a comma-separated list to localectl (e.g., us,eo,de) and your desktop environment will let you cycle through them with a keyboard shortcut. GNOME and KDE both show the current layout in the top bar or system tray.
IBus or Fcitx5 — which should I use?
Fcitx5 is generally preferred in 2024 because it has more complete Wayland support via text-input-v3. IBus works fine on X11 and integrates well with GNOME on Wayland through a GNOME Shell extension, but Fcitx5 is the safer choice for mixed or Wayland-only setups.

Related guides