Skip to content

OpenClaw 浏览器 Linux 故障排查指南

OpenClaw 在 Linux 上浏览器控制失败时,常见原因是系统默认的 snap Chromium 受 AppArmor 限制。推荐直接安装官方 Google Chrome 并配置 executablePath,或使用 attachOnly 模式挂载手动启动的 snap Chromium 实例。验证浏览器是否正常工作可通过 curl -s http://127.0.0.1:18791/ | jq 检查运行状态。

问题:「Failed to start Chrome CDP on port 18800」

OpenClaw 浏览器控制服务无法启动 Chrome/Brave/Edge/Chromium,报错如下:

{"error":"Error: Failed to start Chrome CDP on port 18800 for profile \"openclaw\"."}

根本原因

在 Ubuntu(及许多 Linux 发行版)上,默认 Chromium 安装是 snap 包。snap 的 AppArmor 沙盒机制会干扰 OpenClaw 启动和监控浏览器进程的方式。

apt install chromium 命令安装的是一个会重定向到 snap 的桩包:

Note, selecting 'chromium-browser' instead of 'chromium'
chromium-browser is already the newest version (2:1snap1-0ubuntu2).

这不是真正的浏览器——只是一个包装器。

其他常见的 Linux 启动失败原因:

  • The profile appears to be in use by another Chromium process 表示 Chrome 在被管理的 profile 目录中发现了过期的 Singleton* 锁文件。当锁指向一个已死亡或不同主机的进程时,OpenClaw 会移除这些锁并重试一次。
  • Missing X server or $DISPLAY 表示在没有桌面会话的主机上显式请求了可见浏览器。默认情况下,当 DISPLAYWAYLAND_DISPLAY 都未设置时,本地托管 profile 会在 Linux 上回退到无头模式。如果你设置了 OPENCLAW_BROWSER_HEADLESS=0browser.headless: falsebrowser.profiles.<name>.headless: false,请移除该头部覆盖设置,设置 OPENCLAW_BROWSER_HEADLESS=1、启动 Xvfb、运行 openclaw browser start --headless 进行一次性托管启动,或者在真实的桌面会话中运行 OpenClaw。

方案一:安装 Google Chrome(推荐)

安装官方 Google Chrome .deb 包,它不受 snap 沙盒约束:

bash
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt --fix-broken install -y  # 如有依赖错误

然后更新 OpenClaw 配置(~/.openclaw/openclaw.json):

json
{
  "browser": {
    "enabled": true,
    "executablePath": "/usr/bin/google-chrome-stable",
    "headless": true,
    "noSandbox": true
  }
}

方案二:以仅挂载模式使用 snap Chromium

如果必须使用 snap Chromium,可以配置 OpenClaw 挂载手动启动的浏览器:

  1. 更新配置
json
{
  "browser": {
    "enabled": true,
    "attachOnly": true,
    "headless": true,
    "noSandbox": true
  }
}
  1. 手动启动 Chromium
bash
chromium-browser --headless --no-sandbox --disable-gpu \
  --remote-debugging-port=18800 \
  --user-data-dir=$HOME/.openclaw/browser/openclaw/user-data \
  about:blank &
  1. 可选:创建 systemd 用户服务让浏览器开机自启
ini
# ~/.config/systemd/user/openclaw-browser.service
[Unit]
Description=OpenClaw Browser (Chrome CDP)
After=network.target

[Service]
ExecStart=/snap/bin/chromium --headless --no-sandbox --disable-gpu --remote-debugging-port=18800 --user-data-dir=%h/.openclaw/browser/openclaw/user-data about:blank
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

启用服务:systemctl --user enable --now openclaw-browser.service

验证浏览器是否正常工作

检查状态:

bash
curl -s http://127.0.0.1:18791/ | jq '{running, pid, chosenBrowser}'

测试浏览:

bash
curl -s -X POST http://127.0.0.1:18791/start
curl -s http://127.0.0.1:18791/tabs

配置参数参考

选项说明默认值
browser.enabled启用浏览器控制true
browser.executablePathChromium 内核浏览器二进制路径(Chrome/Brave/Edge/Chromium)自动检测(偏好在基于 Chromium 时的默认浏览器)
browser.headless无界面运行false
OPENCLAW_BROWSER_HEADLESS针对本地托管浏览器的无头模式按进程覆盖未设置
browser.noSandbox添加 --no-sandbox 标志(部分 Linux 环境必需)false
browser.attachOnly不启动浏览器,仅挂载已有实例false
browser.cdpPortChrome DevTools Protocol 端口18800
browser.localLaunchTimeoutMs本地托管 Chrome 发现超时15000
browser.localCdpReadyTimeoutMs本地托管启动后 CDP 就绪超时8000

在树莓派、老旧 VPS 主机或慢速存储上,当 Chrome 需要更长时间暴露其 CDP HTTP 端点时,可以调高 browser.localLaunchTimeoutMs。当启动成功但 openclaw browser start 仍报告 not reachable after start 时,可以调高 browser.localCdpReadyTimeoutMs。值必须是正整数,上限 120000 ms;无效配置值将被拒绝。

问题:「No Chrome tabs found for profile="user"」

你使用了 existing-session / Chrome MCP profile。OpenClaw 能找到本地 Chrome,但没有可挂载的已打开标签页。

解决方式

  1. 使用托管浏览器:openclaw browser start --browser-profile openclaw(或设置 browser.defaultProfile: "openclaw")。
  2. 使用 Chrome MCP:确保本地 Chrome 已运行且至少有一个打开的标签页,然后用 --browser-profile user 重试。

注意

  • user 仅限主机本地。对于 Linux 服务器、容器或远程主机,优先使用 CDP profiles。
  • user / 其他 existing-session profiles 保持当前 Chrome MCP 限制:基于引用的操作、单文件上传钩子、无对话框超时覆盖、无 wait --load networkidle 以及无 responsebody、PDF 导出、下载拦截或批处理操作。
  • 本地 openclaw profiles 自动分配 cdpPort/cdpUrl;仅对远程 CDP 设置这些值。
  • 远程 CDP profiles 接受 http://https://ws://wss://。使用 HTTP(S) 进行 /json/version 发现,或使用 WS(S) 当浏览器服务提供直接 DevTools 套接字 URL。

常见问题

为什么 Linux 上安装了 Chrome 还是报端口 18800 启动失败?

最常见原因是 browser.executablePath 未指向正确的浏览器二进制文件。确保配置中 executablePath 设置为 /usr/bin/google-chrome-stable(或实际安装路径)。另外,检查是否存在 snap 守护进程冲突,可尝试添加 browser.noSandbox: true

snap Chromium 在 OpenClaw 中无法正常使用怎么办?

snap Chromium 受 AppArmor 限制,无法被 OpenClaw 直接托管启动。建议改用方案一安装 Google Chrome,如果必须用 snap,则按照方案二配置 attachOnly: true 并手动启动浏览器,或创建 systemd 服务让其自动运行。

如何快速验证浏览器控制是否正常工作?

运行 curl -s http://127.0.0.1:18791/ | jq 检查 runningpidchosenBrowser 字段。如果 runningtruechosenBrowser 显示正确,说明浏览器控制正常运行。否则,检查 OpenClaw 日志或浏览器进程状态。