The scenario
You just switched your system language to English, but you need to type in Japanese, Chinese, or Korean for work. You installed the language packs, but the keyboard still only outputs ASCII. You try pressing Super+Space and nothing happens. The input method menu is missing from the system tray. You are staring at a terminal or a text editor, and the characters you need simply will not appear.
How input methods actually work on Fedora
Fedora does not bake multilingual input directly into the kernel. The kernel only knows about hardware scan codes and basic keymaps. Multilingual input happens in userspace through an Input Method framework. Think of the framework as a translator sitting between your keyboard and the application. You press keys, the framework intercepts them, runs them through a language engine, and then feeds the final Unicode characters to the program.
The framework communicates with applications through environment variables. GTK applications look for GTK_IM_MODULE. Qt applications look for QT_IM_MODULE. Older X11 applications fall back to XMODIFIERS. If those variables are missing or pointing to the wrong framework, applications ignore the input method entirely and route keystrokes straight to the system keyboard layout.
Fedora ships with IBus as the default framework. It is tightly integrated with GNOME and works out of the box for most users. Fcitx5 is the alternative. It started in the KDE world but now runs everywhere. It handles complex CJK engines better and offers a more modular configuration interface. Both frameworks rely on a background daemon that listens for keystrokes and manages the candidate window. The daemon must start before your desktop session does, or applications will launch without input method support.
Check your environment variables before you install anything. A leftover variable from a previous setup will break the new framework. Run env | grep IM_MODULE in a terminal. Clear conflicting entries before proceeding.
Choosing your framework
Use IBus when you are running GNOME or a lightweight desktop and want zero configuration. Use Fcitx5 when you need advanced engine management, custom hotkeys, or are running KDE Plasma. Use the system settings GUI when you only need one or two standard languages. Use the terminal when you are scripting a deployment or fixing a broken session. Stay on the default IBus if you do not have a specific reason to switch.
Installing and activating the framework
You need the core framework package and the specific language engines. Fedora splits these into separate packages to keep the base system lean. Run the installation commands for the framework you chose.
Here is how to install IBus along with common CJK engines.
sudo dnf install ibus ibus-libpinyin ibus-anthy ibus-kkc
# ibus provides the daemon and GTK integration
# ibus-libpinyin handles Simplified Chinese
# ibus-anthy handles Japanese
# ibus-kkc handles Korean
Here is how to install Fcitx5 with equivalent engines.
sudo dnf install fcitx5 fcitx5-chinese-addons fcitx5-mozc fcitx5-korean
# fcitx5 provides the core daemon and GTK/Qt plugins
# fcitx5-chinese-addons includes Pinyin and Zhuyin
# fcitx5-mozc provides Google Japanese input
# fcitx5-korean handles Hangul
The packages install the binaries, but your current login session does not know about them. You must set the environment variables that route input events to the correct framework. These variables belong in your shell profile or your desktop environment's session settings. Do not put them in ~/.bashrc. That file runs for every non-interactive shell and will break scripts. Put them in ~/.profile or ~/.xprofile so they load once per graphical session.
Here is how to set the variables for IBus.
echo 'export GTK_IM_MODULE=ibus' >> ~/.profile
echo 'export QT_IM_MODULE=ibus' >> ~/.profile
echo 'export XMODIFIERS=@im=ibus' >> ~/.profile
# GTK_IM_MODULE tells GTK apps to use IBus
# QT_IM_MODULE tells Qt apps to use IBus
# XMODIFIERS is a legacy fallback for older X11 apps
Here is how to set the variables for Fcitx5.
echo 'export GTK_IM_MODULE=fcitx' >> ~/.profile
echo 'export QT_IM_MODULE=fcitx' >> ~/.profile
echo 'export XMODIFIERS=@im=fcitx' >> ~/.profile
# Fcitx5 uses 'fcitx' as the module name for compatibility
# The daemon name is fcitx5, but the IM module identifier stays 'fcitx'
# XMODIFIERS ensures X11 fallback applications route correctly
Log out and log back in. The variables must be active before any application starts. If you are using Wayland, the desktop environment usually handles these variables automatically through its session files. The manual ~/.profile method is a safety net for X11 or custom window managers. Wayland compositors sometimes bypass the X11 input method protocol entirely. They rely on the portal API or direct GTK/Qt integration. The environment variables still apply, but the system tray indicator may not appear. Trust the keystrokes over the tray icon.
Configuring engines and hotkeys
The framework is running, but it does not know which languages to load or which key combination to switch them. You need to open the configuration tool and add the engines.
For IBus, run the setup utility from a terminal or your application menu.
ibus-setup
# Opens the IBus preferences window
# Run this after logging in so the daemon is already active
Click the Input Method tab. Press the Add button. Search for your language. Select the engine and press Add. Go to the General tab and check the box for Show preedit text in the application window. Set the Next input method shortcut to Super+Space or Ctrl+Space. Close the window. The changes apply immediately.
For Fcitx5, run the configuration tool.
fcitx5-configtool
# Launches the Fcitx5 configuration interface
# Requires the fcitx5-gtk and fcitx5-qt packages for GUI integration
Click the Add button. Find your language in the list. Add it. Go to the Global Options tab. Set the Trigger Input Method shortcut to Super+Space. Enable Show Preedit Text in Application Window. Close the tool. Fcitx5 reloads its configuration automatically.
Configuration files live in ~/.config/ibus/ or ~/.config/fcitx5/. Do not edit them manually unless you are debugging. The GUI tools write JSON or XML structures that break easily with manual edits. Let the tools handle the syntax.
Verifying the setup
Open a text editor or a terminal. Press your shortcut key. You should see a small indicator in the system tray or a preedit window showing the current input mode. Type a few characters. If the framework is working, you will see the candidate window or the preedit text. Press Enter or Space to commit the characters.
Here is how to check the active environment variables from a running session.
echo $GTK_IM_MODULE $QT_IM_MODULE $XMODIFIERS
# Prints the current IM module settings
# Should output 'ibus ibus @im=ibus' or 'fcitx fcitx @im=fcitx'
Here is how to verify the daemon is actually running.
ps aux | grep -E 'ibus-daemon|fcitx5'
# Lists the active input method processes
# ibus-daemon runs as a user service
# fcitx5 runs as a standalone process
If the output matches your configuration, the framework is active. If the variables are empty, your profile did not load correctly. Check your desktop environment's environment variables settings. If the daemon is missing, start it manually and check the logs. Run systemctl --user status ibus or systemctl --user status fcitx5 to see if systemd is managing the service. Fedora runs input method daemons as user services, not system services. Check the user slice, not the system slice.
Common pitfalls and error patterns
Applications sometimes ignore the environment variables. This happens when the application was launched before the variables were set, or when a desktop launcher overrides them. Check the .desktop file in ~/.local/share/applications/. Look for env wrappers or hardcoded GTK_IM_MODULE values. Remove them. Let the session variables take precedence.
You might see a candidate window that appears behind other windows. This is a known stacking issue on some compositors. Add the --panel flag to the daemon or adjust the window manager rules to keep the input method tray on top.
If the framework crashes on startup, check the journal. Do not guess. Read the actual error before forcing a reinstall.
Oct 12 14:23:01 fedora ibus-daemon[1234]: GLib-GIO-ERROR: Settings schema 'org.gnome.ibus' is not installed
This error means the DConf schema files are missing or corrupted. Run sudo dnf reinstall ibus to restore them. The package manager will drop the correct .gschema.xml files into /usr/share/glib-2.0/schemas/. Run glib-compile-schemas /usr/share/glib-2.0/schemas/ afterward to rebuild the binary cache. Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/.
Another common issue is conflicting frameworks. If you have both IBus and Fcitx5 installed, the environment variables will fight. Only one framework can claim the input stream at a time. Remove the unused framework or comment out its variables in ~/.profile. Fedora does not merge them.
Wayland sessions sometimes drop the input method indicator from the top bar. This is a compositor limitation, not a framework failure. The input method still works. Press your shortcut and type. The characters will appear. If you need the indicator, switch to X11 or use a desktop environment that supports Wayland input method panels natively.
Run journalctl -xe after a failed login. The x flag adds explanatory text and the e flag jumps to the end. Most sysadmins type journalctl -xeu ibus-daemon muscle-memory style. Read the actual error before guessing.