X11 从无头服务器到另一个 X11 服务器

Posted

技术标签:

【中文标题】X11 从无头服务器到另一个 X11 服务器【英文标题】:X11 from headless server to another X11 server 【发布时间】:2011-11-30 16:20:38 【问题描述】:

我有一个在无头服务器上运行的应用程序。它是一个 Web 应用程序,但对于某个功能(调试),它运行基于 swing 的应用程序。由于服务器是无头的(我已经设置了 -Djava.awt.headless=true)它在启动时会引发异常...

我尝试安装 Xvfb,但这并不能解决我的问题,因为 Xvfb 没有 GUI 输出,而且我看不到输出。

所以我想将该服务器的输出重定向/转发到另一台(例如我的笔记本电脑),以便查看 Swing 应用程序并对其进行调试。

有没有办法使用 DISPLAY 变量或其他任何方法来实现它?

谢谢。

【问题讨论】:

【参考方案1】:

如果您的笔记本电脑上运行了 X-server,您可以在 SSH 中启用 X-Forwarding 以 ssh 进入您的服务器,它会自动将您的 DISPLAY 变量设置为 :10.0 行中的某个值,您可以运行您的应用程序将 GUI 导出到本地 X 服务器。

否则,如果您想手动设置 DISPLAY,则需要确保服务器可以通过 x-server 端口上的直接 TCP 连接访问您的笔记本电脑。

【讨论】:

【参考方案2】:

你可以

    运行 Xvnc 并使用 VNC 客户端连接到它 与 x11vnc 一起运行 Xvfb 并使用 VNC 客户端连接到它(这与上述不同,但对您来说最终结果是相同的;仅当您出于其他原因已经运行 Xvfb 时才有用) 按照 favouretti 的回答使用 ssh 转发 X11 会话(或直接 TCP 连接)

如果您的笔记本电脑上有 Windows 并且不想在其上运行 X11 服务器,则选项 1 或 2 很有用。然后,您可以使用 Windows 原生 VNC 客户端。

您还可以使用 RDP 代替 VNC(X11 端为 X11rdp 或 xrdp,Windows 端为 RDP 客户端)。这应该会提供更快的刷新率,但据说在 X11 端设置起来更困难(我没有亲自做过)。 OTOH Windows 有一个内置的 RDP 客户端,因此您甚至不必在 Windows 端安装任何东西。

如果您的笔记本电脑上有 X11,则使用选项 3 会容易得多。

【讨论】:

【参考方案3】:

我没有足够的“Rep”来评论其他用户的答案,所以我的帖子是为了增加“favoretti”的好答案。

如果您运行的是 Windows PC,请安装 cygwin unix 子系统并安装 x-windows 和 ssh。如果使用 OSX 启动 X11 或 Mavericks 以后,请安装 xQuartz。

然后如上所述,您可以 ssh 进入目标(无头)远程服务器并指定 -X 标志以允许 X 流量通过网络返回

 ssh -l <user> -X -v <host>

你可能需要也可能不需要调用命令

xhost + 

允许 X 流量流回您的机器。

【讨论】:

以上是关于X11 从无头服务器到另一个 X11 服务器的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 linux 的服务器终端中打开 X11 应用程序?

freeglut 如何探测 X11 服务器是不是可用?

VS code remote x11 在连接到远程服务器时无法显示

获取当前 X11 服务器时间

如何在不退出远程服务器上的 R 的情况下恢复 X11 连接

使用最后一次 CentOS CLEAN 安装设置 X11 转发的完整教程是啥?