文章目录
- [在 Ubuntu 22.04 上安装 Ghostty 终端](#在 Ubuntu 22.04 上安装 Ghostty 终端)
-
- 背景
- 环境
- [挑战 1:libadwaita 版本问题](#挑战 1:libadwaita 版本问题)
- [完整编译步骤(方案 A)](#完整编译步骤(方案 A))
-
- [1. 安装系统依赖](#1. 安装系统依赖)
- [2. 安装 Zig](#2. 安装 Zig)
- [3. 编译安装 libadwaita 1.5.x](#3. 编译安装 libadwaita 1.5.x)
- [4. 克隆并编译 Ghostty](#4. 克隆并编译 Ghostty)
- [5. 安装](#5. 安装)
- [6. 更新快捷键指向新二进制](#6. 更新快捷键指向新二进制)
- [方案 B:利用 snap 内部库绕过编译(推荐)](#方案 B:利用 snap 内部库绕过编译(推荐))
- 性能对比
- 常见问题
-
- [Q: `blueprint-compiler` 找不到?](#Q:
blueprint-compiler找不到?) - [Q: `glib-compile-resources` 报错?](#Q:
glib-compile-resources报错?) - [Q: Zig 编译 OOM?](#Q: Zig 编译 OOM?)
- [Q: 编译完成后快捷键还是慢?](#Q: 编译完成后快捷键还是慢?)
- [Q: 如何确认 snap 的 revision 号?](#Q: 如何确认 snap 的 revision 号?)
- [Q: `blueprint-compiler` 找不到?](#Q:
- 参考
在 Ubuntu 22.04 上安装 Ghostty 终端
Ghostty 是由 mitchellh 开发的高性能终端模拟器,基于 Zig 语言编写,默认使用平台原生 UI 和 GPU 加速渲染。
背景
Ghostty 官方不提供 Linux 通用预编译包,只提供 snap 安装方式。在 Ubuntu 22.04 上:
- Snap 方式 :
snap run ghostty启动约 95ms - 理想情况 :直接从源码编译的 ghostty 约 14ms
但从源码编译在 Ubuntu 22.04 上存在 libadwaita 版本过旧的问题,本文记录完整踩坑过程。
环境
- OS: Ubuntu 22.04.5 LTS (Jammy Jellyfish)
- Zig: 0.15.2 (从官网下载,解压即用,下载特别慢!)
- Ghostty snap: 1.3.1
- CPU : 32 核 / 内存: 125GB
挑战 1:libadwaita 版本问题
Ghostty 使用 GTK4 + libadwaita 1.5+ 的蓝图(Blueprint)语法编写 UI。Ubuntu 22.04 官方源中的 libadwaita 版本为 1.1.7 ,远低于 Ghostty 要求的 1.5.0。
$ pkg-config --modversion libadwaita-1
1.1.7 # Ghostty 需要 >= 1.5.0
这导致直接 zig build 会失败:
`libadwaita` is too old.
Ghostty requires a version 1.5.0 or newer of `libadwaita` to
compile this blueprint.
解决方案
从 adwaita 官方源码编译 libadwaita 1.5.x(或更新版本),安装到 /usr/local 覆盖系统旧版。
完整编译步骤(方案 A)
1. 安装系统依赖
bash
sudo apt update
sudo apt install -y \
meson \
ninja-build \
python3-markdown \
libgtk-4-dev \
glib-2.0-dev \
libgusb-dev \
libpango1.0-dev \
libatk1.0-dev \
libatspi2.0-dev \
libkeybinder-3.0-dev \
libsodium-dev \
blueprint-compiler \
libgirepository1.0-dev \
libglib2.0-dev \
gobject-introspection \
libcairo2-dev \
libpcre2-dev \
libgresource0 \
libsecret-1-dev \
libunibilium-dev
注意:Ubuntu 22.04 官方源中以下包需特殊处理:
libadwaita-1-dev--- 版本 1.1.7,远低于要求的 1.5.0,需从源码编译libwebkitgtk-6.0-dev--- Ubuntu 22.04 可能只有 webkitgtk-4.0
2. 安装 Zig
bash
cd ~/Downloads
wget https://ziglang.org/download/0.15.2/zig-linux-x86_64-0.15.2.tar.xz
tar -xf zig-linux-x86_64-0.15.2.tar.xz
# Zig 不需要"安装",解压后直接用
~/Downloads/zig-linux-x86_64-0.15.2/zig version
# 输出: 0.15.2
3. 编译安装 libadwaita 1.5.x
这是最关键的步骤,Ubuntu 22.04 的 libadwaita 必须从源码编译。
bash
# 克隆 adwaita 源码
git clone https://gitlab.gnome.org/GNOME/libadwaita.git ~/codes/libadwaita
cd ~/codes/libadwaita
# 切换到 1.5.x 分支(Ghostty 要求 >= 1.5.0)
git checkout libadwaita-1.5
# 使用 meson 配置并安装到 /usr/local(不干扰系统旧版库)
meson setup _build /tmp/libadwaita-build \
--prefix=/usr/local \
-Ddocumentation=false \
-Dtests=false
ninja -C /tmp/libadwaita-build
sudo ninja -C /tmp/libadwaita-build install
# 更新动态链接缓存,使新版本被找到
sudo ldconfig
# 验证版本
pkg-config --modversion libadwaita-1
# 应输出 1.5.x
4. 克隆并编译 Ghostty
bash
git clone https://github.com/ghostty-org/ghostty.git ~/codes/ghostty
cd ~/codes/ghostty
# 编译(ReleaseFast 优化)
~/Downloads/zig-linux-x86_64-0.15.2/zig build -Doptimize=ReleaseFast
编译产物位于 ~/codes/ghostty/zig-out/bin/ghostty。
5. 安装
bash
# 安装到 ~/.local/bin(无需 sudo)
mkdir -p ~/.local/bin
cp ~/codes/ghostty/zig-out/bin/ghostty ~/.local/bin/ghostty
# 添加到 PATH(如 ~/.bashrc 中尚未添加)
grep -q 'HOME/.local/bin' ~/.bashrc || echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 验证
ghostty --version
6. 更新快捷键指向新二进制
bash
# 查看当前快捷键配置
dconf dump /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty/
# 将 command 改为新路径,例如
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty/command "'/home/YOUR_USERNAME/.local/bin/ghostty'"
方案 B:利用 snap 内部库绕过编译(推荐)
如果不想经历 libadwaita 源码编译的繁琐过程,可以利用 snap 自带的 libadwaita 1.5.0,直接运行 snap 内部二进制,绕过 snap run 的开销。
原理
snap run ghostty 约 95ms,但直接调用 snap 内部的二进制只需约 14ms。snap run 的开销主要来自 snapd 包装层的初始化。snap ghostty 内部已经绑定了正确版本的 libadwaita (1.5.0)。
步骤
1. 找到 snap ghostty 的实际二进制路径
bash
find /snap/ghostty -name "ghostty" -type f 2>/dev/null
# 输出: /snap/ghostty/718/bin/ghostty
2. 创建启动脚本
bash
mkdir -p ~/bin
cat > ~/bin/ghostty-fast << 'EOF'
#!/bin/bash
exec env \
LD_LIBRARY_PATH=/snap/ghostty/718/usr/lib/x86_64-linux-gnu:/snap/ghostty/718/lib \
GHOSTTY_RESOURCES_DIR=/snap/ghostty/current/share/ghostty \
LC_ALL=C.UTF-8 \
/snap/ghostty/718/bin/ghostty --gtk-single-instance=true "$@"
EOF
chmod +x ~/bin/ghostty-fast
注意 :
718是当前 snap revision,需根据实际情况调整。
3. 更新快捷键
bash
dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty/command "'/home/YOUR_USERNAME/bin/ghostty-fast'"
4. 验证速度
bash
# 方案 B(snap 二进制 + LD_LIBRARY_PATH)
$ time ~/bin/ghostty-fast --version
real 0m0.014s
# 对比 snap run
$ time snap run ghostty --version
real 0m0.095s
14ms vs 95ms,约 7 倍提升。
性能对比
| 启动方式 | 耗时 |
|---|---|
snap run ghostty |
~95ms |
| snap 二进制 + LD_LIBRARY_PATH | ~14ms |
| 从源码编译 ghostty(理想情况) | ~14ms |
方案 A(从源码编译)和方案 B(利用 snap 内部库)效果相当,但方案 B 更简单,无需编译 libadwaita。
常见问题
Q: blueprint-compiler 找不到?
bash
sudo apt install blueprint-compiler
Q: glib-compile-resources 报错?
确保 glib2.0-dev 已安装:
bash
sudo apt install glib-2.0-dev libglib2.0-dev
Q: Zig 编译 OOM?
Ghostty 编译占用内存较高,建议至少 16GB 内存。32 核机器编译约需数分钟。
Q: 编译完成后快捷键还是慢?
确保快捷键指向的是新的二进制路径:
bash
dconf dump /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty/
# command 应指向 ~/.local/bin/ghostty 或 ~/bin/ghostty-fast
Q: 如何确认 snap 的 revision 号?
bash
snap list ghostty
# 输出包含 Revision: 718 这样的信息