引言

在KDE Plasma从X11切换到Wayland后,Fcitx5输入法经常出现一种看似矛盾的状态:

  • 托盘图标正常
  • 部分应用可以输入
  • 部分应用无法输入
  • systemd用户环境中缺少输入法变量
  • .xprofile 中的旧配置仍然存在
  • 原生Wayland应用和XWayland应用表现不同

问题的根源在于:Wayland、XWayland、Qt、GTK和XIM使用的输入法路径并不完全相同。

正确配置不应只是把所有变量都全局导出,而应明确每一条输入路径的用途。

一、原生Wayland输入法如何工作

在Wayland环境中,输入法通常通过Wayland输入法协议与合成器协作。

KDE Plasma中的合成器是KWin。

Fcitx5应在:

系统设置
→ 键盘
→ 虚拟键盘
→ Fcitx 5

中启用。

这样KWin可以把Fcitx5作为Wayland输入法客户端启动,并为它提供需要的输入法协议连接。

这部分不是传统的XIM环境变量机制。

二、XWayland应用仍需要XMODIFIERS

旧X11应用运行在XWayland中时,通常仍然通过XIM与输入法通信。

因此需要:

XMODIFIERS=@im=fcitx

注意模块名称是:

fcitx

而不是:

fcitx5

Fcitx5是程序的代际名称,但XIM和工具包模块使用的名字仍然是 fcitx

三、为什么使用environment.d

推荐的用户级配置路径是:

~/.config/environment.d/

例如创建:

~/.config/environment.d/90-fcitx-wayland.conf

内容:

XMODIFIERS=@im=fcitx

environment.d 是systemd提供的正式用户环境配置机制。

它适合Wayland桌面的原因包括:

  • 不依赖特定shell
  • 不依赖是否打开终端
  • 可以进入systemd用户服务环境
  • 不局限于X11
  • 不需要修改全系统 /etc/environment
  • 不会只对交互式Bash生效

修改后通常需要注销重新登录或重启,才能让新会话中的程序获得变量。

四、为什么不推荐全局设置GTK_IM_MODULE

传统配置经常包含:

export GTK_IM_MODULE=fcitx

这在X11环境中非常常见。

但在现代Wayland环境中,原生GTK应用可以通过Wayland输入法协议与Fcitx5配合。全局强制工具包模块,可能让原生Wayland应用绕过更合适的协议路径。

潜在问题包括:

  • 候选窗口闪烁
  • 光标位置错误
  • 输入法窗口定位异常
  • 原生Wayland和XWayland行为不一致
  • 应用升级后出现重复输入法通道

因此,不应仅为了让变量“看起来完整”而全局设置。

五、为什么不推荐全局设置QT_IM_MODULE

同样,传统Qt配置常见:

export QT_IM_MODULE=fcitx

但KDE原生Wayland应用通常应优先通过KWin和Wayland输入法协议工作。

全局强制 QT_IM_MODULE 可能导致:

  • Qt应用不使用原生Wayland协议
  • 候选框位置异常
  • 某些应用重复加载输入法模块
  • 原生Wayland和XWayland应用难以区分

更合理的原则是:

默认不全局设置
出现具体兼容问题时再按应用设置

六、按应用设置兼容变量

某个旧Qt应用无法输入时,可以单独启动:

QT_IM_MODULE=fcitx application-command

某个旧GTK应用无法输入时,可以使用:

GTK_IM_MODULE=fcitx application-command

如果应用通过桌面文件启动,可以复制相应 .desktop 文件到:

~/.local/share/applications/

再修改 Exec=

Exec=env QT_IM_MODULE=fcitx application-command

这样不会影响整个Wayland会话。

七、.xprofile还需不需要

.xprofile 是X11时代常见的图形会话环境配置文件。

如果系统仍然保留完整X11会话作为临时回退,可以在其中保存传统X11变量:

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

但它不应再作为Wayland主配置来源。

更清晰的结构是:

Wayland主环境
→ environment.d

Fcitx5 Wayland协议
→ KWin虚拟键盘

X11回退会话
→ .xprofile

特殊旧应用
→ 单独设置GTK_IM_MODULE或QT_IM_MODULE

八、检查systemd用户环境

可以执行:

systemctl --user show-environment |
grep -E '^(XMODIFIERS|GTK_IM_MODULE|QT_IM_MODULE)='

符合现代Plasma Wayland思路的结果可能只有:

XMODIFIERS=@im=fcitx

没有出现 GTK_IM_MODULEQT_IM_MODULE,不代表配置缺失。

还应检查:

pgrep -a fcitx5

并确认KDE虚拟键盘中已经选择Fcitx5。

九、为什么应该保留XWayland

部分旧应用、Electron应用或特殊候选窗口路径,仍可能依赖XWayland。

因此,配置Fcitx5时不需要为了“纯Wayland”而删除XWayland。

更合理的目标是:

  • 原生Wayland应用使用Wayland输入法协议
  • XWayland应用使用XIM兼容
  • 旧工具包应用按需单独设置模块
  • 不重复启动多个Fcitx5实例

十、避免重复启动Fcitx5

如果已经由KWin虚拟键盘启动Fcitx5,就不应再同时设置:

  • Plasma自启动
  • systemd用户服务
  • .xprofilefcitx5 -d
  • shell启动脚本
  • 自定义桌面启动项

多个启动入口可能导致:

  • 重复托盘图标
  • D-Bus名称竞争
  • 输入法前端重复加载
  • Wayland输入法套接字丢失
  • XWayland和Wayland状态不同步

结语

KDE Plasma Wayland下,Fcitx5的合理结构并不是“设置尽可能多的环境变量”,而是让不同应用走各自最合适的输入路径:

KWin虚拟键盘
→ 原生Wayland输入法协议

XMODIFIERS=@im=fcitx
→ XWayland/X11应用

GTK_IM_MODULE或QT_IM_MODULE
→ 仅用于确实需要兼容的单个应用

使用 environment.d 配置 XMODIFIERS,并由KWin启动Fcitx5,是一种正式、清晰且便于长期维护的方式。

Leave a Reply

Your email address will not be published. Required fields are marked *