修复Ghostty AppImage无法使用Fcitx5中文输入法

在Ubuntu 22.04的X11会话中运行Ghostty AppImage时,Fcitx5可以切换输入法,但无法在Ghostty中输入中文,其他应用不受影响。

本文使用的Ghostty 1.3.1 AppImage来自pkgforge-dev/ghostty-appimage,运行时为uruntime

修复方法

假设AppImage位于~/.local/bin/ghostty。先安装Fcitx5的GTK4前端:

sh
sudo apt install fcitx5-frontend-gtk4

在AppImage旁创建同名的环境文件:

sh
cat > ~/.local/bin/ghostty.env <<'EOF'
GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-4.0
EOF

完全退出所有Ghostty进程,再重新启动。日志中出现下面的内容表示环境文件已经生效:

text
Read env file: "~/.local/bin/ghostty.env"

实际日志会显示用户主目录的绝对路径,本文用~代替。

原因

这个AppImage带有自己的GTK 4运行库,但没有打包GTK输入法模块和打印后端。宿主机的GTK4目录中包含:

text
immodules/libim-fcitx5.so
immodules/libim-ibus.so
printbackends/libprintbackend-cups.so
printbackends/libprintbackend-file.so

即使会话中已经设置GTK_IM_MODULE=fcitx,AppImage内的GTK也无法自动找到宿主机上的libim-fcitx5.so

GTK_PATH为GTK补充动态模块搜索目录,使Ghostty能够加载Fcitx5插件。它不会修改动态链接器的库路径,也不会让Ghostty改用宿主机的libgtk-4.so。输入法仍由GTK_IM_MODULE=fcitx选择。

当前AppImage没有同类GTK插件,因此可以直接加入整个宿主机GTK4模块目录。如果以后更新的AppImage开始内置GTK模块,应重新检查是否还需要这项设置。

关于.env文件

读取同名.env文件是这个AppImage使用的uruntime提供的功能,不是所有AppImage都支持。可以运行下面的命令确认:

sh
~/.local/bin/ghostty --appimage-help

环境文件名必须跟随AppImage文件名。例如将AppImage重命名为ghostty-1.3.1后,环境文件也要改为ghostty-1.3.1.env

这种方式无需解包或重新打包AppImage。更新时只要继续使用ghostty这个文件名,原来的ghostty.env就能继续使用。

资源收藏
在 Linux 下直接运行 Windows 分区中的游戏
Valaxy v0.28.10 驱动|主题-Yunv0.28.10