从 SSH 打开 Java 程序进入 VNC 显示

从 SSH 打开 Java 程序进入 VNC 显示

如果我有一个安装了 LXDE 和 TightVNCserver 的 Ubuntu 12.04 系统,并在端口上运行会话:1(未通过 SSH 隧道传输)并建立活动的 SSH 连接,那么如何使用 SSH 启动需要活动显示的程序以使用可用的 tightVNC 会话?

我想使用 SSH 启动一个 java 文件,该文件在 vnc 会话内部启动时通常会正常启动,但我收到一个错误:

xxx@yyy:~# java zzz
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
        at sun.awt.HeadlessToolkit.getScreenSize(HeadlessToolkit.java:282)
        at zzz.<clinit>(zzz.java:35)

换句话说:我想启动一个程序并让它使用打开的 VNC 会话窗口,而不使用 VNC 客户端查看器会话来启动它,可以这样做吗?

(我认为任何需要显示的程序都会做出这样的反应,所以我认为这不是一个 java 问题,而是一个 ssh/vnc 问题)

答案1

尝试将DISPLAY变量设置为 VNC 会话的 X 服务器:

DISPLAY=:1 java xxx

答案2

您将需要启用 X11 转发,这会将其转发到您自己的 X11 服务器(因此您需要在进行 SSH 的客户端上运行 X11 服务器)。

-X这可以通过添加到 SSH 命令来完成。例如:ssh -X user@server

然后确保 $DISPLAY 变量设置为正确的显示。使用以下命令检查echo $DISPLAY

如果您想要通过 SSH 访问 X11 服务器上打开的窗口,我建议您看一下这个:http://www.wensley.org.uk/x

它解释了如何实现类似于“屏幕”的行为,但使用 X11 应用程序。

答案3

我想这里有几件事你可以做,其中一种方法是使用ssh -X命令。

但是,我喜欢在您尝试连接的主机上运行 VNC 服务器(如 tightvnc)的方法。然后您可以ssh访问该主机并使用 vnc 查看器进行显示(如果需要)。在您的ssh终端上,连接到主机 vnc 并将其 5901 端口(假设您的 tightvnc 服务器正在监听 5901 端口)转发到本地 5901 端口。

ssh -L 5901:127.0.0.1:5901 -C [email protected]

并且,在另一个终端上连接到转发端口以查看 X11:

vncviewer localhost:5901

现在,当你运行命令时出现错误,这是因为你的 DISPLAY 变量未设置。你可以在终端export DISPLAY=:N上输入来设置它ssh。注意:通常是 1,但为了验证,你可以在 x11-vnc 窗口中打开一个终端并输入echo $DISPLAY是此处显示的任何值。

相关内容