在 Ubuntu 22.04 上安装 Ghostty 终端

文章目录

  • [在 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 内部库绕过编译(推荐))
      • 原理
      • 步骤
        • [1. 找到 snap ghostty 的实际二进制路径](#1. 找到 snap ghostty 的实际二进制路径)
        • [2. 创建启动脚本](#2. 创建启动脚本)
        • [3. 更新快捷键](#3. 更新快捷键)
        • [4. 验证速度](#4. 验证速度)
    • 性能对比
    • 常见问题
      • [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 号?)
    • 参考

在 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 这样的信息

参考

相关推荐
MXsoft6181 小时前
【无标题】
运维·自动化
buhuizhiyuci1 小时前
熟练使用Linux编译工具(gcc, g++, make, makefile)
linux·运维·服务器
健康平安的活着1 小时前
使用tsf分析服务器的内存使用情况【经典版】
运维·服务器
wechatbot8882 小时前
企业微信 iPad 协议客服机器人自动化管理平台开发指南
java·运维·微信·自动化·企业微信·ipad
草莓熊Lotso2 小时前
从 LLM 底层原理到 LangChain 全链路打通:大模型应用开发新征程
linux·运维·服务器·人工智能·langchain
cyber_两只龙宝2 小时前
【Oracle】Oracle数据库的登录验证
linux·运维·数据库·sql·云原生·oracle
思麟呀2 小时前
5种IO模型
linux·运维·服务器·c++
YaBingSec2 小时前
玄机靶场-2024ccb初赛sc05 WP
android·运维·网络·笔记·安全·ssh
Andytoms2 小时前
小桔调研:3分钟Docker搭建问卷系统
运维·docker·容器