问题原因
闭源 Qt
软件在编译的时候并没有加入 Fcitx
输入模块,导致无法使用 Fcitx
输入中文。常见的例子比如 Rstudio
,网易云音乐 netease-cloud-music
等。
解决方法
重新编译用闭源 Qt
软件使用的 Qt
库文件链接的 Fcitx
输入模块 libfcitxplatforminputcontextplugin.so
。下面以 Arch Linux
下的 Rstudio
为例介绍具体操作步骤。其他发行版和闭源 Qt
软件可以很容易类推。
- 查看闭源软件使用的
Qt
版本。Rstudio
可以直接在程序的帮助-关于里查看,或者使用如下命令(以Arch Linux
下的Rstudio
为例)
$ strings /usr/lib/rstudio/lib/libQt5Core.so.5 | grep "Qt 5"
我用的 Rstudio
1.3.959 使用的 Qt
版本是 5.12.6 。
在
Qt
官网(https://qt.io)下载对应的Qt
版本并编译。具体如何成功编译网上有很多帮助,本文略过。事实上我也没编译Qt
,而是偷懒直接从Arch Linux
的历史软件库(https://archive.archlinux.org/packages/q/qt5-base/)下载了已经编译好的版本。只要前面两个版本号(5.12)对上就能用。类似的,Debian
/Ubuntu
也可以采用相同思路。下载的二进制软件包不用安装,解压到任意临时文件目录即可。比如我的是~/tmp/qt5.12/
。让编译程序去刚刚编译好的对应版本的Qt目录去寻找库文件。我刚刚下载的已经编译好的
Qt
文件解压在~/tmp/qt5.12
,大家需要根据自己的情况修改对应路径。
$ export PATH="~/tmp/qt5.12/usr/bin/:$PATH"
- 下载
Fcitx
的Qt
前端fcitx-qt5
并配置编译环境(系统里已经安装过了Fcitx
)。
$ git clone https://github.com/fcitx/fcitx-qt5.git
$ cd fcitx-qt5
$ cmake .
如果出现类似 ECM
字样的错误提示,说明需要安装依赖包 extra-cmake-modules
。
- 开始编译
fcitx-qt5
。实际编译fcitx-qt5
的过程中可能需要解决一些依赖问题,大家可以去参考网上的帮助,本文略过。事实上,我也没有真的去编译整个fcitx-qt5
。最新版本的Fcitx
模块化做得很好。fcitx-qt5
很早就从Fcitx
的编译中独立了出来,而fcitx-platforminputcontext
做为一个模块也从fcitx-qt5
的编译中独立了出来。所以我们只需要单独编译fcitx-platforminputcontext
这个模块即可。只编译这个小模块没什么依赖问题需要解决。
$ cd platforminputcontext
$ make
成功编译后在当前目录 fcitx-qt5/platforminputcontext
下就会出现我们需要的文件 libfcitxplatforminputcontextplugin.so
。把此文件拷贝到对应 Qt 程序的插件目录 plugins/platforminputcontexts/
下即可。Rstudio
在 Arch Linux
下对应目录是 /usr/lib/rstudio/plugins/platforminputcontexts/
。很多闭源软件一般被安装在 /opt/
目录下,对应修改路径即可。
一切顺利的话,就能在相应的 Qt
程序里使用 Fcitx
了。整个过程可能连半小时都不需要。