為什麼我需要 XDMCP 通過 SSH 啟動遠端 X 會話?
我正在嘗試設置遠端桌面連接,以通過 wifi 從我的筆記型電腦(均執行 Trisquel)訪問我的台式電腦。我已經嘗試過 VNC,但速度非常慢,所以我正在尋找其他選擇。我最理想的做法是通過 SSH 啟動一個遠端 X 會話,該會話將使用 X 轉發在我的筆記型電腦(即 tty8)上的一個單獨的 tty 上執行。看起來它應該是可能的,但我試圖弄清楚它是如何工作的。
通過 SSH 隧道的 X 轉發似乎適用於單個 X 應用程序,使用
ssh -X
. 我還可以使用以下命令(安裝了 xinit)在 tty8 上啟動一個新的本地 X 會話:startx lxsession -- :1 tty8
所以,把兩個和兩個放在一起,我應該能夠通過 SSH 連接啟動遠端會話,方法是在使用 SSH 登錄到遠端機器後鍵入以下命令,對吧?:
startx gnome-session -- :1 tty8
但不,它不起作用!我收到以下錯誤:
X: user not authorized to run the X server, aborting.
根據我的閱讀,我似乎需要使用 XDMCP 和/或 X 嵌套來完成此操作。
所以,我的問題是:為什麼有必要使用這些額外的包來做到這一點?我認為 X 應該具有網路透明性,在這種情況下,它為什麼會知道/關心我嘗試使用的 tty 是在本地機器上還是在遠端機器上?XDMCP/X 嵌套給圖片帶來了什麼,X 預設不包括?
我只是想弄清楚這一點並更好地理解它。
startx gnome-session -- :1 tty8
如果您在
ssh -X
會話上執行此命令,您將不會gnome-session
為自己實現遠端。相反,您實際上是在嘗試tty8
在遠端主機的虛擬控制台上遠端啟動 GNOME 會話,無論誰碰巧坐在那台電腦上。相反,您需要先設置 SSH 密鑰,以便您可以在您自己的帳戶上在遠端主機上執行命令,而無需提示輸入密碼或 SSH 密鑰密碼片語。然後你會在你的本地系統上執行這樣的東西:
startx ssh -X <remote host> gnome-session -- :1 tty8
您可能需要添加
&
到末尾以使命令在後台執行。基本上,你會想要:
tty8 上的 X 伺服器,作為其會話程序執行…
… X-forwarding SSH 連接到遠端主機,其中…
…
gnome-session
啟動並將其顯示通過 SSH 連接傳回本地 tty8 上的“空”X 伺服器。請注意,如果 GNOME 使用 GPU 的高級 3d 加速功能來渲染其桌面,那麼在本地執行時它將使用直接渲染(= GNOME 視窗管理器和 X 伺服器之間的直接記憶體訪問)。像這樣執行遠端會話時,無法直接渲染(因為 GPU 與視窗管理器程序不在同一台電腦上!),這可能會減慢速度。在這種情況下,您可能必須選擇更簡單的視窗管理器。
XDMCP 是一種用於控制*X11 終端的協議:*精簡的電腦設備,其唯一工作是充當其他電腦的 X11 顯示器+滑鼠+鍵盤。XDMCP 協議是在 SSH 之前開發的,完全不安全。它不適用於您的情況,除非您專門將顯示管理器(
gdm
、kdm
或xdm
任何其他*dm
)配置為支持 XDMCP,因為 XDMCP 在現代系統上預設禁用,因為它不安全。如果你這樣做了,那麼你可以startx
讓你的本地 X 伺服器假裝它是一個 X11 終端,並讓它與遠端主機建立直接的、未加密的、非 SSH 轉發的連接。(拒絕吧”。)另一方面,X 嵌套將允許您在 :0.0(或
tty7
)上的正常本地 X11 會話中擁有一個大視窗,然後該視窗將包含遠端桌面會話。