我尝试gedit
从 Windows 上的 SSH 终端运行,连接到运行 Ubuntu 12.04 Server 的 Amazon EC2 实例,但出现了以下错误:
Cannot open display:
我如何解决它?
答案1
因此,您正在从家用电脑进行连接(我们称之为你的机器)到服务器(我们称之为服务器) 通过远程控制? 您想通过您的机器在服务器上启动一个带有图形窗口的程序吗?如果答案正确,那么请继续阅读。
让我们调用程序来启动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-tunnelling 并DISPLAY
正确设置变量。
这假设您使用的是支持 X11 的 SSH 客户端,并且您的服务器正在运行 X 服务器(一些不需要 GUI 的服务器不会运行 X 服务器)。尤其是在 Windows 上,这可能是一个问题,因为大多数 Windows 终端程序都没有 X。韋萊表示MobaX终端是 Windows 上众多具有 X-Server 的 SSH 客户端之一。
但是对于缺少 X11 的服务器,您必须安装它。
在服务器的屏幕上
您还可以通过调用 gedit 在服务器屏幕上启动一个实例,如下所示:
ssh user@server
DISPLAY=:0.0 gedit
您必须用正确的值代替,才能:0.0
在正确的 X 屏幕上获得它(仅当多个屏幕连接到您的服务器或其配置有些特殊时才重要)。
这里最常见的无法工作的情况是如果服务器缺少 X11 服务器,但它没有连接到它的显示器或没有图形用户界面,那么你就不会读到这个:D。
一些理论
0.0
我不是这方面的专家,但我认为它的工作方式是,每个物理屏幕,即连接到单台计算机的每个显示器,都会以、1.0
、、 的形式获得一个运行编号2.0
......
此编号由 X-Window-System 又称 X11 分配。该层提供网络和基本图形界面,Unity、Gnome、KDE 等可在此基础上构建。
通过在相关机器上运行,您可以查看给定机器有多少显示器以及正在使用的显示器数量。* 然后,每台配置为使其屏幕可用并运行 X 服务器的计算机都有一个主机名。 您可以通过将变量相应地for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done
设置为 来从同一网络中的任何机器使用主机屏幕。 如果您提供选项,Ssh 会以合理的方式为您完成此操作。DISPLAY
DISPLAY=hostname:0.0
-X
*注意:我认为有比这个for循环更好的方法。
如果一切都失败了
使用 shell 文本编辑器。vi
、vim
和nano
是emacs
最常见的,至少会安装并运行其中一个。 其中nano
是最简单且最不言自明的。
答案2
由于您使用的是 Windows,因此您需要一个在 Windows 上运行本地 X 服务器的 SSH 客户端,以便在您的屏幕上远程运行来自服务器的图形应用程序。
根据我的经验,我推荐免费的MobaX终端内置了此功能。请下载并尝试一下:
如果你遇到任何错误,那是因为有时最小服务器映像可能未设置为允许X-forwarding 进入其中。在这种情况下,请发表评论,我会帮助您解决问题;我已经使用许多运行 Ubuntu/Debian 的最小 VPS 完成了此操作。
答案3
基本上,您通过 SSH 拥有一个终端,而 Gedit 是一个 GUI 程序。con-f-use 的答案将使其从 Linux GUI 客户端会话中工作。
另一种选择是使用非 GUI 编辑器,如 nano、Vi 或其他编辑器。
答案4
好吧,我遇到了无法在我的 vagrant 实例上使用 X forward 的问题。解决方案非常简单。只需安装包即可xauth
。如果仍然不起作用,则解决方案是在相应的/etc/ssh/ssh_config
/etc/ssh/sshd_config 中启用 X11Forwarding 和相关设置`这些是 X 转发方面通常需要修复的唯一问题。
此外,修复 ssh 相关问题的最重要方法之一是使用ssh -v
详细日志记录,以便您了解正在发生的事情。