[Share Experiences] 在AppImage GTK3应用中加载Fcitx的小tip —— 以InkScape为栗
Tofloor
poster avatar
Shiroko
deepin
2023-12-08 02:47
Author

一些AppImage包自带的GTK系列组件不会自带Fcitx之类的输入法模组。咱们CJK语言区人微言轻,上游大部分都no one care about us。

Qt系列的通过加载/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts里面的输入法插件调用系统输入法组件的说明,前人之述备矣。

今天来备忘一下如何在GTK3系列应用中加载输入法插件。

大部分GTK3程序使用如下三个环境变量就可以成功使用输入法:

GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules
GTK_IM_MODULE=fcitx
# GTK_IM_MODULE=fcitx5 # 如果用的是Fcitx5
GTK_IM_MODULE_FILE="/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache"

(文档地址:https://docs.gtk.org/gtk3/running.html

对于Inkscape可以用:env GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules GTK_IM_MODULE_FILE="/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache" GTK_IM_MODULE=fcitx /opt/apps/org.inkscape/files/bin/AppRun这个命令行直接启动。

但是对于V23事情有些变动,Inkscape的AppImage是在20.04上编译的,stdc++版本比v23的要低,恰恰V23自带的fcitx5 gtk3的模组是依赖最新版本stdc++。那只能去相同的环境自行编译了(恰好旁边有一个20.04的机器)。

编译过程
sudo apt install git
git clone https://github.com/fcitx/fcitx5-gtk
cd fcitx5-gtk
sudo apt install g++ cmake extra-cmake-modules libgirepository1.0-dev libgtk-3-dev

然后编辑一下fcitx5-gtk下的CMakeList.txt:

  • options部分:
    • 调整ENABLE_GTK2_IM_MODULE、ENABLE_GTK4_IM_MODULE为OFF,
    • 调整BUILD_ONLY_PLUGIN为ON

删除

if (ENABLE_GTK2_IM_MODULE)
……
endif()

包裹的所有部分,包括这个if和endif。(理论上把上面的options关掉就行,但是关掉还是需要gtk2的库,索性直接删掉~)

然后

mkdir build && cd build
cmake ..
make -j$(nproc)

最后在build/gtk3目录下躺着的im-fcitx5.so文件就是我们需要的啦。

找一个地方创建一个文件夹(比如说桌面,我的环境就是/home/shiroko/Desktop/immodules这个文件夹),然后把编译出来的im-fcitx5.so丢进去,然后像这样加载:

env GTK_IM_MODULE_FILE=/home/shiroko/Desktop/immodules.cache GTK_PATH=/home/shiroko/Desktop/immodules GTK_IM_MODULE=fcitx5 /opt/apps/org.inkscape/files/bin/AppRun

因为没有使用系统的immodules,所以需要手动创建一个cache文件/home/shiroko/Desktop/immodules.cache

内容如下:

"/home/shiroko/Desktop/immodules/im-fcitx5.so" 
"fcitx" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*" 
"fcitx5" "Fcitx5 (Flexible Input Method Framework5)" "fcitx5" "/usr/locale" "ja:ko:zh:*"

第一行即是我们的so文件的路径啦。

这样我们就能愉快的在V20和V23的GTK3 AppImage软件里面使用中文输入法啦!

(理论上适用于所有GTK3程序)

附带一个上文提到过的编译好的im-fcitx5.so:im-fcitx5.zip

Reply Favorite View the author
All Replies
时光正好
deepin
2023-12-08 03:56
#1

看不懂

Reply View the author
fuuko
deepin
2023-12-08 03:57
#2

kissing_heart

Reply View the author
TSAC
deepin
2023-12-08 04:14
#3

咱可是根社区,不如着手解决这个问题

Reply View the author
Ziggy
deepin
2023-12-08 04:20
#4

懂了,下次应用不能调输入法先自问两遍:

  1. 是不是Qt
  2. 是不是GTK

😂

linux不用tar差评sad

Reply View the author
qq4945286
deepin
2023-12-08 05:20
#5

终于解决了,谢谢

Reply View the author
北冥夜未央
deepin
2023-12-08 05:31
#6

deepin 20.9,官方应用商店安装的inkscape。

/etc/profile中添加了:

export GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules
export GTK_IM_MODULE=fcitx

然后在终端执行了:source /etc/profile

输入命令:env GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules GTK_IM_MODULE=fcitx /opt/apps/org.inkscape/files/bin/AppRun启动软件,然而还是不能输入汉字,问题出在哪儿?

Reply View the author
北冥夜未央
deepin
2023-12-08 06:50
#7
北冥夜未央

deepin 20.9,官方应用商店安装的inkscape。

/etc/profile中添加了:

export GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules
export GTK_IM_MODULE=fcitx

然后在终端执行了:source /etc/profile

输入命令:env GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules GTK_IM_MODULE=fcitx /opt/apps/org.inkscape/files/bin/AppRun启动软件,然而还是不能输入汉字,问题出在哪儿?

在终端直接用env GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules GTK_IM_MODULE=fcitx /opt/apps/org.inkscape/files/bin/AppRun启动软件也输入不了汉字

Reply View the author
Shiroko
deepin
2023-12-08 17:48
#8
北冥夜未央

在终端直接用env GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules GTK_IM_MODULE=fcitx /opt/apps/org.inkscape/files/bin/AppRun启动软件也输入不了汉字

加上GTK_IM_MODULE_FILE="/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache"应该就好了。我用虚拟机跑了一下的确只用那两个不太行。

截图_选择区域_20231208094841.png

Reply View the author
lizipeng0013
deepin
2023-12-09 01:13
#9

我把Inkscape的appimage解压,在AppRun文件开头加上

export GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules
export GTK_IM_MODULE_FILE="/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache"
export GTK_IM_MODULE=fcitx

重新打包appimage,终于可以正常输入中文了

Reply View the author
北冥夜未央
deepin
2023-12-09 15:29
#10
Shiroko

加上GTK_IM_MODULE_FILE="/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache"应该就好了。我用虚拟机跑了一下的确只用那两个不太行。

截图_选择区域_20231208094841.png

确实可以正常输入汉字了applaud

Reply View the author