- 保持
192.168.114.4本机 Chromium CDP 监听127.0.0.1:9222(不改为0.0.0.0) - 在
192.168.114.3上通过 Claude Code / Codex 使用chrome-devtools-mcp - 通过 SSH 反向转发实现:
114.3:127.0.0.1:9222 -> 114.4:127.0.0.1:9222
方案选择
不采用“开放局域网端口”方案,采用 SSH 隧道方案,原因:
- CDP 仍仅绑定 loopback,暴露面更小
- 不需要改现有
/usr/local/bin/ungoogled-chromium-cdp - SSH 会话断开后端口自动释放,生命周期清晰
网络与角色
192.168.114.4:Chromium 实际运行主机(当前工作站)192.168.114.3:Claude/Codex 使用端- 操作习惯:从
114.4主动ssh 192.168.114.3
前置确认
在 114.4 上确认 CDP 监听:
ss -lntp | rg 9222
应看到类似:
LISTEN 0 10 127.0.0.1:9222 0.0.0.0:* users:(("chrome",pid=...,fd=...))
并确认启动脚本未修改为公网/局域网监听:
sed -n '1,80p' /usr/local/bin/ungoogled-chromium-cdp
关键参数应为:
--remote-debugging-address=127.0.0.1
--remote-debugging-port=9222
实施过程
1) 在 114.4 的 ~/.ssh/config 增加 RemoteForward
编辑 114.4 本机 ~/.ssh/config,在 Host 192.168.114.3 下增加:
Host 192.168.114.3
User van
ExitOnForwardFailure yes
ServerAliveInterval 30
ServerAliveCountMax 3
RemoteForward 127.0.0.1:9222 127.0.0.1:9222
说明:
- 左侧
127.0.0.1:9222是远端(114.3)监听点 - 右侧
127.0.0.1:9222是本地(114.4)目标点
2) 建立会话并在 114.3 验证隧道
从 114.4 发起连接:
ssh 192.168.114.3
在 114.3 shell 内执行:
curl -sS http://127.0.0.1:9222/json/version
本次实测返回包含:
Browser: Chrome/146.0.7680.71webSocketDebuggerUrl: ws://127.0.0.1:9222/devtools/browser/...
3) 在 114.3 配置 Claude Code MCP
先添加 server:
claude mcp add -s user chrome-devtools -- \
npx -y chrome-devtools-mcp@latest \
--browser-url http://127.0.0.1:9222
再在 ~/.claude.json 中补齐代理环境(本次环境需要):
{
"mcpServers": {
"chrome-devtools": {
"env": {
"HTTP_PROXY": "http://192.168.114.9:7890",
"HTTPS_PROXY": "http://192.168.114.9:7890",
"ALL_PROXY": "socks5://192.168.114.9:7890",
"NO_PROXY": "127.0.0.1,localhost,192.168.114.0/24,192.168.3.0/24"
}
}
}
}
原因:
114.3上直接npx拉取 npm 包出现EAI_AGAIN(DNS/外网可达性问题)- 给 MCP 子进程加代理后恢复可用
4) 在 114.3 配置 Codex MCP
codex mcp add \
--env HTTP_PROXY=http://192.168.114.9:7890 \
--env HTTPS_PROXY=http://192.168.114.9:7890 \
--env ALL_PROXY=socks5://192.168.114.9:7890 \
--env NO_PROXY=127.0.0.1,localhost,192.168.114.0/24,192.168.3.0/24 \
chrome-devtools -- \
npx -y chrome-devtools-mcp@latest \
--browser-url http://127.0.0.1:9222
验证记录
2026-06-17 KDE 任务栏入口改为 CDP 启动
背景
本次目标不是临时从命令行启动 CDP 浏览器,而是让本地 KDE 任务栏里已经固定的 ungoogled-chromium 图标每次点击都启动支持 CDP 的浏览器。
先确认当前面板固定项:
rg -n "launchers=.*ungoogled-chromium.desktop|ungoogled-chromium.desktop" \
~/.config/plasma-org.kde.plasma.desktop-appletsrc \
~/.config/kactivitymanagerd-statsrc
关键结果:
~/.config/plasma-org.kde.plasma.desktop-appletsrc:51:launchers=...,applications:ungoogled-chromium.desktop,...
说明 KDE 面板引用的是 applications:ungoogled-chromium.desktop。本机同时存在系统级和用户级 desktop 文件,用户级文件优先:
~/.local/share/applications/ungoogled-chromium.desktop/usr/share/applications/ungoogled-chromium.desktop
因此只修改用户级 desktop 文件,避免影响系统全局配置。
修改内容
修改文件:
~/.local/share/applications/ungoogled-chromium.desktop
关键字段修改为:
Name=Ungoogled Chromium (CDP)
Comment=Browse the web with local CDP on 127.0.0.1:9222
Exec=/usr/local/bin/ungoogled-chromium --ozone-platform=x11 --user-data-dir=/home/dev/.config/chromium-cdp-codex --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --no-first-run --disable-default-apps %U
StartupWMClass=chromium-browser
这里显式使用独立 profile:
/home/dev/.config/chromium-cdp-codex
原因:
- 如果复用默认 profile,而默认 ungoogled-chromium 已经运行,新的
--remote-debugging-port参数可能被已有进程忽略。 - 独立 profile 可以保证任务栏点击启动的是 CDP 专用实例。
- CDP 继续绑定
127.0.0.1:9222,不开放 LAN 监听。
刷新 KDE 应用缓存:
kbuildsycoca6 --noincremental
输出:
kbuildsycoca6 running...
校验 desktop 文件:
desktop-file-validate ~/.local/share/applications/ungoogled-chromium.desktop
无输出表示校验通过。
临时启动与反向隧道
本次先用命令行启动了同一个 CDP profile,确保当前会话立即可用:
mkdir -p "$HOME/.config/chromium-cdp-codex" "$HOME/.local/state/codex-cdp"
setsid -f env DISPLAY=:1 WAYLAND_DISPLAY=wayland-0 XDG_SESSION_TYPE=wayland \
/usr/local/bin/ungoogled-chromium \
--ozone-platform=x11 \
--user-data-dir="$HOME/.config/chromium-cdp-codex" \
--remote-debugging-address=127.0.0.1 \
--remote-debugging-port=9222 \
--no-first-run \
--disable-default-apps \
--new-window about:blank \
>"$HOME/.local/state/codex-cdp/ungoogled-chromium-cdp.log" 2>&1
建立到 192.168.114.3 的 SSH reverse tunnel:
ssh -f -N -T \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-R 127.0.0.1:9222:127.0.0.1:9222 \
192.168.114.3
注意:中途会话被中断后,后台 SSH tunnel 曾经消失,表现为 192.168.114.3 上 curl http://127.0.0.1:9222/json/version 返回连接失败。重新执行上面的 ssh -R 命令后恢复。
验证结果
本机验证:
ss -ltnp | rg ':9222\b'
curl -sS --max-time 3 http://127.0.0.1:9222/json/version
关键输出:
LISTEN 0 10 127.0.0.1:9222 0.0.0.0:* users:(("chrome",pid=414646,fd=97))
{
"Browser": "Chrome/147.0.7727.101",
"Protocol-Version": "1.3",
"webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/f7f111f1-057f-4d4b-817b-9db84711f754"
}
远端 192.168.114.3 验证:
ssh 192.168.114.3
ss -ltnp | grep -E "127\\.0\\.0\\.1:9222\\b|\\[::1\\]:9222\\b"
curl -sS --max-time 3 http://127.0.0.1:9222/json/version
关键输出:
LISTEN 0 128 127.0.0.1:9222 0.0.0.0:*
{
"Browser": "Chrome/147.0.7727.101",
"Protocol-Version": "1.3",
"webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/f7f111f1-057f-4d4b-817b-9db84711f754"
}
当前使用方式
- 本机 Codex 使用:
http://127.0.0.1:9222 192.168.114.3上的 Codex 使用:http://127.0.0.1:9222- 本地 KDE 任务栏点击
Ungoogled Chromium (CDP),会按上述 desktop 文件启动 CDP profile。 - 若重启后远端 Codex 需要继续复用本机浏览器,仍需重新建立
ssh -R,除非后续改成 systemd user service 或 SSH config 常驻会话。
1) MCP 连接状态
在 114.3 上:
claude mcp get chrome-devtools
codex mcp get chrome-devtools --json
关键结果:
- Claude:
Status: ✓ Connected - Codex:
args指向--browser-url http://127.0.0.1:9222
2) Codex 通过 CDP MCP 实测打开页面
在 114.3 上执行:
codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check -C /home/van \
"使用 chrome-devtools MCP 打开 https://www.baidu.com ,并返回页面标题与最终 URL。"
实测返回:
- 页面标题:
百度一下,你就知道 - 最终 URL:
https://www.baidu.com/
常见问题
1) remote port forwarding failed for listen port 9222
原因:
- 远端
114.3:9222已被其他 SSH 隧道占用(通常是旧会话未断开)
处理:
- 断开旧 SSH 会话
- 或在
114.3检查并释放占用后重连
2) npx 相关 MCP 启动失败(EAI_AGAIN)
原因:
- npm registry 解析/访问异常
处理:
- 在 Claude/Codex MCP 的
env中显式设置代理变量(见上文)
日常使用建议
- 先在
114.4启动 Chromium CDP(保持127.0.0.1:9222) - 从
114.4执行ssh 192.168.114.3保持会话在线 - 在该 SSH 会话中启动
claude或codex,直接使用chrome-devtoolsMCP - 完成后断开 SSH,会自动回收转发
回滚
回滚 114.4 SSH 配置
删除 ~/.ssh/config 中 Host 192.168.114.3 下的:
ExitOnForwardFailureServerAliveIntervalServerAliveCountMaxRemoteForward 127.0.0.1:9222 127.0.0.1:9222
回滚 114.3 MCP
claude mcp remove -s user chrome-devtools
codex mcp remove chrome-devtools
关联笔记
更早的本机部署与基础配置参考:ungoogled-chromium-作为-cdp-mcp-浏览器的部署与实践