欢迎光临
我们一直在努力

在 Ubuntu 22.04 上安装 Ghostty 终端

文章目录

  • 在 Ubuntu 22.04 上安装 Ghostty 终端
    • 背景
    • 环境
    • 挑战 1:libadwaita 版本问题
      • 解决方案
    • 完整编译步骤(方案 A)
      • 1. 安装系统依赖
      • 2. 安装 Zig
      • 3. 编译安装 libadwaita 1.5.x
      • 4. 克隆并编译 Ghostty
      • 5. 安装
      • 6. 更新快捷键指向新二进制
    • 方案 B:利用 snap 内部库绕过编译(推荐)
      • 原理
      • 步骤
        • 1. 找到 snap ghostty 的实际二进制路径
        • 2. 创建启动脚本
        • 3. 更新快捷键
        • 4. 验证速度
    • 性能对比
    • 常见问题
      • Q: `blueprint-compiler` 找不到?
      • Q: `glib-compile-resources` 报错?
      • Q: Zig 编译 OOM?
      • Q: 编译完成后快捷键还是慢?
      • Q: 如何确认 snap 的 revision 号?
    • 参考

在 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. 安装系统依赖

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

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 必须从源码编译。

# 克隆 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

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. 安装

# 安装到 ~/.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. 更新快捷键指向新二进制

# 查看当前快捷键配置
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 的实际二进制路径

find /snap/ghostty -name "ghostty" -type f 2>/dev/null
# 输出: /snap/ghostty/718/bin/ghostty

2. 创建启动脚本

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. 更新快捷键

dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty/command "'/home/YOUR_USERNAME/bin/ghostty-fast'"

4. 验证速度

# 方案 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 找不到?

sudo apt install blueprint-compiler

Q: glib-compile-resources 报错?

确保 glib2.0-dev 已安装:

sudo apt install glib-2.0-dev libglib2.0-dev

Q: Zig 编译 OOM?

Ghostty 编译占用内存较高,建议至少 16GB 内存。32 核机器编译约需数分钟。

Q: 编译完成后快捷键还是慢?

确保快捷键指向的是新的二进制路径:

dconf dump /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ghostty/
# command 应指向 ~/.local/bin/ghostty 或 ~/bin/ghostty-fast

Q: 如何确认 snap 的 revision 号?

snap list ghostty
# 输出包含 Revision: 718 这样的信息


参考

  • Ghostty GitHub
  • Ghostty HACKING.md
  • libadwaita GitLab
  • Zig Downloads
赞(0)
未经允许不得转载:171主机测评 » 在 Ubuntu 22.04 上安装 Ghostty 终端
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址