# 前置文档 2 · 虚拟桌面中文化 + 安装 Firefox 详细指南

> **分享版说明（wb-keepalive 前置条件）**
> - 本文档是 **wb-keepalive skill 的前置条件之一**：保活工具依赖 Firefox 以 `--marionette` 模式运行，容器里必须先有一个"真 Firefox"。
> - **核心章节**：§2（安装 Firefox，绕过 Ubuntu 24.04 snap 陷阱，**必读**）、§1（中文化，可选但推荐）、§5 坑表、§6 最短路径。
> - 文中 `*.trycloudflare.com` 域名为当时示例（quick tunnel 约 1h 回收，早已失效），请按需重跑命令获取你自己的新域名。
> - 所有命令均实测可复现，非虚构。

---

## 0. 前情

- 桌面环境：XFCE（通过 TigerVNC `:1` 暴露，端口 5901；搭建见前置文档 1）
- 系统：Ubuntu 24.04.4 LTS（容器，非持久）
- 目标：① 桌面和字体中文化 ② 装一个**能真正用**的 Firefox（绕过 Ubuntu 24.04 的 snap 陷阱）

---

## 1. 中文化：字体 + locale + 桌面语言（可选，推荐）

### 1.1 装中文字体

```bash
DEBIAN_FRONTEND=noninteractive apt-get install -y \
  fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk language-pack-zh-hans
```

装完验证：
```bash
fc-list :lang=zh | head
# 应输出 Noto Serif CJK SC / Wqy Zen Hei 等
```

### 1.2 生成中文 locale

```bash
locale-gen zh_CN.UTF-8
update-locale LANG=zh_CN.UTF-8
```

> 注意：`update-locale` 有时不生效（实测 LANG 仍是 en_US），但**真正的 locale 数据已生成**，关键是 VNC 会话启动时用环境变量注入（见 1.3），不依赖系统全局 LANG。

验证：
```bash
locale -a | grep -i zh
# zh_CN.utf8 / zh_SG.utf8
```

### 1.3 让 XFCE 会话用中文（关键步骤）

编辑 VNC 的 `~/.vnc/xstartup`，在 `startxfce4` 前导出中文环境变量：

```bash
cat > /root/.vnc/xstartup <<'EOF'
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
export LC_ALL=zh_CN.UTF-8
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
exec startxfce4
EOF
chmod +x /root/.vnc/xstartup
```

### 1.4 重启 VNC 会话让中文生效

```bash
vncserver -kill :1
vncserver :1 -geometry 1280x720 -depth 24
```

> ⚠ **客户端必须断开重连一次**才能看到中文桌面（已建立的 VNC 连接不会热加载新 locale）。

---

## 2. 安装 Firefox（★ wb-keepalive 前置核心，必读）

### 2.1 坑：Ubuntu 24.04 的 firefox 是 snap 占位包

```bash
apt-get install -y firefox
```

装完发现 `/usr/bin/firefox` **不是真二进制，是 snap 跳板**：
```bash
head -5 /usr/bin/firefox
# #!/bin/sh
# if ! [ -x /snap/bin/firefox ]; then
#     echo "Command '$0' requires the firefox snap to be installed."
```

而容器**没有可用的 snapd**（`System doesn't have a working snapd, skipping`），所以 snap 版 Firefox 根本跑不起来。Chromium 同理是 snap 封装 + 沙箱 dbus 问题，也残。

> 结论：**Ubuntu 24.04 官方 apt 源里的 chromium / firefox 都是 snap 壳，在无 snapd 容器里不能用。**

### 2.2 正确做法：下 Mozilla 官方 tarball

直接从 Mozilla 官方下载 Linux 64 位 zh-CN 版（绕过 apt/snap）：

```bash
curl -fsSL -o /tmp/firefox.tar.bz2 \
  "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=zh-CN"
```

下载后检查文件类型——**关键坑**：
```bash
file /tmp/firefox.tar.bz2
# 实际是: XZ compressed data, checksum CRC64
```

虽然文件名是 `.tar.bz2`，但 Mozilla 返回的是 **xz 格式**！用 `tar xjf` 解会报 `Child returned status 2`。

### 2.3 解压（用 xz 模式）

```bash
tar xJf /tmp/firefox.tar.bz2 -C /opt/
# 解压出 /opt/firefox/firefox 真二进制
```

> 如果之前误用 `tar xjf` 失败，改用 `tar xJf`（大写 J = xz）即可。

### 2.4 建命令链接 + 验证

```bash
ln -sf /opt/firefox/firefox /usr/local/bin/firefox
firefox --version
# Mozilla Firefox 154.0
```

验证指向真二进制（不是 snap 跳板）：
```bash
readlink -f $(which firefox)
# /opt/firefox/firefox  ✅
```

### 2.5 桌面 X 下启动验证

```bash
export DISPLAY=:1
firefox --no-sandbox           # 正常桌面模式，在 VNC 里能看到窗口
```

### 2.6 中文语言包（官方 tarball 已含）

Mozilla 官方 zh-CN 版 tarball **自带中文**，无需额外装 `firefox-locale-zh-hans`（那个 apt 包也是 snap 壳，无用）。启动后界面即为中文。

---

## 3. 踩坑清单

| # | 坑 | 现象 | 解决 |
|---|---|---|---|
| 1 | `apt install firefox` 是 snap 壳 | `/usr/bin/firefox` 不是真二进制，跑不起来 | 下 Mozilla 官方 tarball |
| 2 | 下载文件后缀 `.tar.bz2` 实际是 xz | `tar xjf` 报 `Child returned status 2` | 改用 `tar xJf` |
| 3 | `update-locale` 不生效 | LANG 仍是 en_US | 在 xstartup 用 `export LANG=zh_CN.UTF-8` 注入会话 |
| 4 | 桌面中文不立即生效 | 重连前还是英文 | 客户端断开 VNC 重连一次 |
| 5 | Chromium 在容器抽风 | dbus/SSL 报错一堆 | 弃用，换 Firefox 官方版 |

---

## 4. 最短复现路径（懒人版）

```bash
# 中文化(可选)
apt-get install -y fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk language-pack-zh-hans
locale-gen zh_CN.UTF-8
cat > /root/.vnc/xstartup <<'EOF'
#!/bin/sh
unset SESSION_MANAGER; unset DBUS_SESSION_BUS_ADDRESS
export LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh LC_ALL=zh_CN.UTF-8
exec startxfce4
EOF
chmod +x /root/.vnc/xstartup
vncserver -kill :1 && vncserver :1 -geometry 1280x720 -depth 24

# Firefox（官方 tarball，绕过 snap）
curl -fsSL -o /tmp/ff.tar.xz "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=zh-CN"
tar xJf /tmp/ff.tar.xz -C /opt/
ln -sf /opt/firefox/firefox /usr/local/bin/firefox
```

> 注：上面 Firefox 下载 URL 实际返回 xz 格式，故文件名用 `.tar.xz` + `tar xJf`。

---

*原实录生成于 2026-08-24 · Firefox 154.0 / XFCE / Ubuntu 24.04 容器实测 · 分享版整理时标注了与本 skill 的相关性*
