本机 GUI 的 stdio MCP 要转发 DISPLAY,键名是 env_vars
Codex 默认不把 DISPLAY 交给 stdio 子进程。Playwright 有本机显示器却只有 snapshot 时,把 DISPLAY、WAYLAND_DISPLAY、XAUTHORITY、XDG_RUNTIME_DIR 写进 env_vars。这修不了沙箱。评论里的 env_args 不是现行键。
stdio MCP 不会继承你整个图形会话。Linux 上 Playwright / Chrome DevTools 默认可视窗口时,子进程看不到 DISPLAY,就会只回 accessibility snapshot,窗口管理器里没有 Chromium。本机终端跑 npx playwright test --headed 能弹出窗口,不能证明 Codex 的 MCP 子进程也能看到显示器。
把图形会话变量按名字转发出去。键是 env_vars,不是评论里写的 env_args:
[mcp_servers.playwright]
command = "npx"
args = ["-y", "@playwright/mcp@latest"]
env_vars = ["DISPLAY", "WAYLAND_DISPLAY", "XAUTHORITY", "XDG_RUNTIME_DIR"]
startup_timeout_sec = 20
enabled = true
这只修「本机有显示器、stdio 子进程却看不到」这一条。修不了沙箱:默认沙箱里仍然打不开窗口,继续加 --headless --isolated,见 Playwright MCP 那条。也不要把它写成「桌面忽略已配置 MCP」的修法。
从已经在图形会话里的终端启动 Codex。Dock / 开始菜单打开的桌面常常没有 DISPLAY;env_vars 转发的是桌面自己的环境。Wayland 为主的机器 WAYLAND_DISPLAY 和 XDG_RUNTIME_DIR 更关键。改完彻底退出再开新进程。
codex doctor 会标出点了名却缺失的 env_vars。变量在你的终端里有、桌面里没有时,不要把显示套接字路径当字面量抄进 env 表——那会绑死到错误的会话。