【问题标题】:X11 from headless server to another X11 serverX11 从无头服务器到另一个 X11 服务器
【发布时间】:2024-01-12 19:39:01
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: x11 x11-forwarding


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可以

      1. 运行 Xvnc 并使用 VNC 客户端连接到它
      2. 与 x11vnc 一起运行 Xvfb 并使用 VNC 客户端连接到它(这与上述不同,但对您来说最终结果是相同的;仅当您出于其他原因已经运行 Xvfb 时才有用)
      3. 按照 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 流量流回您的机器。

        【讨论】: