这是一个很奇怪的 Bug. 在 XWayland 窗口和原生 Wayland 窗口中,fcitx5 都可以正常运行。但是当我从 XWayland 中脱离焦点,到 Wayland 窗口中激活一次输入法后,再切换回 XWayland 窗口,我使用 Ctrl+Space 切换输入法时,输入法候选框就飘到了屏幕左上角,也无法进行中文输入。此时关闭 XWayland 窗口再打开就又可以使用了。
基本上所有的 XWayland 窗口都复现了这个情况,包括 VSCode、QQ和微信。前两者都可以在 Wayland 下运行,但是微信不行,这让我非常困扰。我尝试了许多环境变量,包括 QT_IM_MODULE、QT_QPA_PLATFORM 等
基本上来说,我按照wiki中的内容配置了输入法。也许我漏掉了一些不起眼的项,可以提醒我检查一些容易忘记的部分。
关于复现,我还有一台使用 Manjaro 的电脑,安装了相同的软件和配置,没有出现这种情况。
一个观察是,出问题的 Xwayland 窗口中,fcitx5 的候选框边框远不如 Wayland 窗口粗?不太知道有什么关系。但这个现象在 Manjaro 上就没有观察到
期待任何可能的帮助
fcitx5-diagnose:
# 系统信息:
1. `uname -a`:
Linux air14shwstone 6.16.1-arch1-1 #1 SMP PREEMPT_DYNAMIC Fri, 15 Aug 2025 16:04:43 +0000 x86_64 GNU/Linux
2. `lsb_release -a`:
LSB Version: n/a
Distributor ID: Arch
Description: Arch Linux
Release: rolling
Codename: n/a
3. `lsb_release -d`:
Description: Arch Linux
4. `/etc/lsb-release`:
DISTRIB_ID="Arch"
DISTRIB_RELEASE="rolling"
DISTRIB_DESCRIPTION="Arch Linux"
5. `/etc/os-release`:
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo
6. 桌面环境:
桌面环境为 `kde`。
7. XDG 会话类型:
XDG_SESSION_TYPE='wayland'
8. Bash 版本:
BASH_VERSION='5.3.3(1)-release'
# 环境:
1. DISPLAY:
DISPLAY=':0'
WAYLAND_DISPLAY='wayland-0'
2. 键盘布局:
1. `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+us+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
2. `xprop`:
_XKB_RULES_NAMES(STRING) = "evdev", "pc105", "us", "", ""
3. Locale:
1. 全部可用 locale:
C
C.utf8
en_US.utf8
POSIX
zh_CN.utf8
2. 当前 locale:
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
4. 目录:
1. 主目录:
/home/shwstone
2. `${XDG_CONFIG_HOME}`:
环境变量 `XDG_CONFIG_HOME` 没有设定。
`XDG_CONFIG_HOME` 的当前值是 `~/.config` (`/home/shwstone/.config`)。
3. Fcitx5 设置目录:
当前 fcitx5 设置目录是 `~/.config/fcitx5` (`/home/shwstone/.config/fcitx5`)。
5. 当前用户:
脚本作为 shwstone (1000) 运行。
# Fcitx 状态:
1. 可执行文件:
在 `/usr/bin/fcitx5` 找到了 fcitx5。
2. 版本:
Fcitx 版本: `5.1.14`
3. 进程:
找到了 1 个 fcitx5 进程:
110907 fcitx5
4. `fcitx5-remote`:
`fcitx5-remote` 工作正常。
5. DBus 界面:
使用 `dbus-send` 来检查 dbus。
DBus 名称 `org.fcitx.Fcitx5` 的所有者是 `:1.425`。
DBus 名称 `org.fcitx.Fcitx5` 的 PID 所有者是 `110907`。
来自 dbus 的调试信息:
Group [wayland:] has 8 InputContext(s)
IC [64084c7ec80247f7a48235bd5cfa7ee3] program:org.kde.konsole frontend:wayland cap:60 focus:0
IC [b5ef4f54cbcc459795cf9d4c5a2bb2a8] program:org.kde.konsole frontend:wayland cap:200060 focus:0
IC [510def1f8b054480ae49827d84ab20fb] program:org.kde.konsole frontend:wayland cap:60 focus:1
IC [d2d23635bf944b6fa6f1e3e207638621] program:org.kde.konsole frontend:wayland cap:60 focus:0
IC [2b408a5e83514d3eb29bdb317d83913c] program:com.qq.weixin frontend:wayland cap:200060 focus:0
IC [36b7814f2dc044b5bb75cfb112e656ab] program:firefox frontend:wayland cap:60 focus:0
IC [e4424907e006476aa446af11045d02c3] program:systemsettings frontend:wayland cap:200060 focus:0
IC [99a0fb83bf13461ab112b927c670f275] program: frontend:wayland cap:60 focus:0
Group [x11::0] has 1 InputContext(s)
IC [4a12dc826f134b5d9d4b112e117e946c] program:wechat frontend:fcitx4 cap:800060 focus:0
Input Context without group
# 前端设置:
此脚本检查的环境变量仅能显示当前命令行的环境。仍有可能您的环境并没有应用于整个桌面。您可以通过使用命令对某个无法正常工作的进程使用命令 `xargs -0 -L1 /proc/$PID/environ` 检查此进程的实际的环境变量。
## Xim:
1. `${XMODIFIERS}`:
环境变量 XMODIFIERS 已经正确地设为了“@im=fcitx”。
从环境变量中获取的 Xim 服务名称为 fcitx.
2. 根窗口上的 XIM_SERVERS:
**Xim 服务名称:“ibus”与环境变量中设置的值“fcitx”不同。**
## Qt:
1. qt4 - `${QT4_IM_MODULE}`:
**请使用您发行版提供的工具将环境变量 QT_IM_MODULE 设为 "fcitx" 或者将 `export QT_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中。参见 [输入法相关的环境变量:QT_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#QT_IM_MODULE)。**
**`fcitx5-qt4-immodule-probing` 未找到.**
2. qt5 - `${QT_IM_MODULE}`:
**请使用您发行版提供的工具将环境变量 QT_IM_MODULE 设为 "fcitx" 或者将 `export QT_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中。参见 [输入法相关的环境变量:QT_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#QT_IM_MODULE)。**
**如果您的混成器完全支持 qt5 使用的 text-input 协议,您也可以使用 qt5 内置的 Wayland 模块。**
使用 fcitx5-qt5-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:
QT_QPA_PLATFORM=wayland
QT_IM_MODULE=
IM_MODULE_CLASSNAME=QtWaylandClient::QWaylandInputContext
3. qt6 - `${QT_IM_MODULE}`:
**请使用您发行版提供的工具将环境变量 QT_IM_MODULE 设为 "fcitx" 或者将 `export QT_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中。参见 [输入法相关的环境变量:QT_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#QT_IM_MODULE)。**
**如果您的混成器完全支持 qt6 使用的 text-input 协议,您也可以使用 qt6 内置的 Wayland 模块。**
使用 fcitx5-qt6-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:
QT_QPA_PLATFORM=wayland
QT_IM_MODULE=
IM_MODULE_CLASSNAME=QtWaylandClient::QWaylandInputContext
4. Qt 输入法模块文件:
找到了 fcitx5 qt6 模块:`/usr/lib/fcitx5/qt6/libfcitx-quickphrase-editor5.so`。
找到了未知的 fcitx qt 模块:`/usr/lib/qt6/plugins/plasma/kcms/systemsettings/kcm_fcitx5.so`。
找到了 fcitx5 的 qt6 输入法模块:`/usr/lib/qt6/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so`。
找到了 fcitx5 的 qt 输入法模块:`/usr/lib/qt/plugins/platforminputcontexts/libfcitx5platforminputcontextplugin.so`。
找到了未知的 fcitx qt 模块:`/usr/lib/office6/qt/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so`。
下列错误也许并不准确,因为对路径所对应的 Qt 版本的猜测取决于发行版如何打包 Qt。如果您不使用任何对应版本的 Qt 程序,或者在 Wayland 下使用 Qt 的 text-input 支持,下列错误也不是严重问题。
**无法找到 Qt4 的 fcitx5 输入法模块。**
## Gtk:
1. gtk - `${GTK_IM_MODULE}`:
**请使用您发行版提供的工具将环境变量 GTK_IM_MODULE 设为 "fcitx" 或者将 `export GTK_IM_MODULE=fcitx` 添加到您的 `~/.xprofile` 中。参见 [输入法相关的环境变量:GTK_IM_MODULE](http://fcitx-im.org/wiki/Input_method_related_environment_variables/zh-cn#GTK_IM_MODULE)。**
**如果您的混成器完全支持 gtk 使用的 text-input 协议,您也可以使用 gtk 内置的 Wayland 模块。**
使用 fcitx5-gtk2-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:
GTK_IM_MODULE=xim
使用 fcitx5-gtk3-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:
GTK_IM_MODULE=wayland
使用 fcitx5-gtk4-immodule-probing 来检查在当前环境下将被实际使用的输入法模块:
GTK_IM_MODULE=wayland
2. `gtk-query-immodules`:
1. gtk 2:
在 `/usr/bin/gtk-query-immodules-2.0` 找到了 gtk `2.24.33` 的 `gtk-query-immodules`。
版本行:
# Created by /usr/bin/gtk-query-immodules-2.0 from gtk+-2.24.33
已找到 gtk `2.24.33` 的 fcitx5 输入法模块。
"/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx5.so"
"fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
"fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
2. gtk 3:
在 `/usr/bin/gtk-query-immodules-3.0` 找到了 gtk `3.24.50` 的 `gtk-query-immodules`。
版本行:
# Created by /usr/bin/gtk-query-immodules-3.0 from gtk+-3.24.50
已找到 gtk `3.24.50` 的 fcitx5 输入法模块。
"/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx5.so"
"fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
"fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
3. Gtk 输入法模块缓存:
1. gtk 2:
在 `/usr/lib/gtk-2.0/2.10.0/immodules.cache` 找到了 gtk `2.24.33` 的输入法模块缓存。
版本行:
# Created by /usr/bin/gtk-query-immodules-2.0 from gtk+-2.24.33
已找到 gtk `2.24.33` 的 fcitx5 输入法模块。
"/usr/lib/gtk-2.0/2.10.0/immodules/im-fcitx5.so"
"fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
"fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
2. gtk 3:
在 `/usr/lib/gtk-3.0/3.0.0/immodules.cache` 找到了 gtk `3.24.50` 的输入法模块缓存。
版本行:
# Created by /usr/bin/gtk-query-immodules-3.0 from gtk+-3.24.50
已找到 gtk `3.24.50` 的 fcitx5 输入法模块。
"/usr/lib/gtk-3.0/3.0.0/immodules/im-fcitx5.so"
"fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
"fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"
4. Gtk 输入法模块文件:
1. gtk 2:
找到的全部 Gtk 2 输入法模块文件均存在。
2. gtk 3:
找到的全部 Gtk 3 输入法模块文件均存在。
3. gtk 4:
找到的全部 Gtk 4 输入法模块文件均存在。
# 配置:
## Fcitx 插件:
1. 插件配置文件目录:
找到了 fcitx5 的插件配置目录:`/usr/share/fcitx5/addon`。
2. 插件列表:
1. 找到了 28 个已启用的插件:
Simplified and Traditional Chinese Translation 5.1.9
Classic User Interface 5.1.14
Clipboard 5.1.14
Cloud Pinyin 5.1.9
DBus 5.1.14
DBus Frontend 5.1.14
Emoji 5.1.14
Fcitx4 Frontend 5.1.14
Full width character 5.1.9
IBus Frontend 5.1.14
Input method selector 5.1.14
Keyboard 5.1.14
KDE Input Method Panel 5.1.14
Mozc
Status Notifier 5.1.14
Notification 5.1.14
Pinyin 5.1.9
Extra Pinyin functionality 5.1.9
Punctuation 5.1.9
Quick Phrase 5.1.14
Spell 5.1.14
Table 5.1.9
Unicode 5.1.14
DBus Virtual Keyboard 5.1.14
Wayland 5.1.14
Wayland Input method frontend 5.1.14
XCB 5.1.14
X Input Method Frontend 5.1.14
2. 找到了 0 个被禁用的插件:
3. 插件库:
所有插件所需的库都被找到。
4. 用户界面:
找到了 3 个已启用的用户界面插件:
Classic User Interface
KDE Input Method Panel
DBus Virtual Keyboard
## 输入法:
1. `/home/shwstone/.config/fcitx5/profile`:
[Groups/0]
# Group Name
Name=Default
# Layout
Default Layout=us
# Default Input Method
DefaultIM=pinyin
[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=
[Groups/0/Items/1]
# Name
Name=pinyin
# Layout
Layout=
[GroupOrder]
0=Default
# 日志:
1. `date`:
2025年 08月 24日 星期日 14:08:32 CST
2. `/home/shwstone/.config/fcitx5/crash.log`:
`/home/shwstone/.config/fcitx5/crash.log` 未找到.
**警告:fcitx5-diagnose 的输出可能包含敏感信息,包括发行版名称,内核版本,正在运行的程序名称等。**
**尽管这些信息对于开发者诊断问题有帮助,请在公开发送到在线网站前检查并且根据需要移除的对应信息。**
应该是的。
我将 Manjaro 切换到了 Unstable,复现了这个问题。此更新把 kwin 等 KDE 软件包从 6.3.6 升级到 6.4.4。
有什么办法能降级 arch 的软件包吗?我单独降级了 kwin、kwin-x11、aurorae,然后 sddm 就黑屏了
依云
(lilydjwg)
6
那看来 kwin 不能单独降级。还是去给 kwin 报个 bug 吧。
follow up 一段时间之后,据我测试,这个bug已经在 KDE-unstable 仓库中的 kwin 6.4.91-1 被解决。对于 KDE 来说,这个版本被称为 6.5 beta 2。预期在 6.5 正式版中,bug 就不会再出现。标记为已解决。
ch4ser
9
我出现了一样的问题……但不同的是我是在纯wayland下发生的。具体来说,我在6.4.5的kde plasma下打开了两个wayland窗口:一个chromium,一个kitty,我先在kitty中切换fcitx5到中文后可以进行正常输入,随后我聚焦到chromium中切换fcitx5到中文后也可以进行正常中文输入,然而,但我重新切换焦点到之前的kitty窗口时,无法再输入中文,尝试切换一次可以看见fcitx5的语种提示框出现在了窗口的左上角,但是并不能输入中文,之后再次尝试切换fcitx5不再有反应,中文依旧无法输入。
你确认chromium是在wayland下运行的吗?在 chromium://version 里面查看命令行参数是否包含 –platform 等字样
ch4ser
11
有的,我的启动命令包含了--enable-wayland-ime --ozone-platform-hint=auto, xeyes也认为这是wayland窗口。
另外,把kitty换成ghostty(wayland窗口)该问题依旧存在,但是换成konsole就没有这个问题了……难道是终端的问题?
xeyes 对 kitty 怎么看?
这个 bug 的主要原因是 kwin 在两种框架下切换时没有正常销毁上一个框架的输入法示例。参考https://bugs.kde.org/show_bug.cgi?id=506095#c21 的方法获得更多日志。也可以切换到kde unstable看看问题有没有解决
也许是 input-method-v1 和 input-method-v3 之间也有问题?kitty 貌似仍然在使用 v1
ch4ser
14
xeyes也认为kitty是wayland窗口,我先试试切换kde unstable,感谢 
ch4ser
15
切换kde unstable版本无效,不过我修改了chromium的配置让它用--wayland-text-input-version=1问题就解决啦!感谢
,这个问题困扰很久了,其他electron应用例如obsidian也通过这个方法解决了。
依云
(lilydjwg)
16
kitty不使用input-method系列协议;它只会使用text-input。input-method系列是输入法使用的。
ch4ser
17
对对,我写错了,是--wayland-text-input-version=1