为什么x11不能通过ssh登录显示?


22

我已经登录到远程服务器,并试图显示一个x应用程序(例如firefox)。但出现错误信息。以下是我打开Firefox的尝试

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

我使用-X,-Y是因为我在某处读到这两个选项与有关X11的凭据有关,并且这些开关将为我完成工作。即使没有-X,-Y开关,我的尝试也失败了。

“不显示特定内容”错误是什么意思?

PS奇怪的是,如果我通过PUTTY连接到远程服务器并重复命令“ firefox”,它会起作用吗?!?!(firefox显示在本地计算机上)

PS我的本地计算机是Windows 7,因此我在后台运行Xming以允许X11显示。至于在上部写的尝试,命令是在Cygwin终端输入的。


您是否尝试过从Cygwin终端本地显示某些内容?例如,您可以找到本地的X实用程序(例如xclock)并运行它以查看发生了什么。如果您无法在本地显示,则远程显示将无法工作。您可能还需要Cygwin的X服务器。
unxnut 2014年

1
正如您所指出的,@ unxnut DISPLAY没有设置我的变量。所以我用export DISPLAY=:0.0' and executed xclock`进行了设置,xclock出现了。但是当我然后通过ssh登录到远程服务器并xclock再次尝试时,它说Error: Can't open display:
kwagjj 2014年

Answers:


16

确保在cygwin环境中设置了DISPLAY变量:

export DISPLAY=:0.0

使用SSH连接后,请使用以下命令检查该外壳是否还知道正确的DISPLAY变量:

echo $DISPLAY

4
我在本地计算机的cygwin终端中设置了DISPLAY变量,然后将其切换到远程服务器并键入echo $DISPLAY。但还是在远程服务器的DISPLAY变量设置为无..
kwagjj

2
Error: Can't open display: :0.0
艾哈迈德(Ahmed)2016年

2
这样做:export DISPLAY=localhost:0
trogne

18

我只是在连接无头RHEL7服务器时遇到了这个问题。

您需要在主机上安装xorg-x11-xauth软件包,以便设置DISPLAY变量并获得适当的授权。

希望我能节省一些时间。


3
正是我想要的。非常感激!
josh-cain

1
好答案!其他解决方案(通过导出手动设置DISPLAY)将导致客户端和服务器之间的传输未加密!在Debian Squeeze上,需要安装软件包“ xauth”才能使一切正常运行。每次重新登录后ssh -Xecho $DISPLAY返回的URL +端口和xterm &在本地窗口中打开终端的调用。
Jpsy

7

感谢@jensd和@unxnut帮助我。根据您的评论,我能够找出问题所在。

该解决方案需要两个步骤:

  1. DISPLAY变量应正确设置。
  2. 切换到远程服务器时,-X开关必须打开

我以前的尝试缺少这两个条件之一或全部。

无论如何,对于后来在这里看到此内容的用户来说,这些都是示例,向您展示我想说的话。

情况1

我的本地计算机将没有设置DISPLAY变量。然后,我将使用-X开关SSH到远程服务器,然后尝试执行xclock

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

如您所见Error: Can't open display:,远程服务器终端显示错误。

案例2

这次,在本地计算机上,我将指定DISPLAY变量。但是,当我在ssh'ing时,我不会打开-X开关。结果将是失败的:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

在开始时,您会看到我已经正确设置了DISPLAY变量。但是即使这样,在ssh'ing之后(没有-X开关),xclock也不会执行。

* setenv | grep DISPLAY这里可以看到不同的结果(与案例1比较)。在case2中,结果只是空白。另一方面,此命令行中case1的结果是DISPLAY: undefined variable...。我不确定是如何引起这种差异的,但是我直觉,它与您是否满足条件1或2有关。 。

案例3

这次,我将在本地计算机上正确指定DISPLAY变量,并在我的-X开关打开的情况下ssh到远程服务器。

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

在此设置下,xclock可以工作!!这是一张截图,证明我没有说谎。 在此处输入图片说明 xclock已成功显示在我的本地计算机中。

再次检查setenv | grep DISPLAY这种情况下的结果。现在显示DISPLAY=localhost:11.0。据我所知,这与.Xauthority文件中的MIT-MAGIC-COOKIE有关,但由于对此我不太了解,因此我将不做进一步介绍。

结论:从以上三种情况中,我们可以确认,为了正确显示远程X Windows,-X必须正确设置1.本机的DISPLAY变量和2. ssh 开关。当然,远程服务器应允许X11forwarding。

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.