在 Wayland 上使用 Fcitx5
Wayland 是下一代 Linux 显示协议。
相比传统 X11:
- 更现代
- 更安全
- 更适合高刷新率与多显示器
但输入法支持一直比较复杂。
尤其:
- GTK
- Qt
- Electron
- Chromium
- XWayland
在不同桌面环境下配置方式并不相同。
本文整理:
- Fcitx5
- Wayland
- GTK
- Qt
- Chromium
- KDE Plasma
- GNOME
- Sway
- Hyprland
的实际配置方案。
Wayland 与输入法
Wayland 下:
输入法主要依赖:
- text-input-v1
- text-input-v2
- text-input-v3
- zwp_input_method
不同桌面实现完全不同。
因此:
- KDE
- GNOME
- wlroots
- Weston
配置方式都不同。
环境变量说明
在 Linux 输入法中:
最常见的是:
XMODIFIERSGTK_IM_MODULEQT_IM_MODULE
XMODIFIERS
对于:
- X11
- XWayland
仍然必须设置:
export XMODIFIERS=@im=fcitx
因为大量应用:
- Electron
- Chromium
- Qt4
- X11 程序
仍依赖 XIM。
GTK_IM_MODULE
推荐方案
Wayland 下:
不建议全局设置:
GTK_IM_MODULE=fcitx
更推荐:
- Gtk3/4 使用 Wayland text-input
- Gtk2 使用 fcitx 模块
Gtk2
编辑:
~/.gtkrc-2.0
添加:
gtk-im-module="fcitx"
Gtk3
编辑:
~/.config/gtk-3.0/settings.ini
添加:
[Settings]
gtk-im-module=fcitx
Gtk4
编辑:
~/.config/gtk-4.0/settings.ini
添加:
[Settings]
gtk-im-module=fcitx
GNOME 用户
额外执行:
gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/IMModule':<'fcitx'>}"
QT_IM_MODULE
Qt 在 Wayland 下情况最复杂。
KDE Plasma
KWin 支持:
- text-input-v2
- text-input-v4
因此:
不建议设置:
QT_IM_MODULE
让 Qt 使用 Wayland 原生输入法即可。
GNOME / Sway / Hyprland
这些环境:
不支持 Qt text-input-v2。
因此必须:
export QT_IM_MODULE=fcitx
否则 Qt 程序无法输入中文。
Qt 专有软件兼容
部分软件:
- WPS
- DaVinci Resolve
- Mathematica
- Anki
输入法兼容很差。
可以尝试:
方案 1
QT_IM_MODULE=fcitx
方案 2
QT_IM_MODULE=ibus
方案 3(强制 X11)
QT_QPA_PLATFORM=xcb QT_IM_MODULE=ibus
Qt 6.7 新特性
Qt 6.7 新增:
QT_IM_MODULES
支持 fallback。
推荐:
QT_IM_MODULES="wayland;fcitx;ibus"
这样:
- Wayland 不可用
- 自动回退 fcitx
- 最后使用 ibus
XWayland 应用
大量应用仍运行在:
- XWayland
- X11
例如:
- Electron
- Chromium
- SDL2
- Qt4
- 老 GTK2
Electron / Chromium
通常建议:
export GTK_IM_MODULE=fcitx
即可。
SDL2
设置:
export SDL_IM_MODULE=fcitx
Chromium / Electron Wayland 原生支持
Wayland 原生运行:
需要额外参数。
Chromium
chromium \
--enable-features=UseOzonePlatform \
--ozone-platform=wayland \
--enable-wayland-ime
VSCode
code \
--enable-features=UseOzonePlatform \
--ozone-platform=wayland \
--enable-wayland-ime
Chromium Gtk4 模式
Chromium 可使用 Gtk4 输入法模块:
chromium \
--enable-features=UseOzonePlatform \
--ozone-platform=wayland \
--gtk-version=4
但:
- Electron 不支持
- GNOME 下候选框位置可能异常
KDE Plasma 配置
推荐方案
KDE Plasma 5.27+:
最佳兼容。
环境变量
只设置:
export XMODIFIERS=@im=fcitx
不要设置:
GTK_IM_MODULEQT_IM_MODULESDL_IM_MODULE
开启虚拟键盘
进入:
系统设置 → 虚拟键盘 → Fcitx5
必须使用 KDE 的虚拟键盘机制启动 fcitx5。
Chromium
推荐:
--enable-features=UseOzonePlatform \
--ozone-platform=wayland \
--enable-wayland-ime
GNOME 配置
GNOME:
默认基于 ibus。
Fcitx5 会替换 ibus-daemon。
推荐环境变量
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx
Chrome
推荐:
- XWayland
- GTK_IM_MODULE=fcitx
候选框问题
GNOME 存在:
候选词无法覆盖 Shell UI。
解决方案:
使用:
- kimpanel 扩展
Sway / Hyprland 配置
wlroots 环境
包括:
- Sway
- Hyprland
- River
通常支持:
- text-input-v3
但:
Qt 仍需:
export QT_IM_MODULE=fcitx
Hyprland 推荐配置
编辑:
~/.config/hypr/hyprland.conf
添加:
env = XMODIFIERS,@im=fcitx
env = QT_IM_MODULE,fcitx
Weston 配置
Weston:
只支持:
- text-input-v1
因此必须:
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
配置 weston.ini
编辑:
~/.config/weston.ini
添加:
[core]
xwayland=true
[input-method]
path=/usr/bin/fcitx5
候选框问题
Wayland:
没有全局坐标。
因此:
输入法候选框定位一直是难点。
当前解决方案
不同环境:
- XWayland:正常
- KDE:text-input-v2
- GNOME:kimpanel
- Gtk/Qt:客户端内嵌 popup
每窗口输入法状态
Wayland 下:
输入法状态通常是全局的。
不像 X11:
可以做到:
- 每窗口独立输入法状态
已知问题
Fcitx 管理 XKB 布局
Wayland 没有统一 XKB API。
因此:
仅:
- KDE Plasma
- GNOME
能较好支持。
候选框闪烁
Gtk3 / Qt5:
popup 会:
- show/hide
- 频繁重定位
可能导致闪烁。
推荐配置总结
KDE Plasma
推荐:
XMODIFIERS=@im=fcitx
不要设置:
GTK_IM_MODULE
QT_IM_MODULE
Hyprland / Sway
推荐:
XMODIFIERS=@im=fcitx
QT_IM_MODULE=fcitx
GNOME
推荐:
XMODIFIERS=@im=fcitx
QT_IM_MODULE=fcitx
Chrome:
推荐 XWayland。
总结
Wayland 下:
输入法生态仍不统一。
目前:
- KDE Plasma 兼容最好
- GNOME 依赖 ibus
- wlroots 环境需要更多手动配置
- Qt Wayland 支持仍存在大量问题
对于:
- Hyprland
- Sway
- River
通常推荐:
XMODIFIERS=@im=fcitx
QT_IM_MODULE=fcitx
Gtk 不全局设置即可。