2011-07-13 18:13:00 +0000 2011-07-13 18:13:00 +0000
117
117

如何修复在启用了X11转发功能后,打开一个X程序时出现的 "无法打开显示 "错误?

在我的Mac(OS X 10.6.8)上启动X11程序(XQuartz 2.3.6,xorg-server 1.4.2-apple56),在X11中打开一个终端并运行xhost +后,我ssh -Y到我的Ubuntu 10.04 VM(运行在VMware Fusion上)。当我运行gedit .bashrc时(例如),我得到:

(gedit:9510): Gtk-WARNING **: cannot open display:

set | grep DISPLAY返回什么都没有。

我试了一下ssh -Y,然后运行gedit .bashrc,但我得到的结果是:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

这两台不同的Ubuntu机器的配置可能有什么不同,为什么一个能正常工作,而另一个不能呢?

更新:如下文评论中Zoredache所建议的那样,我运行了echo $DISPLAY,但还是有同样的问题。

答案 (14)

62
62
62
2012-02-21 08:47:03 +0000

来自 xhost+ : 如何修复远程服务器上启动GUI时 “无法打开显示 "错误 :

*。您可以按照本文中提到的xhost的步骤来修复 "无法打开显示 "的错误。

允许客户机使用xhost+从任意主机连接*

执行以下命令来禁用访问控制,通过该命令您可以允许客户机从任意主机连接。

$ xhost +

访问控制被禁用,客户机可以从任何主机连接

启用 X11 转发*

在进行 ssh 时,使用选项 -X 启用 X11 转发。

$ ssh username@hostname -X
$ ssh username@hostname -Y

启用信任的X11转发,使用-Y选项,

$ export DISPLAY='IP:0.0'

在该主机上打开GUI应用程序

在打开与远程主机的ssh连接后,可以打开任何GUI应用程序,它将会毫无问题地打开。

如果您仍然收到 "无法打开显示 "的错误,请设置DISPLAY变量,如下图所示。

49
49
49
2011-07-13 18:54:50 +0000

检查服务器的 sshd\config (通常是 `/etc/ssh/sshdconfig`),并确保 X11Forwarding 选项是启用的,如果没有指定 X11Forwarding,在我所使用的 Debian 机器上,默认是没有。

18
18
18
2012-06-29 20:44:03 +0000

我在从Mac OS X登录Ubuntu VM时也遇到过这个问题—-由于某种原因,它似乎不喜欢显示变量中的 “localhost"。所以按照harrymc的建议,手动设置IP:

export DISPLAY="127.0.0.1:10.0"

然后X11程序就可以正常运行了。似乎不需要告诉操作系统说localhost和127.0.0.0.1是等价的,但至少可以使用。

14
14
14
2012-10-22 07:59:02 +0000

我在我的CentOS KVM服务器上遇到了这个问题,我的 “xauth "程序不见了。

9
9
9
2014-10-17 08:06:53 +0000

如果你在运行-X arg.或在/etc/ssh/ssh/ssh_config中运行ForwardX11时遇到这个问题,那么运行$ ssh username@hostname -Y,启用信任的X11转发,不知道确切的原因,但我猜测-X的一些功能在一段时间后就会过期,可能是为了增加安全性。所以你的本地客户端会向远程机器发送一个命令,然后接收图形输出。如果你的命令违反了一些安全设置,你将会收到一个错误。

但如果你使用 ssh -Y remotemachine,远程机器将被视为受信任的客户端。这最后一个选项可能会带来安全问题。

如果你想知道更多关于这些事情,我建议你阅读Xsecurity手册或X Security扩展规范。此外,你可以在/etc/ssh/ssh/ssh_config中查看ForwardX11和ForwardX11Trusted选项。

6
6
6
2017-08-30 11:36:06 +0000

**刚在我的Mac上测试过,其他系统可能没问题*:

  1. 允许客户端从任何主机上使用xhost+

$ xhost +

  1. 你应该有一个支持X11显示的环境

[Mac系统] 安装X11 for mac https://www.xquartz.org/

  1. 你应该让你的ssh服务器转发x11显示

更新/etc/ssh/sshd_config并设置X11Forwarding yes,然后重启你的ssh服务器

4.你应该让你的ssh会话转发x11显示-X参数

$ ssh -X user@ip

  1. 如何在PyCharm中打开X11应用?
  • 打开一个支持X11显示的ssh会话(记得要保留这个会话)
  • 在该ssh会话中运行echo $DISPLAY
  • 为你的PyCharm设置DISPLAY环境变量
4
4
4
2017-09-01 01:17:28 +0000

我不得不在/etc/ssh/sshd_config中输入了以下内容:

X11UseLocalhost no

而不是设置为 “是"。奇怪的是,如果默认是 "NO",那么在Windows下使用XMing的putty的用户就很奇怪了。我在Fedora上直接使用ssh。偶尔它会开始给我们

error can't open display localhost

&001

重启服务器通常会修复它,但这是愚蠢的。做了上面的操作,在服务器上重新启动了sshd服务,然后就又恢复了新的连接。

4
4
4
2012-07-10 21:26:59 +0000

当运行UXTERM或XTERM时,只需发出

export $DISPLAY

变量就会出现。然后只需设置并导出就可以了。

3
3
3
2019-07-08 17:25:35 +0000

这个设置对我有效:

本地(Windows 10上的64位Cygwin) DISPLAY=:0

服务器(Amazon EC2 RHEL 7.6) DISPLAY=:10.0

这些设置是通过点击任务栏中的 “X应用程序菜单上的:0 "并选择系统工具>终端,就可以找到这些设置。

2
2
2
2015-03-18 22:52:32 +0000

我在Solaris 10中也遇到过这个问题,发现监听器没有设置好,

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop options/tcp_listen = true
1
1
1
2017-05-01 04:13:35 +0000

如果你刚好在使用Konsole,只需切换到另一个终端仿真器,如Xfce Terminal,然后用root重新尝试。

1
1
1
2014-07-15 15:13:51 +0000

在CentOS 6.5上,我在弄乱了/etc/hosts之后,突然失去了远程X程序的访问权限。同样的症状是$DISPLAY变量为空(没有帮助手动设置/导出)。

指向实际主机名的127.0.0.0.1条目是必须的;其实顺序似乎也是有关系的(放在最后一个&就不行了………..)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

解决了这个问题后,xeyes、xclock和其他X测试玩具又开始工作了,所以我需要的virt-manager也恢复了。

1
1
1
2016-06-10 11:56:04 +0000

我刚刚发现我的设置中出现了一个很好的小插曲,阻止了X转发。我的防火墙阻止了所有来自localhost的连接,从而阻止了隧道的到达。

1
1
1
2018-05-30 13:40:40 +0000

open terminal $ ssh username@hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY=“127.0.0.0.0.1:10.0” all should work.