Ubuntu 26+MobaXterm 26.4+X11转发

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

本文介绍X11转发原理与实测。X11采用C/S架构,X Client负责运算,X Server负责绘图,同机通过Unix套接字通信,异机走6000端口。SSH X11转发时,SSH Server充当代理,动态侦听6010端口并设置DISPLAY,请求经SSH信道转发至Windows端X Server。以MobaXterm为例说明配置,并给出sudo后保留DISPLAY的方法,实测xterm、firefox、gedit、ptyxis等程序。

🔎

延伸解读

X11转发的通信路径与防火墙影响

文章指出,X11转发时X Client连接的是SSH Server动态侦听的6010端口,请求经SSH信道到达Windows端的X Server。因此Windows防火墙无需放行6000入站,只需允许本地回环连接。这降低了配置复杂度,也意味着X11流量被封装在SSH中,安全性依赖SSH本身。

sudo/su后X11失效的原因与修复

切换到root后X11失败有两个原因:缺少DISPLAY环境变量和X Client没有认证凭据。文章给出的解决方法是手动导出DISPLAY=localhost:10.0,并用xauth从原用户.Xauthority提取最后一条记录添加凭据。这提示读者,X11转发依赖会话环境与认证文件,提权后需显式恢复。

MobaXterm对ssh -X的限制

MobaXterm 26.4不支持ssh -X,文章列出GUI无-X选项、后台无xauth、默认ForwardX11Trusted=yes、ssh -vv无真实日志、X Server无SECURITY扩展等原因。这可能是商业考量,追求开箱即用。读者若需标准ssh -X行为,应改用其他SSH客户端或原生OpenSSH。

GUI程序在X11转发中的兼容性差异

实测显示xterm最透明,firefox需确保主控台logout并设置XAUTHORITY,gedit和ptyxis则受DBus会话影响:主控台login时会在本地弹出,logout时弹出缓慢。gedit可通过unset DBUS_SESSION_BUS_ADDRESS和XDG_RUNTIME_DIR加速,ptyxis暂无快速方案。这提醒读者不同GUI程序对X11转发的支持程度不一。

❓

Q&A

X11转发的基本原理是什么?

X11采用C/S架构,X Client负责运算,X Server负责绘图。同机通过Unix套接字通信,异机时X Server侦听6000端口。SSH X11转发时,SSH Server充当代理,动态侦听6010端口并设置DISPLAY环境变量,将X11请求经SSH信道转发至Windows端的X Server。

如何配置MobaXterm进行X11转发?

在MobaXterm中,进入Settings > X11,勾选“Automatically start X server at MobaXterm start up”,Xorg version选择“MobaX”,X11 server display mode选择“Multiwindow mode”,Display offset设为0,X11 remote access设为disabled。然后在User sessions中新建SSH会话,在Advanced SSH settings中勾选X11-Forwarding。

在sudo或su后如何保持X11转发可用?

切换到root后,需要手动设置DISPLAY和添加xauth认证。执行:export DISPLAY=localhost:10.0,然后xauth add $(xauth -f ~scz/.Xauthority list | tail -1),之后即可运行X Client如xterm。

MobaXterm 26.4支持ssh -X吗?

不支持。MobaXterm的组件被阉割,GUI不提供-X选项,后台Cygwin不提供xauth,X11转发默认ForwardX11Trusted=yes,ssh -vv不提供真实日志,X Server不提供SECURITY扩展。

在X11转发中运行firefox需要注意什么?

Ubuntu 26的firefox是snap版本,必须确保主控台logout,然后在SSH shell中执行XAUTHORITY=~/.Xauthority firefox&,才能在Windows侧弹出。

gedit在X11转发中弹出缓慢或不在Windows侧显示,如何解决?

gedit连接缺省Session/User Bus导致问题。若主控台logout,gedit会延迟弹出;若主控台login,gedit会在主控台弹出。解决方案是执行unset DBUS_SESSION_BUS_ADDRESS和unset XDG_RUNTIME_DIR,然后运行gedit&,即可快速在Windows侧弹出。

🏷️

标签

➡️

继续阅读