在做 數(shù)據(jù)分析(數(shù)據(jù)挖掘 或 機(jī)器學(xué)習(xí))的時(shí)候漫仆,我們經(jīng)常需要繪制一些統(tǒng)計(jì)相關(guān)的圖表嫉鲸,這些統(tǒng)計(jì)、繪圖的程序常常是跑在服務(wù)器上的歹啼,可是服務(wù)器出于性能和效率的考慮玄渗,通常都是沒有安裝圖形化界面的,于是這些統(tǒng)計(jì)狸眼、繪圖的程序在服務(wù)器上壓根兒就跑不起來藤树,或者無法直接顯示出來,這就很尷尬了拓萌!這里咪博士教大家岁钓,如何通過 MobaXterm 和 X11 Forwarding 遠(yuǎn)程顯示服務(wù)器上的圖形化界面(GUI 程序)。
一微王、原理
1. X 協(xié)議
Linux 本身是沒有圖形化界面的屡限,所謂的圖形化界面系統(tǒng)只不過中 Linux 下的應(yīng)用程序。這一點(diǎn)和 Windows 不一樣炕倘。Windows 從 Windows 95 開始钧大,圖形界面就直接在系統(tǒng)內(nèi)核中實(shí)現(xiàn)了,是操作系統(tǒng)不可或缺的一部分罩旋。Linux 的圖形化界面啊央,底層都是基于 X 協(xié)議。
X 協(xié)議由 X server 和 X client 組成:
- X server 管理主機(jī)上與顯示相關(guān)的硬件設(shè)置(如顯卡涨醋、硬盤瓜饥、鼠標(biāo)等),它負(fù)責(zé)屏幕畫面的繪制與顯示浴骂,以及將輸入設(shè)置(如鍵盤乓土、鼠標(biāo))的動(dòng)作告知 X client。
- X client (即 X 應(yīng)用程序) 則主要負(fù)責(zé)事件的處理(即程序的邏輯)溯警。
舉個(gè)例子趣苏,如果用戶點(diǎn)擊了鼠標(biāo)左鍵,因?yàn)槭髽?biāo)歸 X server 管理愧膀,于是 X server 就捕捉到了鼠標(biāo)點(diǎn)擊這個(gè)動(dòng)作拦键,然后它將這個(gè)動(dòng)作告訴 X client,因?yàn)?X client 負(fù)責(zé)程序邏輯檩淋,于是 X client 就根據(jù)程序預(yù)先設(shè)定的邏輯(例如畫一個(gè)圓)芬为,告訴 X server 說:“請?jiān)谑髽?biāo)點(diǎn)擊的位置萄金,畫一個(gè)圓”。最后媚朦,X server 就響應(yīng) X client 的請求氧敢,在鼠標(biāo)點(diǎn)擊的位置,繪制并顯示出一個(gè)圓询张。
2. X11 Forwarding
這么繞孙乖,有啥意義呢?當(dāng)然有份氧!
許多時(shí)候 X server 和 X client 在同一臺(tái)主機(jī)上唯袄,這看起來沒什么。但是蜗帜, X server 和 X client 完全可以運(yùn)行在不同的機(jī)器上恋拷,只要彼此通過 X 協(xié)議通信即可。于是厅缺,我們就可以做一些“神奇”的事情蔬顾,比如像本文開頭談到的,在本地顯示 (X server)湘捎,運(yùn)行在服務(wù)器上的 GUI 程序 (X client)诀豁。這樣的操作可以通過 SSH X11 Forwarding (轉(zhuǎn)發(fā)) 來實(shí)現(xiàn)。
X11 中的 X 指的就是 X 協(xié)議窥妇,11 指的是采用 X 協(xié)議的第 11 個(gè)版本舷胜。
3. MobaXterm
那 MobaXterm 又是什么鬼?MobaXterm 是一款開源秩伞、免費(fèi)的逞带、全功能終端軟件。它與 PuTTY 類似纱新,但卻比 PuTTY 要強(qiáng)大得多,其中一個(gè)很實(shí)用的功能就是 MobaXterm 自帶 X Server穆趴。這樣我們就不用勞神地去想怎么在 Windows 上啟動(dòng) X server 了脸爱。
小結(jié)一下,整個(gè)實(shí)現(xiàn)邏輯就是:
本地機(jī)器采用 MobaXterm (自帶 X server) 連接遠(yuǎn)程服務(wù)器未妹。然后簿废,在服務(wù)器上運(yùn)行 GUI 程序 (即 X client),通過 SSH X11 Forwarding络它,轉(zhuǎn)發(fā)到本地 (Windows 機(jī)器上)族檬。
二、實(shí)戰(zhàn)
1. 服務(wù)器端
安裝 X11 Forwarding 相關(guān)軟件
sudo yum install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock
啟用 X11 Forwarding
sudo vim /etc/ssh/sshd_config
將 X11Forwarding 和 X11UseLocalhost 前面的 # 去掉化戳,并將 X11Forwarding 設(shè)置為 yes单料,X11UseLocalhost 設(shè)置為 no
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
X11UseLocalhost no
重啟 sshd 服務(wù)
sudo systemctl restart sshd.service
2. 本地 (Windows 端)
下載并安裝 MobaXterm
https://pan.baidu.com/s/1eS5xdYU
遠(yuǎn)程連接服務(wù)器
注意到 X11-forwarding 和 DISPLAY 這兩項(xiàng)都打上了綠色的勾埋凯,代表設(shè)置成功了。
3. 驗(yàn)證
在服務(wù)器端運(yùn)行一個(gè) GUI 程序扫尖,如
xclock
這時(shí)候白对,你在本地 (Windows 端),就可以看到相應(yīng)的圖形化界面(窗口)
【原文鏈接】 http://www.ipaomi.com/2017/11/09/遠(yuǎn)程顯示操作-服務(wù)器-gui-程序圖形化界面-基于-x11-forwarding-centos/