ibus

IBus (Intelligent Input Bus) is an input method framework for Linux, allowing you to type Vietnamese, Japanese, Chinese, Korean, emoji... on any application.

Simply put:

IBus is a intermediary software between the keyboard and the application, helping you type complex characters, for example “hello friend” instead of "chaof baajn".

IBus consists of 3 main components:

Components Role
IBus daemon Runs in the background, processes keyboard signals and sends them to the application
Input engines Each type of typing (unikey, mozc, anthy...) is an "engine" plugged into IBus
Frontend UI (suggestion bar, settings) for you to choose typing style, layout, etc.

Example when typing Vietnamese with IBus-Unikey:

  1. You type xinchao
  2. IBus-daemon receives the signal
  3. Engine IBus-Unikey processes, transforms xinchaoxin chao
  4. Applications such as Firefox, Gedit receive the string "xin chao" from D-Bus

Common input engines used with IBus:

Engine Language Package
ibus-unikey Vietnamese ibus-unikey (PPA/Arch AUR)
ibus-mozc Japanese ibus-mozc
ibus-anthy Japanese ibus-anthy
ibus-table Han tu… ibus-table + specific table

Useful commands with IBus:

# Check if IBus is running

ibus engine

# Select Unikey engine

ibus engine unikey

# Restart IBus daemon
ibus restart

Other frameworks besides IBus:

Framework Notes
IBus Most popular default, good compatibility
Fcitx More flexible, good for Chinese, Japanese
uim Older, less popular

Problems with Snap apps:

Because Snap limits communication between app and daemon (like D-Bus), IBus sometimes doesn't work in Snap-installed apps (like Brave, Slack...).