Summary
I have been trying to configure my input method using fcitx5-configtool, but I am finding the logic completely impenetrable. Let me try to explain what I see and what I'm trying, because I genuinely do not understand what this config presents to me at a level that would allow me to say what works and what doesn't. I think it would be fair to treat this as much a "configuration is impenetrable" bug than anything else. I managed to get a config that does what I want, but only by reading code and trying random edits to the profile file.
Now, the keyboard I have is a Swedish dvorak keyboard. So, my first intuition—I may be thinking about this somehow the wrong way, but input is to me keyboard layout first, not language first—is to find that in the list. I'll try the other way too, later.
Ok, I find an entry named "Keyboard - Swedish - Swedish (Dvorak)", which is the layout I want. I add that to the input method list.
Great. Now, I can type what I want, but the dictionary is in Swedish, not in English, as I'd desire. Luckily, there is a promising sounding Configure button in the middle, but instead of things like language, it has entries that I have hard time understanding like "Page size".
There is also a "Select Layout" button, but it is grayed out. Hmm. Maybe that means I can start from some generic language and change the layout to match what I want?
I find "Keyboard - English (US)". I have, by the way, not been able to figure out why some entries have the language name once, some twice. I assume that has a deep significance that completely escapes me, but I am hoping it means it forces only one, either language or keyboard layout.
But, even with that entry in the left had list, the Select Layout button stays grayed out. In fact, I have not been able to find a situation when it would not be grayed out.
There's also a button "Select system keyboard layout". It shows "Any language", "Swedish" and "Default" for the variant. This sounds promising, albeit I do not understand the difference between a "System keyboard layout" and the first entry in the list. (There is a text saying "Usually you need to put Keyboard or Keyboard - layout name" in the first place. I hoped to find an entry that says just "Keyboard" and that would let me choose layout and language, but there is no such thing, as far as I can tell.)
Ok, great. I choose the Variant: Swedish (Dvorak). And then I change Language to English.
Changing Language to English changes the Layout to Russian.
So, frustrated, I go to read the source code.
By playing around with things and stepping through the code in debugger, I was able to figure out that this snippet does what I want, but I genuinely do not know if it is reachable from the config tool nor if it makes semantic sense besides somehow accidentally working:
[Groups/0]
# Group Name
Name=Default
# Layout
Default Layout=se-dvorak
# Default Input Method
DefaultIM=keyboard-se-dvorak
[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=se-dvorak
[GroupOrder]
0=Default
(I do not know if the groups make sense because I do not know what the groups are. But they seem safe to ignore.)
Now, at least the first input method of the list allows me to type using se-dvorak and speak English (I do not know why it says "keyboard-us", but it works). Except possibly some default, for which I do not know when it gets used. 🙈
Steps to Reproduce
see above
Expected Behavior
I would have hoped that the configuration tool allowed me to change any aspect that is currently wrong, whether language or keyboard layout. I would also have hoped it would explain "group", explain the difference of Keyboard-English and Keyboard-English-English, and that changing my language to English did not change my keyboard layout to Russian.
Output of fcitx5-diagnose command
System Info:
-
uname -a:
Linux poyta 6.12.63 #1-NixOS SMP PREEMPT_DYNAMIC Thu Dec 18 12:55:23 UTC 2025 x86_64 GNU/Linux
-
lsb_release:
lsb_release not found.
-
/etc/lsb-release:
DISTRIB_CODENAME=yarara
DISTRIB_DESCRIPTION="NixOS 26.05 (Yarara)"
DISTRIB_ID=nixos
DISTRIB_RELEASE="26.05"
LSB_VERSION="26.05 (Yarara)"
-
/etc/os-release:
ANSI_COLOR="0;38;2;126;186;228"
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
BUILD_ID="26.05.20251228.c0b0e0f"
CPE_NAME="cpe:/o:nixos:nixos:26.05"
DEFAULT_HOSTNAME=nixos
DOCUMENTATION_URL="https://nixos.org/learn.html"
HOME_URL="https://nixos.org/"
ID=nixos
ID_LIKE=""
IMAGE_ID=""
IMAGE_VERSION=""
LOGO="nix-snowflake"
NAME=NixOS
PRETTY_NAME="NixOS 26.05 (Yarara)"
SUPPORT_URL="https://nixos.org/community.html"
VARIANT=""
VARIANT_ID=""
VENDOR_NAME=NixOS
VENDOR_URL="https://nixos.org/"
VERSION="26.05 (Yarara)"
VERSION_CODENAME=yarara
VERSION_ID="26.05"
-
Desktop Environment:
Cannot determine desktop environment. (NOTE: I use sway)
-
XDG SESSION TYPE:
XDG_SESSION_TYPE='wayland'
-
Bash Version:
BASH_VERSION='5.3.3(1)-release'
Environment:
-
DISPLAY:
DISPLAY=':0'
WAYLAND_DISPLAY='wayland-1'
-
Keyboard Layout:
-
setxkbmap:
WARNING: Running setxkbmap against an Xwayland server
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+se(dvorak)+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
-
xprop:
_XKB_RULES_NAMES(STRING) = "evdev", "pc105", "se", "dvorak", ""
-
Locale:
-
All locales:
C
C.utf8
en_DK.utf8
en_US.utf8
POSIX
-
Current locale:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_DK.UTF-8
LC_TIME=en_DK.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_DK.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_DK.UTF-8
LC_NAME=en_DK.UTF-8
LC_ADDRESS=en_DK.UTF-8
LC_TELEPHONE=en_DK.UTF-8
LC_MEASUREMENT=en_DK.UTF-8
LC_IDENTIFICATION=en_DK.UTF-8
LC_ALL=
-
Directories:
-
Home:
-
${XDG_CONFIG_HOME}:
Environment variable XDG_CONFIG_HOME is not set.
Current value of XDG_CONFIG_HOME is ~/.config (/home/sliedes/.config).
-
Fcitx5 Settings Directory:
Current fcitx5 settings directory is ~/.config/fcitx5 (/home/sliedes/.config/fcitx5).
-
Current user:
The script is run as sliedes (1000).
Fcitx State:
-
executable:
Found fcitx5 at /run/current-system/sw/bin/fcitx5.
-
version:
Fcitx version: 5.1.16
-
process:
Found 2 fcitx5 processes:
2072517 .fcitx5-wrapped
2072963 .fcitx5-config-
-
fcitx5-remote:
fcitx5-remote works properly.
-
DBus interface:
Using dbus-send to check dbus.
Owner of DBus name org.fcitx.Fcitx5 is :1.469.
PID of DBus name org.fcitx.Fcitx5 owner is 2072517.
Debug information from dbus:
Group [wayland:] has 10 InputContext(s)
IC [639134603e164ba38710bb7a9654ae58] program:org.fcitx. frontend:wayland_v2 cap:72 focus:0
IC [adeda35eaf884130bc0e6395f5ab78ce] program:.fcitx5-config-qt-wrapped frontend:dbus cap:1e001800072 focus:0
IC [2984ef037f324417bac6593a9f283d59] program:.fcitx5-config-qt-wrapped frontend:dbus cap:1e001800072 focus:0
IC [7ec7b43c1f9749e08d327faea3cfc005] program:firefox frontend:wayland_v2 cap:72 focus:0
IC [cea9daf9a1b5490c861f3a0da389973a] program:foot frontend:wayland_v2 cap:100000072 focus:1
IC [67a0a24b68d0453c8f9c371d0f8b84f6] program:org.fcitx. frontend:wayland_v2 cap:100000072 focus:0
IC [28871f51650e4842a02f51518f50736c] program:code frontend:wayland_v2 cap:72 focus:0
IC [6305dd8a3b86469a9d38feca4fa1b3ad] program:foot frontend:wayland_v2 cap:100000072 focus:0
IC [8cbb7fd8924b42b6ada27128c1b530ad] program:foot frontend:wayland_v2 cap:100000072 focus:0
IC [c7da01a0cdab48fbbf6ceadd598a011e] program: frontend:wayland_v2 cap:100000072 focus:0
Group [x11::0] has 0 InputContext(s)
Input Context without group
Frontends setup:
The environment variable checked by this script only shows the environment under current shell. It is still possible that you did not set the environment to the whole graphic desktop session. You may inspect the actual environment variable of a certain process by using xargs -0 -L1 /proc/$PID/environ for a certain process that you find not working.
Xim:
-
${XMODIFIERS}:
Environment variable XMODIFIERS is set to "@im=fcitx" correctly.
Xim Server Name from Environment variable is fcitx.
-
XIM_SERVERS on root window:
Xim server name is the same with that set in the environment variable.
-
XIM for Emacs:
Your LC_CTYPE is set to en_US.UTF-8 instead of one of zh, ja, ko. You may not be able to use input method in emacs because of an really old emacs bug that upstream refuse to fix for years.
Qt:
-
qt4 - ${QT4_IM_MODULE}:
Environment variable QT_IM_MODULE is set to "fcitx" correctly.
fcitx5-qt4-immodule-probing not found.
-
qt5 - ${QT_IM_MODULE}:
Environment variable QT_IM_MODULE is set to "fcitx" correctly.
Using fcitx5-qt5-immodule-probing to check the actual im module to be used under current environment:
QT_QPA_PLATFORM=wayland
QT_IM_MODULE=fcitx
IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext
-
qt6 - ${QT_IM_MODULE}:
Environment variable QT_IM_MODULE is set to "fcitx" correctly.
Using fcitx5-qt6-immodule-probing to check the actual im module to be used under current environment:
QT_QPA_PLATFORM=wayland
QT_IM_MODULE=fcitx
IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext
-
Qt IM module files:
Following error may not be accurate because guessing Qt version from path depends on how your distribution packages Qt. It is not a critical error if you do not use any Qt application with certain version of Qt or you are using text-input support by Qt under Wayland.
Cannot find fcitx5 input method module for Qt4.
Cannot find fcitx5 input method module for Qt5.
Cannot find fcitx5 input method module for Qt6.
Gtk:
-
gtk - ${GTK_IM_MODULE}:
Environment variable GTK_IM_MODULE is set to "fcitx" correctly.
fcitx5-gtk2-immodule-probing not found.
Using fcitx5-gtk3-immodule-probing to check the actual im module to be used under current environment:
Using fcitx5-gtk4-immodule-probing to check the actual im module to be used under current environment:
-
gtk-query-immodules:
-
gtk 2:
Cannot find gtk-query-immodules for gtk 2
Cannot find fcitx5 im module for gtk 2.
-
gtk 3:
Cannot find gtk-query-immodules for gtk 3
Cannot find fcitx5 im module for gtk 3.
-
Gtk IM module cache:
-
gtk 2:
Cannot find immodules cache for gtk 2
Cannot find fcitx5 im module for gtk 2 in cache.
-
gtk 3:
Cannot find immodules cache for gtk 3
Cannot find fcitx5 im module for gtk 3 in cache.
-
Gtk IM module files:
-
gtk 2:
All found Gtk 2 immodule files exist.
-
gtk 3:
All found Gtk 3 immodule files exist.
-
gtk 4:
All found Gtk 4 immodule files exist.
Configuration:
Fcitx Addons:
-
Addon Config Dir:
Found fcitx5 addon config directory: /nix/store/dbzapcacm6fd5hlg0z6jaj9jipl0sj7p-fcitx5-5.1.16/share/fcitx5/addon.
-
Addon List:
-
Found 20 enabled addons:
Classic User Interface 5.1.16
Clipboard 5.1.16
DBus 5.1.16
DBus Frontend 5.1.16
Emoji 5.1.16
Fcitx4 Frontend 5.1.16
IBus Frontend 5.1.16
Input method selector 5.1.16
Keyboard 5.1.16
KDE Input Method Panel 5.1.16
Status Notifier 5.1.16
Notification 5.1.16
Quick Phrase 5.1.16
Spell 5.1.16
Unicode 5.1.16
DBus Virtual Keyboard 5.1.16
Wayland 5.1.16
Wayland Input method frontend 5.1.16
XCB 5.1.16
X Input Method Frontend 5.1.16
-
Found 0 disabled addons:
-
Addon Libraries:
All libraries for all addons are found.
-
User Interface:
Found 3 enabled user interface addons:
Classic User Interface
KDE Input Method Panel
DBus Virtual Keyboard
Input Methods:
-
/home/sliedes/.config/fcitx5/profile:
[Groups/0]
# Group Name
Name=Default
# Layout
Default Layout=se-dvorak
# Default Input Method
DefaultIM=keyboard-se-dvorak
[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=se-dvorak
[GroupOrder]
0=Default
Log:
-
date:
-
/home/sliedes/.config/fcitx5/crash.log:
/home/sliedes/.config/fcitx5/crash.log not found.
Warning: the output of fcitx5-diagnose contains sensitive information, including the distribution name, kernel version, name of currently running programs, etc.
Though such information can be helpful to developers for diagnostic purpose, please double check and remove as necessary before posting it online publicly.
Summary
I have been trying to configure my input method using fcitx5-configtool, but I am finding the logic completely impenetrable. Let me try to explain what I see and what I'm trying, because I genuinely do not understand what this config presents to me at a level that would allow me to say what works and what doesn't. I think it would be fair to treat this as much a "configuration is impenetrable" bug than anything else. I managed to get a config that does what I want, but only by reading code and trying random edits to the profile file.
Now, the keyboard I have is a Swedish dvorak keyboard. So, my first intuition—I may be thinking about this somehow the wrong way, but input is to me keyboard layout first, not language first—is to find that in the list. I'll try the other way too, later.
Ok, I find an entry named "Keyboard - Swedish - Swedish (Dvorak)", which is the layout I want. I add that to the input method list.
Great. Now, I can type what I want, but the dictionary is in Swedish, not in English, as I'd desire. Luckily, there is a promising sounding Configure button in the middle, but instead of things like language, it has entries that I have hard time understanding like "Page size".
There is also a "Select Layout" button, but it is grayed out. Hmm. Maybe that means I can start from some generic language and change the layout to match what I want?
I find "Keyboard - English (US)". I have, by the way, not been able to figure out why some entries have the language name once, some twice. I assume that has a deep significance that completely escapes me, but I am hoping it means it forces only one, either language or keyboard layout.
But, even with that entry in the left had list, the Select Layout button stays grayed out. In fact, I have not been able to find a situation when it would not be grayed out.
There's also a button "Select system keyboard layout". It shows "Any language", "Swedish" and "Default" for the variant. This sounds promising, albeit I do not understand the difference between a "System keyboard layout" and the first entry in the list. (There is a text saying "Usually you need to put Keyboard or Keyboard - layout name" in the first place. I hoped to find an entry that says just "Keyboard" and that would let me choose layout and language, but there is no such thing, as far as I can tell.)
Ok, great. I choose the Variant: Swedish (Dvorak). And then I change Language to English.
Changing Language to English changes the Layout to Russian.
So, frustrated, I go to read the source code.
By playing around with things and stepping through the code in debugger, I was able to figure out that this snippet does what I want, but I genuinely do not know if it is reachable from the config tool nor if it makes semantic sense besides somehow accidentally working:
(I do not know if the groups make sense because I do not know what the groups are. But they seem safe to ignore.)
Now, at least the first input method of the list allows me to type using se-dvorak and speak English (I do not know why it says "keyboard-us", but it works). Except possibly some default, for which I do not know when it gets used. 🙈
Steps to Reproduce
see above
Expected Behavior
I would have hoped that the configuration tool allowed me to change any aspect that is currently wrong, whether language or keyboard layout. I would also have hoped it would explain "group", explain the difference of Keyboard-English and Keyboard-English-English, and that changing my language to English did not change my keyboard layout to Russian.
Output of fcitx5-diagnose command
System Info:
uname -a:lsb_release:lsb_releasenot found./etc/lsb-release:/etc/os-release:Desktop Environment:
Cannot determine desktop environment. (NOTE: I use sway)
XDG SESSION TYPE:
Bash Version:
Environment:
DISPLAY:
Keyboard Layout:
setxkbmap:xprop:Locale:
All locales:
Current locale:
Directories:
Home:
${XDG_CONFIG_HOME}:Environment variable
XDG_CONFIG_HOMEis not set.Current value of
XDG_CONFIG_HOMEis~/.config(/home/sliedes/.config).Fcitx5 Settings Directory:
Current fcitx5 settings directory is
~/.config/fcitx5(/home/sliedes/.config/fcitx5).Current user:
The script is run as sliedes (1000).
Fcitx State:
executable:
Found fcitx5 at
/run/current-system/sw/bin/fcitx5.version:
Fcitx version:
5.1.16process:
Found 2 fcitx5 processes:
fcitx5-remote:fcitx5-remoteworks properly.DBus interface:
Using
dbus-sendto check dbus.Owner of DBus name
org.fcitx.Fcitx5is:1.469.PID of DBus name
org.fcitx.Fcitx5owner is2072517.Debug information from dbus:
Frontends setup:
The environment variable checked by this script only shows the environment under current shell. It is still possible that you did not set the environment to the whole graphic desktop session. You may inspect the actual environment variable of a certain process by using
xargs -0 -L1 /proc/$PID/environfor a certain process that you find not working.Xim:
${XMODIFIERS}:Environment variable XMODIFIERS is set to "@im=fcitx" correctly.
Xim Server Name from Environment variable is fcitx.
XIM_SERVERS on root window:
Xim server name is the same with that set in the environment variable.
XIM for Emacs:
Your LC_CTYPE is set to en_US.UTF-8 instead of one of zh, ja, ko. You may not be able to use input method in emacs because of an really old emacs bug that upstream refuse to fix for years.
Qt:
qt4 -
${QT4_IM_MODULE}:Environment variable QT_IM_MODULE is set to "fcitx" correctly.
fcitx5-qt4-immodule-probingnot found.qt5 -
${QT_IM_MODULE}:Environment variable QT_IM_MODULE is set to "fcitx" correctly.
Using fcitx5-qt5-immodule-probing to check the actual im module to be used under current environment:
qt6 -
${QT_IM_MODULE}:Environment variable QT_IM_MODULE is set to "fcitx" correctly.
Using fcitx5-qt6-immodule-probing to check the actual im module to be used under current environment:
Qt IM module files:
Following error may not be accurate because guessing Qt version from path depends on how your distribution packages Qt. It is not a critical error if you do not use any Qt application with certain version of Qt or you are using text-input support by Qt under Wayland.
Cannot find fcitx5 input method module for Qt4.
Cannot find fcitx5 input method module for Qt5.
Cannot find fcitx5 input method module for Qt6.
Gtk:
gtk -
${GTK_IM_MODULE}:Environment variable GTK_IM_MODULE is set to "fcitx" correctly.
fcitx5-gtk2-immodule-probingnot found.Using fcitx5-gtk3-immodule-probing to check the actual im module to be used under current environment:
Using fcitx5-gtk4-immodule-probing to check the actual im module to be used under current environment:
gtk-query-immodules:gtk 2:
Cannot find
gtk-query-immodulesfor gtk 2Cannot find fcitx5 im module for gtk 2.
gtk 3:
Cannot find
gtk-query-immodulesfor gtk 3Cannot find fcitx5 im module for gtk 3.
Gtk IM module cache:
gtk 2:
Cannot find immodules cache for gtk 2
Cannot find fcitx5 im module for gtk 2 in cache.
gtk 3:
Cannot find immodules cache for gtk 3
Cannot find fcitx5 im module for gtk 3 in cache.
Gtk IM module files:
gtk 2:
All found Gtk 2 immodule files exist.
gtk 3:
All found Gtk 3 immodule files exist.
gtk 4:
All found Gtk 4 immodule files exist.
Configuration:
Fcitx Addons:
Addon Config Dir:
Found fcitx5 addon config directory:
/nix/store/dbzapcacm6fd5hlg0z6jaj9jipl0sj7p-fcitx5-5.1.16/share/fcitx5/addon.Addon List:
Found 20 enabled addons:
Found 0 disabled addons:
Addon Libraries:
All libraries for all addons are found.
User Interface:
Found 3 enabled user interface addons:
Input Methods:
/home/sliedes/.config/fcitx5/profile:Log:
date:/home/sliedes/.config/fcitx5/crash.log:/home/sliedes/.config/fcitx5/crash.lognot found.Warning: the output of fcitx5-diagnose contains sensitive information, including the distribution name, kernel version, name of currently running programs, etc.
Though such information can be helpful to developers for diagnostic purpose, please double check and remove as necessary before posting it online publicly.