好久不見~
廢話不多說,上教程。
在做 數(shù)據(jù)分析(數(shù)據(jù)挖掘 或 機(jī)器學(xué)習(xí))的時(shí)候,我們經(jīng)常需要繪制一些統(tǒng)計(jì)相關(guān)的圖表,這些統(tǒng)計(jì)、繪圖的程序常常是跑在服務(wù)器上的,可是服務(wù)器出于性能和效率的考慮,通常都是沒有安裝圖形化界面的,于是這些統(tǒng)計(jì)、繪圖的程序在服務(wù)器上壓根兒就跑不起來,或者無(wú)法直接顯示出來,這就很尷尬了!
Linux 本身是沒有圖形化界面的,所謂的圖形化界面系統(tǒng)只不過中 Linux 下的應(yīng)用程序。這一點(diǎn)和 Windows 不一樣。Windows 從 Windows 95 開始,圖形界面就直接在系統(tǒng)內(nèi)核中實(shí)現(xiàn)了,是操作系統(tǒng)不可或缺的一部分。Linux 的圖形化界面,底層都是基于 X 協(xié)議。
假設(shè)我在使用VSCode的remote-ssh,并成功連接上了遠(yuǎn)程服務(wù)器,現(xiàn)在需要在調(diào)試代碼的時(shí)候顯示圖形化界面。例如Python的opencv或者matplotlib的圖形輸出。
Mac 現(xiàn)在不提供X11 需要安裝Xquartz,在https://www.xquartz.org/下載適合Mac的最新版安裝包(其實(shí)不是很新了)。
首先,我們編輯服務(wù)器端的設(shè)置,使其能夠X11轉(zhuǎn)發(fā):
編輯/etc/ssh/sshd_config文件中找到如下兩個(gè)參數(shù),設(shè)置為yes和10
X11Forwarding yes
X11DisplayOffset 10
更改后需要重啟服務(wù), Linux運(yùn)行如下命令重新啟動(dòng)ssh服務(wù)。
service ssh restart
然后,我們編輯Mac上的配置,編輯/private/etc/ssh/ssh_config文件(可使用vi),設(shè)置如下參數(shù)為yes。
ForwardX11 yes
最后,使用安裝了remote-ssh插件的VSCode,登錄遠(yuǎn)程服務(wù)器,記得要在命令后加-X選項(xiàng)。

跑一個(gè)帶有圖形輸入的代碼試試看~

不過,matplotlib輸出的模塊,上面的保存按鈕,還是只能保存在了服務(wù)器中,可以使用ssh配合scp傳輸?shù)奖镜亍?p>
當(dāng)然,配好了X11的轉(zhuǎn)發(fā),其實(shí)我們可以做很多事情,例如在遠(yuǎn)程登錄后終端里輸入任意一個(gè)linux的GUI軟件的命令:

參考: