請參見: Linux開源免費的遠端桌面列表
遠端Linux沒有圖形界面,但是需要執行圖形程式,該怎麼辦呢?
不如透過X11 Forwarding,將它放到本機Linux的X伺服器執行吧!圖片為在Ubuntu執行Debian伺服器上的Chromium瀏覽器。
1. X11 Forwarding有何用?#
Linux的圖形環境都是建基於X視窗系統(X11)之上的,有了這套軟體才能跑圖形程式,還有我們熟知的GNOME、KDE桌面環境。
X視窗系統因為具有主從式架構,能有多個X客戶端連線到X伺服端,故能夠自由指定DISPLAY:
環境變數,藉由網路透明性(network transparency),在同一網路下的其他電腦顯示圖形程式。
比如,我們可以讓一台headless的A電腦的畫面,顯示在另一台有連接顯示器的B電腦:
# A電腦執行指令,指定使用B電腦的DISPLAY
export DISPLAY=192.168.1.102:0
# A電腦執行指令,在連接顯示器的B電腦顯示xterm程式
xterm
# 你可能還要在B電腦允許其他X客戶端在你的畫面上顯示
xhost +
此時,B電腦就成為了A電腦的X客戶端。執行於X客戶端的圖形程式,渲染工作是由遠端X伺服端負責的,所以依賴OpenGL的程式可以吃到3D加速。
那麼什麼是X11 Forwarding?中文意為X11轉發,將遠端X視窗的畫面轉發到本機顯示。參考下圖,SSH會將遠端X客戶端通過代理傳送到本機。
為什麼X11 Forwarding要搭配SSH使用呢?因為X伺服器與X客戶端之間通訊是沒有加密的,這樣很容易被攔截竄改,所以讓它走SSH加密通道較為保險。於是乎,整個技術就變成了「SSH X11 Forwarding」。
某種程度來說X11 Forwarding可以算是遠端桌面吧,但是它不是VNC那種啟動整個Linux桌面環境的方案,反而比較像是跑單一應用程式視窗用的。還有X11畫面傳輸沒有經過任何壓縮,也因此X11 Forwarding比VNC吃頻寬,不適合網路連線緩慢的情況使用(其實就算是區域網路,X11 Forwarding的效率也是非常差勁,比不上VNC)。
2. X11 Forwarding運作需要的環境#
第一,SSH伺服器和SSH客戶端是必備的。
第二,X11 Forwarding運作條件是客戶端必須執行X伺服器。
理想上遠端和客戶端都是Linux系統比較好操作,因為大部份Linux發行版都有X視窗系統。本文探討的便是Linux對Linux進行X11 Forwarding。
不過X11 Forwarding並無限制一定要用Linux, X11 Forwarding是可以在其他系統運作的。
如果要Linux → Windows,因為Window不是使用X視窗系統,所以要安裝開源的 Vcxsrv跑一個X伺服器,讓遠端Linux的視窗在Windows上執行。
Linux → macOS,請裝 XQuartz
Linux → Android,請裝 Termux X11
Linux → iOS,請裝 iSH Shell
3. 如何進行X11 Forwarding操作#
假設遠端伺服器為Debian 12,客戶端為Ubuntu 24.04。
在要連線的客戶端,也就是Ubuntu,開啟終端機
使用SSH登入遠端Debian
ssh 使用者名稱@伺服器IP
- X11 Forwarding預設是關閉的,所以要編輯sshd設定檔
sudo vim /etc/ssh/sshd_config
- 將這裡取消註解,啟用X11 Forwarding
AllowTcpForwarding yes
X11Forwarding yes
X11UseLocalhost yes
- 重新啟動SSH服務
sudo systemctl restart sshd
- 開一個新的終端機視窗,ssh指令加上
-X
選項,後面加上要啟動的程式,例如這裡為xterm:
ssh -X 使用者名稱@伺服器IP xterm
4. ssh -X與ssh -Y的差別#
ssh -X
稱作untrusted X11 forwarding,連線時比較安全。
ssh -Y
為trusted X11 forwarding,只有在部份程式無法開啟時才使用此選項。
5. Wayland的X11 Forwarding替代品#
隨著Wayland成為主流的顯示協定,X11 Forwarding也逐漸走入歷史了…啊不過有開發者做了概念上類似的 WayPipe,能夠把遠端Wayland程式拉到本機Wayland執行。