Linux 下 Rstudio 等闭源 Qt 软件不能使用 Fcitx 的解决办法

问题原因

闭源 Qt 软件在编译的时候并没有加入 Fcitx 输入模块,导致无法使用 Fcitx 输入中文。常见的例子比如 Rstudio ,网易云音乐 netease-cloud-music 等。

解决方法

重新编译用闭源 Qt 软件使用的 Qt 库文件链接的 Fcitx 输入模块 libfcitxplatforminputcontextplugin.so 。下面以 Arch Linux 下的 Rstudio 为例介绍具体操作步骤。其他发行版和闭源 Qt 软件可以很容易类推。

  1. 查看闭源软件使用的 Qt 版本。Rstudio 可以直接在程序的帮助-关于里查看,或者使用如下命令(以 Arch Linux 下的 Rstudio 为例)
$ strings /usr/lib/rstudio/lib/libQt5Core.so.5 | grep "Qt 5"

我用的 Rstudio 1.3.959 使用的 Qt 版本是 5.12.6 。

  1. Qt 官网(https://qt.io)下载对应的 Qt 版本并编译。具体如何成功编译网上有很多帮助,本文略过。事实上我也没编译 Qt,而是偷懒直接从 Arch Linux 的历史软件库(https://archive.archlinux.org/packages/q/qt5-base/)下载了已经编译好的版本。只要前面两个版本号(5.12)对上就能用。类似的,Debian/Ubuntu 也可以采用相同思路。下载的二进制软件包不用安装,解压到任意临时文件目录即可。比如我的是~/tmp/qt5.12/

  2. 让编译程序去刚刚编译好的对应版本的Qt目录去寻找库文件。我刚刚下载的已经编译好的 Qt 文件解压在~/tmp/qt5.12,大家需要根据自己的情况修改对应路径。

$ export PATH="~/tmp/qt5.12/usr/bin/:$PATH"
  1. 下载 FcitxQt 前端fcitx-qt5并配置编译环境(系统里已经安装过了Fcitx)。
$ git clone https://github.com/fcitx/fcitx-qt5.git 
$ cd fcitx-qt5
$ cmake .

如果出现类似 ECM 字样的错误提示,说明需要安装依赖包 extra-cmake-modules

  1. 开始编译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/ 下即可。RstudioArch Linux 下对应目录是 /usr/lib/rstudio/plugins/platforminputcontexts/ 。很多闭源软件一般被安装在 /opt/目录下,对应修改路径即可。

一切顺利的话,就能在相应的 Qt 程序里使用 Fcitx 了。整个过程可能连半小时都不需要。

参考资料

  1. 解决 Mendeley 和 RStudio 无法输入中文的问题简单记录。
  2. A case study: how to compile a Fcitx platforminputcontext plugin for a proprietary software that uses Qt 5.

你可能感兴趣的:(Linux 下 Rstudio 等闭源 Qt 软件不能使用 Fcitx 的解决办法)