启用 X11 转发后,通过 ssh 打开 X 程序时出现“无法打开显示”错误,如何修复?

启用 X11 转发后,通过 ssh 打开 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进入我的 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

如果你有这个问题一段时间后使用-Xarg 运行时,或者仅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 选项。

来源:

相关内容