使用 SSH X11 转发 (`ssh -X`),尝试运行 X 应用程序时获取“无法打开显示”

Omi*_*uin 27 ssh rhel x11

我可以登录以使用

ssh -X Hostip
Run Code Online (Sandbox Code Playgroud)

但是当我运行命令 xclock 它给我这个错误

Error: Can't open display: localhost:11.0
Run Code Online (Sandbox Code Playgroud)

我使用检查我的显示值

echo $DISPLAY
Run Code Online (Sandbox Code Playgroud)

结果是

localhost:11.0
Run Code Online (Sandbox Code Playgroud)

并且在 sshd_config 文件中将 X11 转发设置为 YES

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
Run Code Online (Sandbox Code Playgroud)

有什么建议我在这里想念的吗?

小智 21

使用-Y. 从 ssh 上的手册页:

-Y 启用受信任的 X11 转发。受信任的 X11 转发不受 X11 安全扩展控制的约束。

如果您仍然遇到问题,您可以尝试设置$DISPLAY为您本地机器的 IP

$ export DISPLAY='<ip_address>:11.0'
Run Code Online (Sandbox Code Playgroud)

将其设置为

$ export DISPLAY='127.0.0.1:11.0'
Run Code Online (Sandbox Code Playgroud)

人们在从 Mac OS X ssh'ing时似乎普遍存在这个问题。您可能还想设置

X11UseLocalhost no
Run Code Online (Sandbox Code Playgroud)

在这种情况下也是如此。

  • 即使在尝试了您的其他建议之后,我也无法打开显示器。 (6认同)
  • 这些都不适合我。我需要在我的 Centos 7 服务器(最小)中安装 XWindow 支持: yum groupinstall "X Window System" -y (2认同)

小智 8

这对我有用:

改变

X11UseLocalhost yes
Run Code Online (Sandbox Code Playgroud)

X11UseLocalhost no
Run Code Online (Sandbox Code Playgroud)

  • 在客人?主持人?哪个配置文件?谢谢完成你的答案 (11认同)

Tho*_*ner 7

感谢https://unix.stackexchange.com/a/12772/61349他们的诊断说明。

确保您是 ssh 客户端使用-v标志请求 X11 转发

ssh example.com -X -v
Run Code Online (Sandbox Code Playgroud)

并查找特定消息:

debug1: Requesting X11 forwarding with authentication spoofing.
Run Code Online (Sandbox Code Playgroud)

另一个明显的问题标志是缺少DISPLAY为您设置的环境变量 beign。如果它为空白/未设置,则有问题。至少根据上面提到的同一篇文章,这些变量是自动为您设置的。


我正在使用 SSH Control Master 我的 ssh 连接,如下所示:

Host <hostname>
    ControlMaster auto
    ControlPath ~/.ssh/control/%r@%h:%p
    ControlPersist 10m
Run Code Online (Sandbox Code Playgroud)

我之前的 ssh 连接没有请求 X11Firwarding,因此ssh没有使用未来调用的选项。所以对我来说,

ssh-X只是被完全忽略了

如果您没有看到“Requesting X11 Forwarding”,但您确实看到了复用器重用会话;

debug1: auto-mux: Trying existing master
debug1: mux_client_request_session: master session id: 10
Run Code Online (Sandbox Code Playgroud)

然后,您需要退出该连接的当前 ControlMaster,并使用 -X/-Y 标志重新连接。

停止您的 ControlMaster

ssh -O check <hostname>

Master running (pid=2758)
Run Code Online (Sandbox Code Playgroud)

(这将使用 ControlMaster 退出所有活动连接)

ssh -O exit <hostname>

Exit request sent.
Run Code Online (Sandbox Code Playgroud)


小智 6

对我来说解决这个问题的只是安装 xauth,一旦完成,它就像一个魅力!