在我的 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
通过 sshed 进入我的 VM 然后运行gedit .bashrc
,但是得到:
(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0
两台不同的 Ubuntu 机器的配置可能存在哪些不同,这可以解释为什么一台机器可以运行,而另一台却不能?
更新:根据建议佐尔达什在下面的评论中,我运行了sudo apt-get install xbase-clients
,但仍然遇到同样的问题。
答案1
检查服务器sshd_config
(通常/etc/ssh/sshd_config
),并确保X11Forwarding
该选项已启用,并且该行
X11Forwarding yes
如果未指定 X11Forwarding,则默认为no
我可以检查的 Debian 机器。
答案2
从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。
答案3
我在从 Mac OS X 登录 Ubuntu VM 时也遇到过这个问题——出于某种原因,它似乎不喜欢显示变量中的“localhost”。因此,请按照 harrymc 的建议手动设置 IP:
export DISPLAY="127.0.0.1:10.0"
然后 X11 程序应该没问题。似乎没有必要告诉操作系统 localhost 和 127.0.0.1 是等效的,但至少它是有效的。
答案4
如果你有这个问题一段时间后使用-X
arg 运行时,或者仅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 选项。
来源: