在 WSL 2 安装 Google Chrome:WSLg、无头测试与故障排查

维护说明(复核于 2026-09-01): 本文在基于 Ubuntu 或 Debian 的 WSL 发行版内部安装 Linux 版 Google Chrome。Microsoft 的 WSLg 指南已直接收录这一安装方法。下文将可见 GUI、无头自动化、CPU 架构和安全边界分开处理。

先判断你需要哪一个 Chrome

目标建议起点
在 Windows 正常浏览直接用 Windows Chrome;再安装一个 Linux 浏览器可能没有收益。
测试 Linux Chrome 二进制、字体或库按本文在 WSL 内安装。
使用 Playwright、Selenium 或 Puppeteer优先使用工具自行安装且明确支持的浏览器;项目确实要求系统 Chrome 时再安装。
显示 Linux 图形窗口使用带 WSLg 的 WSL 2。Microsoft 明确说明 WSL 1 不支持 WSL GUI 应用。
不开窗口地获取或渲染页面使用 Chrome Headless;基本的 --headless 测试不需要 WSLg。

1. 在 PowerShell 中检查 WSL

以下命令在 Windows PowerShell 中运行,不是在 Linux 终端中:

wsl --version
wsl --status
wsl --list --verbose

如果需要显示 Chrome 窗口,发行版应显示为版本 2。Microsoft 目前将 Windows 10 build 19044 或更新版本,或 Windows 11,列为 WSLg 前提。需要时更新 WSL 并重启它的虚拟机:

wsl --update
wsl --shutdown

wsl --shutdown 会停止所有正在运行的 WSL 发行版,请先保存其中的工作。

2. 检查 Linux 发行版和 CPU 架构

在 WSL 中运行:

cat /etc/os-release
dpkg --print-architecture

下文使用的是 amd64 Debian 软件包。只有当架构输出为 amd64,并且发行版使用 Debian 软件包(例如 Ubuntu 或 Debian)时才继续。不要强行把它安装到 arm64、Fedora、openSUSE 或其他不兼容系统上;请改用发行版支持的浏览器包,或直接使用 Windows Chrome。

3. 下载并安装官方软件包

Microsoft WSLg 指南使用 Google 的稳定版软件包地址。在临时目录操作,避免下载文件污染项目:

cd /tmp
sudo apt update
sudo apt install --yes wget
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install --fix-broken ./google-chrome-stable_current_amd64.deb

apt 直接处理本地 ./package.deb 路径,可以在同一次操作里解决依赖。旧的 dpkg -i 再跟 apt install -f 也可能成功,但会暂时留下不完整的依赖状态,这里没有必要。

4. 验证安装结果

command -v google-chrome
google-chrome --version
apt-cache policy google-chrome-stable

三项检查分别回答:Shell 能否找到启动器、实际运行的浏览器版本,以及 APT 看到的软件包/仓库版本。

5. 通过 WSLg 显示 Chrome

在当前 WSL 2 + WSLg 环境中:

google-chrome

如果没有出现窗口,不要立即安装第三方 X server。先重查 wsl --list --verbose,运行 wsl --update,然后在 PowerShell 执行 wsl --shutdown 并重新启动发行版。遇到 cannot open display 时,下一步应查阅 Microsoft 的 WSLg 排错资料。

6. 验证无头 Chrome

Chrome 当前的无头命令参考使用:

google-chrome --headless --dump-dom https://example.com

也可以生成截图或 PDF:

google-chrome --headless --screenshot --window-size=1280,720 https://example.com
google-chrome --headless --print-to-pdf https://example.com

--dump-dom 不等同于 curl:Chrome 会先解析页面并运行脚本,再序列化 DOM。现代无头 Chrome 通常不需要旧的 --disable-gpu 规避参数。

自动化安全要点

  • 用普通 WSL 用户运行 Chrome。不要把 --no-sandbox 当成通用修复;它会移除重要安全边界。
  • 实验时用专用临时配置,不要复用日常浏览器配置:

```bash
chrome_wsl_profile="$(mktemp -d)"
google-chrome --headless --user-data-dir="$chrome_wsl_profile" --dump-dom https://example.com
```

  • 不要把远程调试端口暴露到 0.0.0.0 或不可信网络。调试端点可以控制浏览器并读取配置可访问的数据。
  • 页面在 Windows Chrome 中可用,不代表它在 WSL 中一定可用;代理、DNS、证书、字体、GPU、文件系统和架构都可能不同。

按症状排错

Unable to locate package 或依赖错误

确认下载文件存在,本地路径含有 ./

ls -lh /tmp/google-chrome-stable_current_amd64.deb
sudo apt update
sudo apt install --fix-broken /tmp/google-chrome-stable_current_amd64.deb

如果 dpkg --print-architecture 不是 amd64,请停止;修复依赖不能把不兼容二进制变成本机软件包。

cannot open display

检查发行版是否为 WSL 2,并查看 WSLg 环境变量:

printf 'DISPLAY=%snWAYLAND_DISPLAY=%sn' "$DISPLAY" "$WAYLAND_DISPLAY"

显示环境为空或损坏会影响可见模式,但未必影响无头模式。在编辑 Shell 启动文件或硬编码显示地址前,先诊断 WSLg。

自动化时 Chrome 退出

先捕获 Chrome 自己的日志:

google-chrome --headless --enable-logging=stderr --v=1 --dump-dom https://example.com

再独立测试网络解析:

curl -I https://example.com

不要把 --no-sandbox 当作诊断。改参数前,记录退出文本、Chrome 版本、WSL 版本、发行版、架构和自动化库版本。

更新或卸载 Chrome

sudo apt update
sudo apt install --only-upgrade google-chrome-stable

以下命令只卸载 Linux 软件包,不影响 Windows Chrome:

sudo apt remove google-chrome-stable

确认卸载前,先检查命令列出的软件包。

官方资料

软件包地址、Windows build、Chrome 参数和 WSL 要求都可能改变。上述命令与说明复核于 2026-09-01;以后复现时请重新核对官方页面。

Leave a Reply