
對我來說,很奇怪的是,當使用帶有 X11 轉送的 ssh 連線時,使用者和 root 能夠看到xclock
,但另一個使用者卻看不到。為什麼?
mahmood@cluster:~$ xclock
^C
mahmood@cluster:~$ su
Password:
root@cluster:mahmood# xclock
^C
root@cluster:mahmood# su - hmousavi
hmousavi@cluster:~$ xclock
MobaXterm X11 proxy: Authorisation not recognised
Error: Can't open display: localhost:10.0
hmousavi@cluster:~$
PS:^C
意味著我能夠看到該xclock
窗口,因此我按下^C
返回終端。
答案1
連接到 X11 顯示器需要兩個資訊:顯示器名稱(通常在DISPLAY
環境變數中傳遞)和餅乾,這是每個應用程式在連接時必須顯示的顯示器密碼。通常,cookie 儲存在 中~/.Xauthority
,但也可以儲存在XAUTHORITY
環境變數指示的不同檔案中。
看來DISPLAY
SSH 設定的值被兩次呼叫保留了su
。然而 cookie 位於~mahmood/.Xauthority
;當您以 hmousavi 執行程式時,程式會在其中尋找 cookie~hmousavi/.Xauthority
並找到不同的值。
原則上您可以運行XAUTHORITY=~mahmood/.Xauthority xclock
,但 hmousavi 可能沒有讀取該檔案的權限 -.Xauthority
其他使用者不應該讀取該檔案。您可以使用該xauth
命令兩次,一次作為 mahmood 來提取 cookie 值 ( xauth list localhost:10.0
),一次作為 hmousavi 來導入該值 ( xauth merge
),但這很麻煩。讓 X11 應用程式運作最簡單的方法是全程使用 SSH,因為 SSH 會自動設定 X11 轉送:
mahmood@cluster:~$ ssh -X hmousavi@localhost
hmousavi@cluster:~$ xclock
將 mahmood 的 SSH 公鑰新增至 hmousavi.ssh/authorized_keys
以允許此操作。