SSH X11 转发排查与解决指南(Windows + Xming + Ubuntu)

SSH X11 转发排查与解决指南(Windows + Xming + Ubuntu)

前言

这部分是这样的。我们大家都知道,有时候在Ubuntu上写Qt贼不方便,需要开一个虚拟机的窗口不说,有时候虚拟机卡住了,开发进度也会耽误。

笔者之前就深受此事的困扰------而且现在大家都在用VSCode写东西,还有ClaudeCode插件玩,那干啥不考虑SSH远程转发过来窗口呢?

所以如何配置

前提是桌面GUI用的XServer,要不然这篇博客不好解决你的问题。我们的诉求是------在 Windows(我自己是Xming托管,不太熟悉的朋友可以自行检索啥是XMing)上通过 SSH 登录到 Ubuntu 虚拟机 / 服务器,希望通过 X11 转发在本地显示 GUI(例如 xeyesxclock、Qt 应用)。

step 1

确认一下有没有XMing,如果没有记得在Windows上下一个,然后开启------开启的时候不会有任何提示,看看右下角有没有XMing的图标就好,有就是拉起来了。

然后,我们的虚拟机上要安装了 X11 测试工具------

bash 复制代码
# 在 Ubuntu 上
sudo apt update
sudo apt install x11-apps xauth -y

注意的是服务器端 SSH 服务允许 X11 转发:/etc/ssh/sshd_config 中应包含且未注释:

复制代码
X11Forwarding yes

Windows 与服务器之间网络连通,且没有被防火墙阻断(通常 X11 转发走的是 SSH 隧道,不额外开放端口)。

先使用交互式 SSH 连线并查看 $DISPLAY

在使用VSCode之前先看看日志对不对,我们可以在 Windows PowerShell(或 CMD)里:

powershell 复制代码
# 暂时性设置(如果未设置 DISPLAY)
$env:DISPLAY = "localhost:0"
# 或在 cmd 中: set DISPLAY=localhost:0

# 再连接:
ssh -Y -v charliechen@192.168.60.152 # 改成自己的用户名和IP

连接成功后在服务器端运行:

bash 复制代码
echo $DISPLAY
# 预期输出:类似 localhost:10.0
xeyes  # 或 xclock

如果 $DISPLAY 为空,说明 X11 转发没有建立。看下面那就

在客户端(Windows OpenSSH)观察 verbose 日志

好,如果发现$DISPLAY 为空,退出去,在 Windows 端用 -v-vvv

powershell 复制代码
ssh -Y -vvv charliechen@192.168.60.152 2>&1 | grep -i x11 # 改成自己的用户名和IP

关注关键行:

  • X11 forwarding requested but DISPLAY not set ------ 表示客户端希望请求 X11,但本地环境 (DISPLAY) 没有设置,客户端不知道把转发隧道映射到哪个本地 X server。
  • X11 forwarding request failedxauth not found ------ 表示服务端或客户端缺少必要组件或绑定失败。

确认服务器端存在 xauth

bash 复制代码
which xauth || sudo apt install xauth -y

如果服务端没有 xauth,sshd 无法创建 X11 授权记录,X11 转发会失败或 $DISPLAY 不会被设置。

检查服务器端 SSH 日志

bash 复制代码
sudo tail -n 200 /var/log/auth.log | grep -i x11
# 或 systemd 日志: journalctl -u ssh -e | grep -i x11

查看是否有类似的错误信息(bind failure、cannot create X11 cookie 等)。

对 VSCode Remote-SSH 的特殊检查

  • VSCode 使用内部 SSH 客户端连接(会读取 ~/.ssh/config),默认不会 强制开启 X11 转发。请在 C:\Users\<你> 下的 \.ssh\config(或服务器上 ~/.ssh/config)添加:

    Host 192.168.60.152
    User charliechen
    ForwardX11 yes
    ForwardX11Trusted yes

  • 断开 VSCode 远程连接并完全重新连接(确保新的 SSH 配置生效)。

  • 注意:VSCode Remote-SSH 的终端有时不会继承你在本地 PowerShell 里临时设置的 DISPLAY,因此建议做永久设置(见下)。

相关推荐
深邃的眼10 小时前
微信小程序从 0-1:从本地开发到部署服务器上线整体流程保姆式教学
阿里云·微信小程序·个人开发
U盘失踪了10 小时前
【笔记】Flask 用 session 对象存储用户状态
笔记
Brilliantwxx11 小时前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法
AxureMost16 小时前
XnConvert v1.111.0 图像格式转换调整
windows
码途漫谈16 小时前
Easy-Vibe高级开发篇阅读笔记(五)——CC教程之Agent Teams
人工智能·笔记·ai·开源·ai编程
铁皮哥17 小时前
【后端/Agent 开发】给你的项目配置一套 .claude/ 工作流:别再裸用 Claude Code 了!
java·windows·python·spring·github·maven·生活
憧憬成为原神糕手17 小时前
FFmpeg 音视频开发笔记(一):H.264 解码为 YUV
笔记·ffmpeg·音视频
爱听歌的周童鞋17 小时前
Learn-Claude-Code | 笔记 | Collaboration | s11 Autonomous Agents
笔记·llm·agent·claude code·collaboration·autonomous
05候补工程师17 小时前
[线性代数] 判定线性相关性的“降维打击”:从基本定理到速通特殊法
经验分享·笔记·学习·线性代数·考研
sweetheart7-719 小时前
go/golang 入门学习笔记(Java/Python/C++转Go快速上手)
笔记·学习·golang·go语言