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


14

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

Cannot open display:

我如何解决它?

Answers:


14

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

从经验来看,我会推荐免费的MobaXTerm,它内置了此功能。请下载并尝试一下:

在此处输入图片说明

如果出现任何错误,那是因为有时可能没有设置最小的服务器映像来允许 X转发到其中。在这种情况下,请发表评论,我会帮助您解决问题;我通过运行Ubuntu / Debian的许多最小VPS来做到这一点。


17

因此,您是通过ssh从家用PC(称为机器)连接到服务器(称为server)吗?您想通过机器在服务器上使用图形窗口启动程序吗?如果那是正确的,那么请继续阅读。

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

机器屏幕上的窗口

如果要在远程计算机上查看并使用gedit的窗口,但要在服务器上启动,则将需要Shell会话如下所示:

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (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窗口会像在服务器上一样弹出在远程计算机的屏幕上。诀窍是使用“ -X”选项,因为ssh -X其中启用了X隧道并DISPLAY正确设置了变量。

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

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

在服务器的屏幕上

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

ssh user@server
DISPLAY=:0.0 gedit

您必须替换正确的值,而不是:0.0尽管要在正确的X屏幕上获取它(仅在将多个屏幕连接到服务器或它的配置有些特殊时才重要)。

如果服务器缺少X11服务器,但没有连接监视器或没有图形用户界面,则最常见的情况是服务器没有X11服务器,并且您不会读到:D。

一点理论

我在这方面的专家,但我认为它的工作方式是,每个物理屏幕,即连接到个人计算机每台监视器的形式得到一个流水号0.01.02.0,...

该编号由X窗口系统(又称为X11)分配。这是提供网络和基本图形界面的层,Unity,Gnome,KDE等可以在此基础上构建。

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

*注意:我想有一个比此for循环更好的方法。

如果其他所有方法都失败

使用外壳文本编辑器。vivimnanoemacs是最常见的并且它们中的至少一个将被安装和操作。它们nano是最简单,最自我解释的。


@coding crow:如果要从Windows进行SSH传输,则取决于客户端是否起作用。有些客户端不与X11通信,因此不进行X转发-对于某些客户端来说,虽然工作正常。如果不起作用,请更改Windows的SSH客户端,或使用nano,vim或emacs作为其答案中建议的xyious。
con-f-use

是的,我投了反对票,在我的个人资料中看到了投票,想知道为什么没有评论或其他内容。只是想知道,没那么重要的事与您没有关系-很高兴您的问题已解决,在这里我可能会有所帮助。
con-f-use

我修改了一下for循环..现在它仅显示显示地址,例如:0 :0.0。如果您认为它不是您想要的
随时返回。– heemayl 2015年

0

混淆用法说了什么

基本上,您通过SSH拥有一个终端,而Gedit是一个GUI程序。con-f-use的答案将使其在Linux GUI客户端会话中运行。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.