X11

為什麼我需要 XDMCP 通過 SSH 啟動遠端 X 會話?

  • March 3, 2018

我正在嘗試設置遠端桌面連接,以通過 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

您可能需要添加&到末尾以使命令在後台執行。

基本上,你會想要:

  1. tty8 上的 X 伺服器,作為其會話程序執行…

  2. … X-forwarding SSH 連接到遠端主機,其中…

  3. gnome-session啟動並將其顯示通過 SSH 連接傳回本地 tty8 上的“空”X 伺服器。

請注意,如果 GNOME 使用 GPU 的高級 3d 加速功能來渲染其桌面,那麼在本地執行時它將使用直接渲染(= GNOME 視窗管理器和 X 伺服器之間的直接記憶體訪問)。像這樣執行遠端會話時,無法直接渲染(因為 GPU 與視窗管理器程序不在同一台電腦上!),這可能會減慢速度。在這種情況下,您可能必須選擇更簡單的視窗管理器。

XDMCP 是一種用於控制*X11 終端的協議:*精簡的電腦設備,其唯一工作是充當其他電腦的 X11 顯示器+滑鼠+鍵盤。XDMCP 協議是在 SSH 之前開發的,完全不安全。它不適用於您的情況,除非您專門將顯示管理器(gdmkdmxdm任何其他*dm)配置為支持 XDMCP,因為 XDMCP 在現代系統上預設禁用,因為它不安全。如果你這樣做了,那麼你可以startx讓你的本地 X 伺服器假裝它是一個 X11 終端,並讓它與遠端主機建立直接的、未加密的、非 SSH 轉發的連接。(拒絕吧”。)

另一方面,X 嵌套將允許您在 :0.0(或tty7)上的正常本地 X11 會話中擁有一個大視窗,然後該視窗將包含遠端桌面會話。

引用自:https://unix.stackexchange.com/questions/427890