前言
以前,Fcitx5一般会要求用户在/etc/environment
中添加有关环境变量的配置,例如:
XMODIFIERS=@im=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus
然而,在Wayland合成器中,如果存在这些环境变量,可能会遇到Fcitx5闪烁的情况,可能会影响用户体验。
Fcitx5在KDE Wayland下建议通过系统设置->键盘->虚拟键盘
来选择Fcitx5输入法。由于KDE Plasma支持1-3版的Wayland输入法协议,因此,仅建议在环境变量中添加:
XMODIFIERS=@im=fcitx
其他环境变量不需要添加。
然而,WPS Office静态链接了Qt5,不受系统的Qt库控制,由于某种原因不能应用这样选择的输入法,导致无法输入中文。
解决方法
由于在以前添加了环境变量的时候,WPS Office是可以正常输入中文的,因此,只要我们单独给WPS Office添加环境变量,就可以解决这个问题。
单独给WPS Office添加环境变量可以由很多方式实现,比如说编辑WPS Office的启动脚本、使用额外启动脚本替代WPS Office的启动脚本、编辑WPS Office的.desktop
文件等等。然而,这些方法会在WPS Office的每次更新后失效。
笔者选择了将WPS Office的.desktop
文件复制到~/.local/share/applications
目录下。
cp /usr/share/applications/wps-office*.desktop ~/.local/share/applications/
然后编辑该文件的启动命令,实现单独给WPS Office添加环境变量。在原有的文件中,找到Exec=
一行,形如:
Exec=/usr/bin/wps %F
为了单独给WPS Office添加环境变量,我们可以将其修改为:
Exec=env XMODIFIERS="@im=fcitx" GTK_IM_MODULE="fcitx" QT_IM_MODULE="fcitx" SDL_IM_MODULE=fcitx GLFW_IM_MODULE=ibus /usr/bin/wps %F
这里,我们使用env
命令来临时添加环境变量,这样,我们就可以在不修改WPS Office的启动脚本的情况下,实现单独给WPS Office添加环境变量。
然后,刷新菜单缓存:
update-desktop-database ~/.local/share/applications/
这样,我们就可以在KDE Wayland的建议配置下正常使用WPS Office的输入法了。
通用配置
对于静态链接Qt等基础库且较老、未适配Wayland输入法协议的专有软件,可以在启动脚本中加入由7Ji和devome想到的一个通用Hack:
case "${XMODIFIERS}" in
*@im=fcitx*)
export QT_IM_MODULE fcitx
export GTK_IM_MODULE fcitx
;;
*@im=ibus*)
export QT_IM_MODULE ibus
export GTK_IM_MODULE ibus
export IBUS_USE_PORTAL 1
;;
esac
这个Hack假设了Wayland用户会设置XMODIFIERS
这一环境变量,然后根据XMODIFIERS
的值来设置QT_IM_MODULE
和GTK_IM_MODULE
。这样可以实现既使用Wayland的推荐设置,又能让这些旧软件正常使用输入法。
同样,如果希望在Wayland和x11环境下切换,也可以在~/.xprofile
中加入这个设定。