其他发行版(非nixos)上使用nix包管理器安装gtk应用不能使用fcitx5输入法的解决方法

之所以会发生qt应用可以使用fcitx5而gtk应用不行的原因,是因为qt的im module可以自主识别,而gtk的im module需要配置文件。一般来说,发行版完成了这个操作,用户感觉不到。但是当我们在非nixos上使用nix的时候,我们只能自己操作了。


1、先在Host OS上安装fcitx5(或使用flatpak安装),确认对于GTK应用和QT应用,fcitx5都正常工作。

其实,nix的fcitx5也是可在Host上工作的,但是这里涉及到别的麻烦,不在本文解决之列。

2、安装nix

curl -L https://nixos.org/nix/install -o ~/nix.sh
chmod 755 ~/nix.sh


安装单用户模式:

~/nix.sh
echo ". ~/.nix-profile/etc/profile.d/nix.sh" >> ~/.bashrc

安装多用户模式:

nix.sh --daemon

完毕后重启
详见https://nixos.org/manual/nix/unstable/installation/installing-binary.html
官网上一些内容有过时,仅供参考

3、用nix安装fcitx5-qt和fcitx5-gtk
如果你安装了fcitx5-with-addons,那么应该不用安装这两个包,前者中有后两者的软链接
此时,qt应用应该已经可以识别fcitx5输入法,而gtk应用不行。可以安装gedit和kate作为测试

4、为了使得gtk应用可用,我们首先需要gtk+3-dev这个包,这个包无法直接安装,可以安装gtk+3来安装它。注意,由于nix-env的鬼畜语法,需要写成
 

nix-env -i gtk\\+3

5、在/nix/store下寻找一个叫做xxxx-gtk+3-xxx-dev的目录,其中前面一串是hash值,后面则是版本号。进入其中,再进入./bin目录,这里的gtk-query-immodules-xxx(xxx是版本号),这就是我们需要的程序

6、在/nix/store下寻找一个叫做xxxx-fcitx5-gtk-xxx的目录,进入/lib/gtk-3.0/3.0.0/immodules目录,这就是我们需要的模块

7、加载模块
输入

sudo xxx/gtk-query-immodules-xxx --update-cache xxx/im-fcitx5.so

例如我这里是:

sudo /nix/store/dsvwivybx5xnw4rhf3k3kgr5g35ylgn1-gtk+3-3.24.33-dev/bin/gtk-query-immodules-3.0 --update-cache /nix/store/9f26i0h7dddz3gpgiyy9624d8y2wskb9-fcitx5-gtk-5.0.13/lib/gtk-3.0/3.0.0/immodules/im-fcitx5.so 

 
此后,gtk应用的fcitx5输入就正常工作了,试试gedit吧,firefox和chromium也行哦。

8、这里通常需要root权限,众所周知,nix可以在不使用管理员权限的情况下使用。如果不想或无法提供根权限,请采用这样的方式
export GTK_IM_MODULE_FILE=某个不需要root权限的位置
例如,

export GTK_IM_MODULE_FILE=$HOME/.immodule.cache

然后,

xxx/gtk-query-immodules-xxx --update-cache xxx/im-fcitx5.so


此后使用诸如

GTK_IM_MODULE_FILE=$HOME/.immodule.cache gedit

就可以使用带有fcitx5输入法支持的gedit了
这里不建议把环境变量写到.bashrc或其他地方,因为可能和Host OS的immodule cache发生冲突。

9、可以采用类似的方法解决gtk2应用的输入问题,但是gtk2现在比较少见,我暂时用不到。

你可能感兴趣的:(linux)