在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放入我的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




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

评论

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

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

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

@jcrawfordor您确实在ubuntu上检查了X11Forwarding,并且安装了xbase-clients,并且可以在建立ssh连接的终端上的mac上启动Xapps。 (检查在运行ssh的终端上是否设置了$ DISPLAY。

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

#1 楼

检查服务器的sshd_config(通常是/etc/ssh/sshd_config),并确保通过以下行启用X11Forwarding选项:
X11Forwarding yes

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

评论


设置了另一个Ubuntu VM之后,我发现需要安装xbase-clients并启用X11Forwarding。更新您的答案以包括两者,我会接受的。

– Daryl Spitzer
2011年7月13日在19:21

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

– Zoredache
2011年7月13日19:50

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

– A J
2015年10月6日在8:30

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

– comte
18年8月7日在9:40

在这里不工作,X11Forwarding设置为yes。 xauth已安装。

– RichieHH
20-3-21在16:06

#2 楼

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


答案:您可以通过执行xhost中提到的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
要显示的应用程序。


评论


+1(注意IP =是您要获取GUI的本地工作站的IP)

– PCoder
13年11月2日在10:15

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

– Dolan Antenucci
2014年5月28日在21:49

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

–吉里斯拉夫
18年5月13日在8:38



最后一个出口Display = IP:0.0对我有用

– StephenBoesch
19-10-18在22:41

无论出于什么原因,-Y都能正常工作,-X则无法工作。

– ibic
19-10-26在14:44

#3 楼

我也从Mac OS X登录到Ubuntu VM时遇到了这个问题-由于某种原因,它似乎在显示变量中不喜欢'localhost'。因此,按照harrymc的建议手动设置IP:似乎没有必要告诉操作系统localhost和127.0.0.1是等效的,但至少可以正常工作。

评论


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

– Alex
13年9月24日在4:47

答对了!我已经被这个问题困扰了一段时间了……我通过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年2月9日在11:38



在为Beagle Bone Black安装Debian时,除root以外,其他任何人均未将/ etc / host设置为可读。这导致了此处报告的症状。使/ etc / hosts所有人都可读,并且效果很好。

–丹尼尔(Daniel)
16年6月6日下午2:00

我的错误现在无法打开显示“ 127.0.0.1:10.0”

–dustytrash
20年4月5日在21:45

这个答案很有可能是因为在/ etc / hosts文件中没有定义127.0.0.1 localhost,因为大多数基于debian的发行版安装程序127.0.1.1 localhost都没有,因此当您在登录后手动设置此env var时,事情就开始起作用。我将以上条目添加到/ etc / hosts中,并且登录后不再需要手动设置DISPLAY env var。

– ipatch
20-10-28在19:31

#4 楼

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

评论


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

– binOr
13年1月16日在9:44

#5 楼

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


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

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

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



来源:


ssh -Y和ssh -X有什么区别?
cygwin / X警告:无法打开X显示器


#6 楼

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


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


$ xhost +


您应该具有支持X11显示的环境


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


您应该让ssh-server转发x11显示器


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


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


$ ssh -X user @ ip


如何要在PyCharm中打开X11应用程序?



打开一个支持X11显示的ssh会话(请记住保持该会话)
在该ssh会话中运行echo $DISPLAY
/>为您的PyCharm设置DISPLAY环境变量





评论


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

–以前的Pimp Juice IT
17年8月30日在12:34

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

–颜色
17年4月4日在2:58

#7 楼

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

X11UseLocalhost no


然后将其设置为“是”。如果默认值是“ NO”,那会很奇怪。
在Windows下使用带有XMing的腻子的用户。
我在Fedora上使用了ssh。
有时它会开始给我们提供

error can't open display localhost


重新启动服务器通常可以解决问题,但这很愚蠢。
进行了上述操作,重新启动了服务器上的服务sshd,并恢复了新的连接,再次正常工作。

#8 楼

运行UXTERM或XTERM时,只需发出

export $DISPLAY 


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

#9 楼

此设置适用于我:

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

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

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

评论


这适用于我(macOS Mojave上的XQuartz,Debian 10上的X11 Client)。谢谢!

– Arnie97
19年11月27日在17:52

#10 楼

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

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


#11 楼

打开终端
$ 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
18/12/9在22:42

#12 楼

在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也重新上线了。

#13 楼

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

#14 楼

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

#15 楼

其他要检查的是您是否处于提升的提示中或正在使用其他用户的bash。

如果运行sudo su并尝试打开X11窗口,则必须先恢复到原始的ssh bash,然后才能运行。

#16 楼

我经常遇到这个问题,最后我找出了问题并解决了。这是检查表。
确保满足以下所有条件。


X11Forwarding yes(检查/etc/ssh/sshd_config


ssh -Y username@remoteserver.de(重要:-Y


如果必须经过多个跃点才能到达目标服务器,请确保在所有ssh连接上都使用ssh -Y ...。这是display对我失败的原因之一,因为我只是在其中一个连接处使用了ssh username@remote_host.de