在Ubuntu 22.04的X11会话中运行Ghostty AppImage时,Fcitx5可以切换输入法,但无法在Ghostty中输入中文,其他应用不受影响。
本文使用的Ghostty 1.3.1 AppImage来自pkgforge-dev/ghostty-appimage,运行时为uruntime。
修复方法
假设AppImage位于~/.local/bin/ghostty。先安装Fcitx5的GTK4前端:
sudo apt install fcitx5-frontend-gtk4在AppImage旁创建同名的环境文件:
cat > ~/.local/bin/ghostty.env <<'EOF'
GTK_PATH=/usr/lib/x86_64-linux-gnu/gtk-4.0
EOF完全退出所有Ghostty进程,再重新启动。日志中出现下面的内容表示环境文件已经生效:
Read env file: "~/.local/bin/ghostty.env"实际日志会显示用户主目录的绝对路径,本文用~代替。
原因
这个AppImage带有自己的GTK 4运行库,但没有打包GTK输入法模块和打印后端。宿主机的GTK4目录中包含:
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都支持。可以运行下面的命令确认:
~/.local/bin/ghostty --appimage-help环境文件名必须跟随AppImage文件名。例如将AppImage重命名为ghostty-1.3.1后,环境文件也要改为ghostty-1.3.1.env。
这种方式无需解包或重新打包AppImage。更新时只要继续使用ghostty这个文件名,原来的ghostty.env就能继续使用。