Leo Yeh's Blog

解決問題 X11 (2)

教學目標

主要解決當使用 X11 視窗介面進行操作時無法正常連線的問題。

重點概念

嘗試連線 X11 Forwarding

方式一

連線至伺服器主機,若我們需要啟用 SSH 客戶端 X11 Forwarding 功能,則要先啟動 X 伺服器在工作站上,接著連線至 Linux 作業系統,透過 -X 參數啟用 SSH 客戶端 X11 Forwarding 功能。

1
$ ssh -X [使用者帳號]@[伺服器主機/伺服器 IP]

方式二

連線至伺服器主機,接著透過 xhost 程式主要被使用於增加和刪除主機名稱或使用者名稱至被允許建立連線的清單中,也就是 X11 伺服器存取控制工具,用於控管哪些 X11 客戶端能夠在 X 伺服器上顯示,「xhost +」為關閉存取控制,允許任何主機存取本機的 X11 伺服器,「xhost -」為打開存取控制,僅允許授權清單中的主機存取本地的 X 伺服器,至於為何透過 xhost 嘗試連線 X11 Forwarding 功能,因為 xhost 執行會使用 X11 Forwarding 功能,若是無法正常使用,則會出現錯誤訊息。

1
2
$ ssh [使用者帳號]@[伺服器主機/伺服器 IP]
$ xhost

確認 .Xauthority 檔案內容

當使用者透過 ssh 登入時,理論上皆會在個人目錄中的 .Xauthority 檔案建立新的授權資訊,但是若我們直接著透過 「vi」 開啟 .Xauthority 檔案時,則會有部份內容為亂碼,因為是二進位格式。為了正常顯示 .Xauthority 檔案,此時我們主要會透過「xauth list」查看 .Xauthority 檔案內容,此外透過「xauth remove [伺服器主機/伺服器 IP]/unix:0」即可刪除對應的授權內容,以及透過「xauth add」和「xauth generate」手動產生對應的授權內容。

1
2
$ xauth list
[伺服器主機/伺服器 IP]/unix:0 MIT-MAGIC-COOKIE-1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

確認 SSH 伺服器之 X Forwarding 設定

1
2
$ cat /etc/ssh/sshd_config  | grep X11Forwarding
X11Forwarding yes

確認 SSH 客戶端之 X Forwarding 設定

1
2
3
$ cat /etc/ssh/ssh_config | grep ForwardX11
ForwardX11 yes
ForwardX11Trusted yes

變更 .Xauthority 檔案權限

1
$ sudo chown [使用者帳號]:[使用者群組] .XAuthority

重新安裝 XAUTH 套件

1
$ yum install xorg-x11-xauth

實務案例說明

當使用者透過 MobaXterm 工具登入 Linux 作業系統時,則會在使用者的目錄中「/home/使用者帳號」產生 .Xauthority 檔案,此時我們透過下述指令查看 .Xauthority 檔案內容,因為 .Xauthority 檔案是二進位檔案,所以無法直接透過 cat 或 vi 查看。

1
2
$ xauth list
伺服器主機名稱/unix:10 MIT-MAGIC-COOKIE-1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

此時我們執行「firefox」指令將能夠透過 X11 Forwarding 開啟 Firefox 瀏覽器。

1
$ firefox

但是若我們執行「sudo su」指令切換至 root 使用者帳號行「firefox」指令將會發生下述錯誤。

1
2
3
$ firefox
X11 connection rejected because of wrong authentication.
Error: cannot open display: localhost:10.0

此時我們先確認 .Xauthority 檔案內容,主要透過「xauth list」進行確認,將發現 .Xauthority 檔案未建立,所以我們只需建立 .Xauthority 檔案就夠正常使用 X11 Forwarding 功能。

1
2
$ xauth list
xauth: creating new authority file /root/.Xauthority

接著我們將使用者目錄下的 .Xauthority 檔案複制至 root 目錄,理應就能夠正常透過 X11 Forwarding 開啟 Firefox 瀏覽器。

1
2
3
4
$ cp /home/[使用者帳號]/.Xauthority /root/.XAuthority
$ xauth list
[伺服器主機/伺服器 IP]/unix:10 MIT-MAGIC-COOKIE-1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ firefox

總結我們可以了解決若要使用 X11 Forwarding 的功能則會在每次 ssh 登入之後,在個人目錄下產生 .Xauthority 檔案進行驗證之後,才能夠進行 X11 Forwarding 的連線。

相關資源

⬅️ Go back