在做 數據分析(數據挖掘 或 機器學習)的時候,我們經常需要繪製一些統計相關的圖表,這些統計、繪圖的程式常常是跑在伺服器上的,可是伺服器出於性能和效率的考慮,通常都是沒有安裝圖形化界面的,於是這些統計、繪圖的程式在伺服器上壓根兒就跑不起來,或者無法直接顯示出來,這就很尷尬了!這裡咪博士教大家,如何通 ...
在做 數據分析(數據挖掘 或 機器學習)的時候,我們經常需要繪製一些統計相關的圖表,這些統計、繪圖的程式常常是跑在伺服器上的,可是伺服器出於性能和效率的考慮,通常都是沒有安裝圖形化界面的,於是這些統計、繪圖的程式在伺服器上壓根兒就跑不起來,或者無法直接顯示出來,這就很尷尬了!這裡咪博士教大家,如何通過 MobaXterm 和 X11 Forwarding 遠程顯示伺服器上的圖形化界面(GUI 程式)。
一、原理
1. X 協議
Linux 本身是沒有圖形化界面的,所謂的圖形化界面系統只不過中 Linux 下的應用程式。這一點和 Windows 不一樣。Windows 從 Windows 95 開始,圖形界面就直接在系統內核中實現了,是操作系統不可或缺的一部分。Linux 的圖形化界面,底層都是基於 X 協議。
X 協議由 X server 和 X client 組成:
- X server 管理主機上與顯示相關的硬體設置(如顯卡、硬碟、滑鼠等),它負責屏幕畫面的繪製與顯示,以及將輸入設置(如鍵盤、滑鼠)的動作告知 X client。
- X client (即 X 應用程式) 則主要負責事件的處理(即程式的邏輯)。
舉個例子,如果用戶點擊了滑鼠左鍵,因為滑鼠歸 X server 管理,於是 X server 就捕捉到了滑鼠點擊這個動作,然後它將這個動作告訴 X client,因為 X client 負責程式邏輯,於是 X client 就根據程式預先設定的邏輯(例如畫一個圓),告訴 X server 說:“請在滑鼠點擊的位置,畫一個圓”。最後,X server 就響應 X client 的請求,在滑鼠點擊的位置,繪製並顯示出一個圓。
2. X11 Forwarding
這麼繞,有啥意義呢?當然有!
許多時候 X server 和 X client 在同一臺主機上,這看起來沒什麼。但是, X server 和 X client 完全可以運行在不同的機器上,只要彼此通過 X 協議通信即可。於是,我們就可以做一些“神奇”的事情,比如像本文開頭談到的,在本地顯示 (X server),運行在伺服器上的 GUI 程式 (X client)。這樣的操作可以通過 SSH X11 Forwarding (轉發) 來實現。
X11 中的 X 指的就是 X 協議,11 指的是採用 X 協議的第 11 個版本。
3. MobaXterm
那 MobaXterm 又是什麼鬼?MobaXterm 是一款開源、免費的、全功能終端軟體。它與 PuTTY 類似,但卻比 PuTTY 要強大得多,其中一個很實用的功能就是 MobaXterm 自帶 X Server。這樣我們就不用勞神地去想怎麼在 Windows 上啟動 X server 了。
小結一下,整個實現邏輯就是:
本地機器採用 MobaXterm (自帶 X server) 連接遠程伺服器。然後,在伺服器上運行 GUI 程式 (即 X client),通過 SSH X11 Forwarding,轉發到本地 (Windows 機器上)。
二、實戰
1. 伺服器端
安裝 X11 Forwarding 相關軟體
1 sudo yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock
啟用 X11 Forwarding
1 sudo vim /etc/ssh/sshd_config
將 X11Forwarding 和 X11UseLocalhost 前面的 # 去掉,並將 X11Forwarding 設置為 yes,X11UseLocalhost 設置為 no
1 #AllowAgentForwarding yes 2 #AllowTcpForwarding yes 3 #GatewayPorts no 4 X11Forwarding yes 5 #X11DisplayOffset 10 6 X11UseLocalhost no
重啟 sshd 服務
1 sudo systemctl restart sshd.service
2. 本地 (Windows 端)
下載並安裝 MobaXterm
https://pan.baidu.com/s/1eS5xdYU
遠程連接伺服器
註意到 X11-forwarding 和 DISPLAY 這兩項都打上了綠色的勾,代表設置成功了。
3. 驗證
在伺服器端運行一個 GUI 程式,如
1 xclock
這時候,你在本地 (Windows 端),就可以看到相應的圖形化界面(視窗)
【原文鏈接】http://www.ipaomi.com/2017/11/09/遠程顯示操作-伺服器-gui-程式圖形化界面-基於-x11-forwarding-centos/