通过SSH登录时如何在远程服务器上运行图形应用程序?

我试图从Windows上的SSH终端运行gedit ,连接到运行Ubuntu 12.04 Server的Amazon EC2实例,我收到此错误:

 Cannot open display: 

我如何解决它?

由于您使用的是Windows,因此需要一个在Windows上运行本地X服务器的SSH客户端,以便在屏幕上远程运行服务器上的图形应用程序。

根据经验,我会推荐内置此function的免费MobaXTerm 。 请下载并尝试一下:

在此处输入图像描述

如果您收到任何错误,那是因为有时可能无法设置最小的服务器映像以允许 X转发。 在这种情况下,请评论,我会帮你解决它; 我用很多运行Ubuntu / Debian的最小VPS完成了这个。

所以你是通过ssh连接家用电脑(让我们称之为你的机器 )到服务器(让我们称之为服务器 )? 您想通过机器在服务器上启动带有图形窗口的程序吗? 如果这是正确的,那么请继续阅读。

让我们调用程序启动gedit但所有过程都是相同的。 根据您要查看图形窗口的位置,跳到右侧标题。

机器屏幕上的窗口

如果你想在远程机器上查看和使用gedit的窗口但是从服务器开始,你会希望你的shell会话看起来像这样:

 user@remote-machine:~$ ssh -X user@server Last login: Tue Aug 14 13:47:04 2012 from clientXX ******************************************************************************* MOTD (Message Of The Day) ******************************************************************************* user@server:~$ gedit .bash_aliases ** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme (gedit:7851): Gtk-WARNING **: Attempting to store changes 

不介意警告,它们是正常的 – gedit窗口会像在服务器上看到的那样弹出远程机器的屏幕。 诀窍是在ssh -X使用“-X”-option,它启用X-tunneling并将DISPLAY变量设置为右。

这假设您使用的是支持X11的SSH客户端,并且您的服务器正在运行X服务器(某些不需要GUI的服务器不运行X服务器)。 特别是在Windows上,这可能是一个问题,因为大多数Windows终端程序没有X.正如izx所述, MobaXTerm是具有X-Server的Windows的众多SSH客户端之一。

但是对于缺少X11的服务器,您必须安装它。

在服务器的屏幕上

您还可以通过调用gedit在服务器的屏幕上启动实例,如下所示:

 ssh user@server DISPLAY=:0.0 gedit 

您必须替换正确的值而不是:0.0但是要将它放在正确的X屏幕上(仅当多个屏幕连接到您的服务器或者如果它的配置有些奇特时才重要)。

在这里,最常见的不工作的情况是,如果服务器缺少X11服务器,但没有连接到它的监视器或没有图形用户界面,你不会读到这个:D。

一点理论

我不是这方面的专家,但我认为它的工作方式是,每个物理屏幕,即连接到单个计算机的每个监视器都获得2.0 ,……的运行编号。

此编号由X-Window-System aka X11指定。 这是一个提供Unity,Gnome,KDE等可以构建的网络和基本图形界面的层。

您可以通过for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done运行for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done来查看给定计算机的显示数量以及正在使用的for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done 在有问题的机器上for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done 。*然后,配置为使其屏幕可用并运行X服务器的每台计算机都有一个主机名。 通过将DISPLAY变量相应地设置为DISPLAY=hostname:0.0可以使用同一网络中任何计算机的主机屏幕。 如果您提供-X选项,Ssh会以合理的方式为您执行此操作。

*注意:我认为有一个比这个for循环更好的方法。

如果一切都失败了

使用shell文本编辑器。 vivimnanoemacs是最常见的,其中至少有一个将被安装和运行。 其中nano是最容易和最自我解释的。

有什么用的说法 。

基本上你有一个通过SSH终端,Gedit是一个GUI程序。 con-f-use的答案将使它在Linux GUI客户端会话中起作用。

另一种选择是使用非GUI编辑器,如nano,Vi或许多其他编辑器。