﻿---
title: "本机 GUI 的 stdio MCP 要转发 DISPLAY，键名是 env_vars"
summary: "Codex 默认不把 DISPLAY 交给 stdio 子进程。Playwright 有本机显示器却只有 snapshot 时，把 DISPLAY、WAYLAND_DISPLAY、XAUTHORITY、XDG_RUNTIME_DIR 写进 env_vars。这修不了沙箱。评论里的 env_args 不是现行键。"
category: mcp
level: intermediate
surfaces: [cli, app, ide]
tags: ["MCP", "env_vars", "DISPLAY", "Playwright"]
canonical: /tips/mcp-stdio-display-env/
---

# 本机 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`：

```toml
[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` 表——那会绑死到错误的会话。

## 来源

- [openai/codex#4643](https://github.com/openai/codex/issues/4643)
- [OpenAI · Model Context Protocol](https://learn.chatgpt.com/docs/extend/mcp)
