2017-06-08 72 views
0

首先:我已經閱讀了關於SO的類似問題的答案,但沒有一個能夠工作。X11轉發在Docker中運行的GUI應用程序

局勢:

  • 應用使用GUI在下Arch Linux的碼頭工人容器(CentOS的7.1)運行。 (機器A)
  • 機器A有一個監視器連接到它。
  • 我想通過我的Arch Linux客戶端機器上的X11轉發來訪問此GUI。 (設備B)

什麼工作:

  • GUI本地工作機器A(與安裝在所述容器多克爾/tmp/.X11-unix)。
  • X11轉發任何在Docker外部運行的應用程序(X11轉發設置並正確運行以實現非泊塢窗使用)。
  • 我甚至可以在遠程登錄時切換用戶,將.Xauthority文件複製到其他用戶,X11轉發也可以。

一些設置信息:

  • 泊塢網絡是 '橋'。
  • 容器可以到達主機(防火牆已打開)。
  • DISPLAY變量在容器中設置(由於sshd正在偵聽的TCP端口6010,因此host-ip-addr:10.0)。
  • 到X前向端口(6010)的數據包正從容器到達主機(選中tcpdump)。

什麼不起作用:

    泊塢窗應用的
  • X11轉發
  • 錯誤:

X11 connection rejected because of wrong authentication.

xterm: Xt error: Can't open display: host-ip-addr:10.0

事情我嘗試:

  • 啓動客戶端SSH與機器B ssh -Y選項
  • "X11ForwardTrusted yes"在ssh_config中對機器B
  • xhost +機器B(所以允許任何客戶端連接)
  • Host *在ssh_config中的機器B
  • X11UseLocalhost no放在機器A的sshd_config中(允許非本地主機客戶端)
  • 將第在容器E X的身份驗證令牌與xauth add從機器上登錄用戶A
  • 只複製過.Xauthority文件從工作用戶進入容器
  • 使舒爾.Xauthority文件具有正確的權限和所有者

我怎麼才能禁用所有的X安全的東西,並得到這個工作?

甚至更​​好:我如何才能使它與安全性一起工作?

是否至少有一種方法可以啓用廣泛的調試來查看問題的確切位置?

回答

2

確定,這裏是一點:

1)登錄到遠程機器

2)檢查哪個顯示設定與echo $DISPLAY

3)運行xauth list

4)複製該行對應於您的DISPLAY

5)輸入您的碼頭集裝箱

6)xauth add <the line you copied> *

7)設置顯示屏,export DISPLAY=<ip-to-host>:<no-of-display>

*到目前爲止好權?

這不是什麼新鮮事......然而,這裏是扭曲: 由xauth list登錄用戶打印的行看起來是這樣的(在我的情況):

<hostname-of-machine>/unix:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here> 

因爲我用橋接泊塢窗設置中,X轉發端口不在本地監聽,因爲sshd沒有在容器中運行。將上面的行更改爲:

<ip-of-host>:<no-of-display> MIT-MAGIC-COOKIE-1 <some number here> 

本質上:刪除/unix部分。

<ip-of-host>是sshd正在運行的IP地址。

如上設置DISPLAY變量。

因此,錯誤是環境變量中的DISPLAY名稱與xauth list/.Xauthority文件中的條目不同,因此客戶端可能無法正確進行身份驗證。

我切換回不可信的X11轉發設置。

然而,sshd_config文件中的X11UseLocalhost no設置非常重要,因爲傳入的連接將來自「不同」的計算機(docker容器)。

相關問題