我正在尝试gedit
从 Windows 上的 SSH 终端运行,连接到运行 Ubuntu 12.04 服务器的 Amazon EC2 实例,但出现此错误:
Cannot open display:
Run Code Online (Sandbox Code Playgroud)
我如何解决它?
con*_*use 18
所以你是通过ssh从你的家用电脑(我们称之为你的机器)连接到服务器(我们称之为服务器)?您想通过您的机器在服务器上启动一个带有图形窗口的程序吗?如果那是正确的,那么请继续阅读。
让我们调用程序来启动,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
Run Code Online (Sandbox Code Playgroud)
不要介意这些警告,它们是正常的——gedit 窗口会在远程机器的屏幕上弹出,就像在服务器上一样。诀窍是使用“-X”选项,因为ssh -X
它可以启用 X 隧道并DISPLAY
正确设置变量。
这假设您使用的是支持 X11 的 SSH 客户端,并且您的服务器运行着 X-server(一些不需要 GUI 的不运行 X-server)。特别是在 Windows 上,这可能是一个问题,因为大多数 Windows 终端程序没有 X。正如izx所说,MobaXTerm是具有 X-Server 的 Windows 的众多 SSH 客户端之一。
但是,对于缺少 X11 的服务器,您必须安装它。
您还可以通过调用 gedit 在您的服务器屏幕上启动一个实例,如下所示:
ssh user@server
DISPLAY=:0.0 gedit
Run Code Online (Sandbox Code Playgroud)
您必须替换正确的值,而不是:0.0
在正确的 X 屏幕上获取它(仅当多个屏幕连接到您的服务器或者它的配置有些特殊时才重要)。
这里最常见的情况是,如果服务器缺少 X11-Server,但它没有连接显示器或没有图形用户界面,并且您不会阅读此内容:D。
我不是这方面的专家,但我认为它的工作方式是,每个物理屏幕,即连接到单个计算机的每个显示器都以0.0
, 1.0
, 2.0
,...
该编号由 X-Window-System aka 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 循环更好的方法。
使用 shell 文本编辑器。vi
、vim
、nano
和emacs
是最常见的,并且至少会安装和运行其中之一。其中nano
是最简单和最不言自明的。
归档时间: |
|
查看次数: |
15924 次 |
最近记录: |