在启用X11转发的ssh'后打开X程序时,如何解决“无法打开显示”错误?


110

在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上运行)融合)。gedit .bashrc例如,当我跑步时,我得到:

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

set | grep DISPLAY 什么也不返回。

但是,如果我ssh -Y进入Ubuntu 11.04计算机,则gedit .bashrc可以正常工作。 echo $DISPLAY返回“ localhost:10.0”。

我尝试将其export DISPLAY=localhost:10.0散布到我的VM中,然后运行gedit .bashrc,但得到:

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

两台不同的Ubuntu计算机的配置可能有什么不同,这可以解释为什么一台可以正常运行而另一台不能正常运行?

更新:正如Zoredache在下面的评论中所建议的,我跑了sudo apt-get install xbase-clients,但是我仍然遇到同样的问题。


2
Ubuntu 10.04包装盒是否安装了适用于X11的适当工具?安装xbase-clients(如果尚未安装)。
Zoredache

我安装了它,但是仍然有同样的问题。(请参见上文。)
Daryl Spitzer

3
也许尝试在连接时将-vv选项传递给ssh,这会显示详细的调试消息,您应该在连接时看到有关X11转发的一些注释。
Zoredache

1
@jcrawfordor您确实检查了X11Forwardingubuntu上的,并且已经xbase-clients安装并且可以在与ssh建立连接的终端上的Mac上启动Xapps。(检查$DISPLAY设置在终端上运行的ssh
Manwe

1
就我而言,这仅仅是升级Mac OS XQuartz版本的问题
Waruna Ranasinghe

Answers:


47

检查服务器的sshd_config(通常为/etc/ssh/sshd_config),并确保该行启用了X11Forwarding选项。

X11Forwarding yes

如果未指定X11Forwarding,则在我可以检查的Debian机器上默认为no。


4
我在设置了另一个Ubuntu VM之后发现,我需要安装xbase-clients并启用X11Forwarding。更新您的答案以同时包含两者,我会接受的。
达里尔·斯皮策

1
有趣。至少在我今天早上进行的新安装的10.04中,默认情况下已启用X11Forwarding。Ubuntu的家伙们一定又在搞砸默认设置了。
Zoredache

28
@DerfK,在我的系统“ X11Forwarding yes”中仍然存在错误,原因是,(gedit:8381):Gtk-WARNING **:无法打开显示:在这种情况下
2015年

1
在Debian上,您可能必须安装软件包xauth,然后再次登录。
com18年

$ ssh username @ hostname -Y这对我
有用

59

来自xhost +:在远程服务器上启动GUI时如何解决“无法打开显示”错误

:您可以按照本文中提到的xhost过程来修复“无法打开显示”错误。

允许客户端使用xhost +从任何主机进行连接

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

$ xhost +

访问控制已禁用,客户端可以从任何主机进行连接

启用X11转发

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

$ ssh username@hostname -X

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

$ ssh username@hostname -Y

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

如上所述打开与远程主机的ssh连接后,您可以打开将打开它的任何GUI应用程序,而不会出现任何问题。

如果仍然出现“无法打开显示”错误,请如下所示设置DISPLAY变量。

$ export DISPLAY='IP:0.0'

注意:IP是您要在其中显示GUI应用程序的本地工作站的IP。


11
+1表示IP =是您要获取GUI的本地工作站的IP
PCoder

3
对于那些在OS X上存在类似问题的用户,还请确保已安装XQuartz,否则这些修补程序都无济于事。(OP的问题表明他拥有XQuartz,所以这对那些和我有类似问题的人来说是一个
Dolan Antenucci

3
请注意,运行xhost +是非常不安全的,不应使用!正如Stefan Rogin所提到的,攻击者然后可以从主机连接到XSession,读取您键入的所有内容,甚至更改您看到的屏幕。
jirislav

18

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

export DISPLAY="127.0.0.1:10.0"

那么X11程序应该没问题。似乎没有必要告诉OS本地主机和127.0.0.1是等效的,但至少可以运行。


这对我有用。知道为什么localhost无法正常工作吗?
亚历克斯

2
答对了!我一直困扰着这个问题一段时间了……我通过SSH连接,无法启动Gtk程序(普通的X11,例如“ xeyes”,也可以工作)。显示正确。实际上,“ localhost”的分辨率不是!如果我手动设置DISPLAY = 127.0.0.1:10.0或DISPLAY = :: 1:10.0则可以正常工作。编辑/ etc / hosts似乎没有任何效果。并且正确配置了DNS(“ dig localhost”的正确性报告两者均为127.0.0.1和::: 1)因此,对于Gtk中的X11连接(gtk?gdk?glib?other?),无论DNS解析是什么,似乎都是一个错误。
Pablo Saratxaga 2014年

1
在为Beagle Bone Black安装Debian时,除root以外,其他任何人均未将/ etc / host设置为可读。这导致了此处报告的症状。使/ etc / hosts所有人都可以读取,并且工作正常。
丹尼尔(Daniel)

13

我的CentOS KVM服务器出现此问题,我缺少“ xauth”程序。


1
这对我最小的debian安装有所帮助,非常感谢!
binOr

9

如果在使用arg 运行一段时间后遇到此问题-X。或只是ForwardX11在/ etc / ssh / ssh_config中,然后运行$ ssh username@hostname -Y,以启用受信任的X11转发,不知道确切的原因,但我猜测-X某些功能会在一段时间后过期,可能是为了提高安全性。

这是我在网上找到的:

如果使用ssh -X remotemachine,则将远程计算机视为不受信任的客户端。因此,本地客户端将命令发送到远程计算机,并接收图形输出。如果您的命令违反了某些安全设置,则会收到一条错误消息。

但是,如果使用ssh -Y remotemachine,则将远程计算机视为受信任的客户端。最后一个选项可能会打开安全性问题。因为其他图形(X11)客户端可能会嗅探远程计算机上的数据(进行屏幕截图,进行键盘记录和其他讨厌的事情),甚至有可能更改这些数据。

如果您想进一步了解这些内容,建议您阅读Xsecurity手册页或X Security扩展规范。此外,您可以在/ etc / ssh / ssh_config中检查选项ForwardX11和ForwardX11Trusted。

资料来源:


6

刚刚在Mac上测试过,其他系统可能还可以

  1. 允许客户端使用xhost +从任何主机进行连接

    $ xhost +

  2. 您应该有一个支持X11显示的环境

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

  3. 您应该让ssh服务器转发x11显示

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

  4. 您应该使用-X参数 让ssh会话转发x11显示

    $ ssh -X user @ ip

  5. 如何在PyCharm中打开X11应用程序?
    • 打开一个支持X11显示的ssh会话(请记住保持该会话)
    • echo $DISPLAY在那个ssh会话中运行
    • DISPLAY为您的PyCharm 设置环境变量

1
为什么这是不同的?为什么它比其他任何答案都更受欢迎?请解释一下是否可以进行简单的编辑。你能行的!!
Pimp Juice IT

@麦当劳的谢谢,已更新了更多详细信息。
上色

4

运行UXTERM或XTERM时,只需发出

export $DISPLAY 

变量将在那里。然后只需将其设置并导出即可。


4

我必须/etc/ssh/sshd_config输入以下内容:

X11UseLocalhost no

而是将其设置为“是”。如果默认值为“ NO”,则很奇怪。Windows下将腻子与XMing一起使用的用户。我在Fedora上使用ssh。有时候它会开始给我们

error can't open display localhost

重新启动服务器通常可以修复它,但这很愚蠢。进行上述操作后,重新启动了服务器sshd上的服务,并恢复了新的连接,使其再次正常运行。


2

我在Solaris 10中也遇到了这个问题,发现未设置侦听器。

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop  options/tcp_listen = true

1

在CentOS 6.5上,我弄乱了/ etc / hosts后突然失去了对远程X程序的访问。空$ DISPLAY变量的症状相同(无助于手动设置/导出)。

指向实际主机名的127.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

我只是在我的设置中发现一个不错的问题,阻止了x转发:我的防火墙阻止了来自localhost的所有连接,从而阻止了隧道的建立


1

如果碰巧使用Konsole,只需切换到另一个终端仿真器(例如Xfce Terminal),然后使用root再次尝试。


1

打开终端$ ssh username @ hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY =“ 127.0.0.1:10.0”都应该起作用。


谢谢。在DISPLAY='localhost:10.0'不工作时适用于我的特殊情况。
xpt

1

此设置对我有用:

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

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

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


0

经过很多挫折后,我发现他的/ etc / host文件中服务器的主机名条目不正确。

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.