修复WPS Office的Fcitx5输入法问题

在KDE Wayland的Fcitx5建议设置下修复WPS Office的输入法问题

Posted by wszqkzqk on March 9, 2024
本文字数:1544

前言

以前,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_MODULEGTK_IM_MODULE。这样可以实现既使用Wayland的推荐设置,又能让这些旧软件正常使用输入法。

同样,如果希望在Wayland和x11环境下切换,也可以在~/.xprofile中加入这个设定。