遠程顯示(操做) 服務器 GUI 程序(圖形化界面) (基於 X11 Forwarding + Centos + MobaXterm)vim
在作 數據分析(數據挖掘 或 機器學習)的時候,咱們常常須要繪製一些統計相關的圖表,這些統計、繪圖的程序經常是跑在服務器上的,但是服務器出於性能和效率的考慮,一般都是沒有安裝圖形化界面的,因而這些統計、繪圖的程序在服務器上壓根兒就跑不起來,或者沒法直接顯示出來,這就很尷尬了!這裏咪博士教你們,如何經過 MobaXterm 和 X11 Forwarding 遠程顯示服務器上的圖形化界面(GUI 程序)。服務器
1、原理ssh
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 Forwarding3d
這麼繞,有啥意義呢?固然有!rest
許多時候 X server 和 X client 在同一臺主機上,這看起來沒什麼。可是, X server 和 X client 徹底能夠運行在不一樣的機器上,只要彼此經過 X 協議通訊便可。因而,咱們就能夠作一些「神奇」的事情,好比像本文開頭談到的,在本地顯示 (X server),運行在服務器上的 GUI 程序 (X client)。這樣的操做能夠經過 SSH X11 Forwarding (轉發) 來實現。server
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 機器上)。
2、實戰
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 端),就能夠看到相應的圖形化界面(窗口)