【发布时间】:2017-11-09 19:05:17
【问题描述】:
首先:我已经阅读了关于 SO 的类似问题的答案,但没有一个有效。
重要提示:下面的答案仍然有效,但可能会跳到最后。
情况:
- 带有 GUI 的应用程序在 Arch Linux 下的 docker 容器 (CentOS 7.1) 中运行。 (机器 A)
- 机器 A 连接了一个监视器。
- 我想在我的 Arch Linux 客户端机器上通过 X11 转发访问这个 GUI。 (机器 B)
什么有效:
- GUI 在机器 A 上本地运行(在 Docker 容器中挂载了 /tmp/.X11-unix)。
- X11 转发在 docker 之外运行的任何应用程序(X11 转发已设置并正常运行以供非 docker 使用)。
- 我什至可以在远程登录时切换用户,将
.Xauthority文件复制给其他用户,X11 转发也能正常工作。
一些设置信息:
- Docker 网络已“桥接”。
- 容器可以到达主机(防火墙已打开)。
-
DISPLAY变量在容器中设置(到 host-ip-addr:10.0,因为 sshd 正在侦听 TCP 端口 6010)。 - 到 X 转发端口 (6010) 的数据包正在从容器到达主机(
tcpdump已选中)。
什么不起作用:
- Docker 应用的 X11 转发
- 错误:
X11 connection rejected because of wrong authentication.
xterm: Xt error: Can't open display: host-ip-addr:10.0
我尝试过的事情:
- 在机器 B 上使用
ssh -Y选项启动客户端 ssh - 将
"X11ForwardTrusted yes"放入机器 B 上的 ssh_config 中 -
xhost +(因此允许任何客户端连接)在机器 B 上 - 将
Host *放入机器 B 上的 ssh_config 中 - 将
X11UseLocalhost no放入机器A 上的sshd_config 中(以允许非本地主机客户端) - 从机器 A 上的登录用户使用
xauth add在容器中添加 X 身份验证令牌 - 只需将
.Xauthority文件从工作用户复制到容器中 - 使 shure
.Xauthority文件具有正确的权限和所有者
我怎样才能禁用所有 X 安全功能并使其正常工作?
甚至更好:我怎样才能让它与安全性一起工作?
是否至少有一种方法可以启用大量调试以查看问题的确切位置?
替代方案:下面的第一个答案显示了如何有效解决此问题。但是:我建议您一起研究一种不同的方法,即 VNC。我个人切换到了替代 X11 转发的tigerVNC 设置并且没有回头。性能仅比 X11 转发为我提供的性能高出几级。在某些情况下,您可能出于某种原因无法使用 VNC,但我会先尝试一下。
现在的一般设置如下:
-VNC 服务器在主机上的机器 A 上运行(不在 docker 容器内)。
- 现在您只需要弄清楚如何在 docker 容器内获取 GUI(这是一项更简单的任务)。
- 如果 docker 容器不是从 VNC 环境启动的,DISPLAY 变量可能需要调整。
【问题讨论】:
标签: authentication docker x11-forwarding