Linux 下 Qt5 程序中文输入的问题

QT

Debian 10 (Buster) 下一直无法在 QT 的应用程序下输入中文,如 wps/libreoffice/wine。Google 了好长时间也没找到原因,即使我重新从源码编译了fcitx-qt5也一样。好在之后无意中发现了解决方法。

背景

  • OS: Debian Buster x64
  • Language: en_US.UTF-8
  • Desktop: MATE Desktop 1.22.2
  • Input: Fcitx v4.2.9.7

自从切换到 Debian Buster 后,发现使用 QT 的程序无法输入中文,如 libreOffice/WPS/wine(notepad/office 2007)。而其它没有使用QT的程序却可以正常进行中文输入,如 Firefox/VIM/Leafpad 等等。

解决方法

Baidu / Google 了半天,基本上老师添加环境变量或重新编译 fcitx-qt5

而我使用下面第三种方法解决的问题。

一、在环境变量中指定输入法

设置环境变量,在 .bashrc/.xprofile/.xinputrc/.profile或写个脚本加入下面的变量。

1
2
3
4
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export QT4_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

二、源码编译 fcitx-qt5

理由是 Linux 官方仓库的 fcitx-qt5 太老旧,不兼容 QT5.6 以上的版本,需要在新版本的 QT 中重新编译它。

注:下面的步骤哪个也不要省略,否则可能在编译时会出现莫名的错误。

1、安装依赖

1
2
:~$ sudo apt-get install cmake fcitx-libs-dev extra-cmake-modules
:~$ wget

2、安装 QT5 与 fcitx-qt5 源码

Web - QT5 下载一个并安装在本地。

在这里我们下载 QT5.14.1 for linux 64-bits

1
2
3
:~$ wget http://download.qt.io/official_releases/qt/5.14/5.14.1/qt-opensource-linux-x64-5.14.1.run
:~$ chmod +x qt-opensource-linux-x64-5.14.1.run
:~$ ./qt-opensource-linux-x64-5.14.1.run

安装时它首先让我们在 QT网站 上注册一个帐户,之后的安装过程中还会遇到一个选择框,如果不知道安装哪个就全部安装上。

1
:~$ git clone https://github.com/fcitx/fcitx-qt5

3、开始编译

1
2
3
4
5
:~$ export PATH="/home/root/Qt5.14.1/5.14.1/gcc_64/bin":$PATH
:~$ cd fcitx-qt5
:~$ cmake .
:~$ make
:~$ sudo make install

幸运的话,我们已经编译成功了,而这里我们需要libfcitxplatforminputcontextplugin.so

如果报错了,请自行Google解决。

4、覆盖原有模块

1
2
:~$ mv /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so.old
:~$ cp fcitx-qt5/platforminputcontext/libfcitxplatforminputcontextplugin.so /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/

三、切换至中文语言环境

无意中我把语言环境变量修改了下,发现 fcitx 可以在 QT 程序下正常使用了!

下面拿LibreOffice 来举例:

1
2
3
4
5
6
7
8
9
:~$ cat > office <<EOF
!#/sbin/bash

export LANG=zh_CN.UTF-8
killall fcitx
fcitx && libreoffice
EOF
:~$ chmod +x office
:~$ office

写了个脚本,先将语言设置为中文,然后关闭现有的 fcitx,最后打开 fcitx 和 libreoffice,此时可以在 LibreOffice 中正常输入中文了。

为了保持自己的英文水平,所以不想切换回中文语言环境。只能将所需的 QT5 程序按照上面的方法都写了个脚本。

QT 程序可以在英文环境下正常输入中文, QT 程序却不行,不知道这是为什么。


Prefences:

  • CSDN
  • fcitx
  • qt web