終于又到工作日了,工作有時(shí)候是個(gè)保護(hù)傘,可以保護(hù)我執(zhí)行自己的計(jì)劃而不被干擾。當(dāng)然如果僅以此來(lái)逃避責(zé)任,這就不是保護(hù)傘了,而是借口,但再深入一層,這個(gè)責(zé)任也確實(shí)得是一種責(zé)任,深入到最后就是價(jià)值判斷的問(wèn)題,想多了腦仁疼。這世上有多少好事是被以假亂真給壞了的。
今天啟動(dòng)ubuntu,在沒(méi)有登錄的情況下嘗試用teamviewer遠(yuǎn)控,但總連不上。手工登錄ubuntu后再遠(yuǎn)控,就可以連上了。要是放在正式部署的環(huán)境下,這樣的遠(yuǎn)控意義何在呢?teamviewer肯定不限于此,遂一番度娘,雖然還是沒(méi)有修正這個(gè)問(wèn)題,但找到了替代方案,且開(kāi)了眼界滿足了好奇心。
先說(shuō)一個(gè)網(wǎng)上找到的解決方案:
sudo gedit /etc/gdm3/custom.conf
將WaylandEnable=false這行注釋取消,重啟即可
WaylandEnable上方有一行注釋:# Uncomment the line below to force the login screen to use Xorg,看來(lái)導(dǎo)致系統(tǒng)重啟后teamviewer無(wú)法遠(yuǎn)控的原因是ubuntu的登錄會(huì)話中默認(rèn)接受使用wayland協(xié)議的x server進(jìn)行連接,wayland相比xorg更新,ubuntu比較激進(jìn),嘗試新的東西,但wayland目前還有很多應(yīng)用不支持,teamviewer顯然包括在不支持之列,換成xorg就可以了。這里涉及到一些linux圖形界面的知識(shí),包括x、x client、x server,GNOME、GDM等等,大概了解一下,感興趣的可以看這篇文章。只要知道一點(diǎn)就夠了,x server是發(fā)起遠(yuǎn)控的機(jī)器上運(yùn)行的程序,x client是被遠(yuǎn)控的ubuntu上運(yùn)行的程序(是不是和我們?nèi)粘?duì)客戶端/服務(wù)器的理解正好相反),teamviewer目前不支持wayland的x server協(xié)議,ubuntu登錄會(huì)話的圖形界面是GDM,默認(rèn)接受wayland協(xié)議的x server連接, 禁用wayland,使用默認(rèn)的x11就可以了。然而實(shí)踐證實(shí),至少我這么修改后沒(méi)什么卵用。懷疑可能是權(quán)限的問(wèn)題,先放一放,以后說(shuō)不定機(jī)緣巧合能找到問(wèn)題根源。
teamviewer雖然用起來(lái)爽,但前提是能公費(fèi)購(gòu)買teamviewer許可證,那樣可以在手機(jī)上也下載一個(gè)teamviewer,綁定設(shè)備后用手機(jī)就可以遠(yuǎn)控服務(wù)器了。算好了大部分懶人都還想從手機(jī)遠(yuǎn)控,免費(fèi)版teamviewer剛好只能綁定兩個(gè)設(shè)備,讓你們嘗到甜頭后乖乖掏錢。既然用linux,就是圖的開(kāi)源社區(qū)豐富,商業(yè)軟件改不了雞賊本性,正好也有啟動(dòng)問(wèn)題沒(méi)解決,就再找個(gè)替代的開(kāi)源方案吧。
ssh連接是最容易想到的,ubuntu默認(rèn)安裝了ssh客戶端,需要自行安裝一個(gè)服務(wù)端:sudo apt install openssh-server,修改一下配置文件,允許遠(yuǎn)程ssh連接,編輯/etc/ssh/sshd_config文件,找到#PasswordAuthentication yes,將注釋取消,確保啟用密碼身份驗(yàn)證。保存后重啟ssh服務(wù):sudo service sshd restart?,F(xiàn)在到windows操作系統(tǒng)下的cmd控制臺(tái)中敲入ssh ubuntu的用戶名@ubuntu的IP地址,回車后需要確認(rèn)密碼,cmd就華麗變身為bash了。ls一下可以看到默認(rèn)是定位在登錄用戶的主目錄,cd ..再..,可以切換到root目錄下,為所欲為的感覺(jué)爽不爽。敲一個(gè)gedit看看能不能打開(kāi)圖形化的文本編輯器,不行。這時(shí)候就需要大名鼎鼎的Xming和Putty登場(chǎng)了(雖然我之前也不知道它倆的大名,以后知道了)。
Xming是一個(gè)虛擬顯示器,Putty可以通過(guò)ssh連接ubuntu,并將圖形界面的輸出定向到Xming的虛擬顯示器上。首先需要在ubuntu下配置ssh,允許ssh連接x11客戶端(剛才研究teamviewer時(shí)擴(kuò)展的linux圖形界面相關(guān)知識(shí)這里派上用場(chǎng)了吧,至少知道這個(gè)x11與圖形界面有關(guān)),還是剛才那個(gè)配置文件/etc/ssh/sshd_config,增加X11Forwarding yes這句。保存,重啟sshd。(這里擴(kuò)充一下,如果想從這臺(tái)ubuntu上通過(guò)ssh client訪問(wèn)其它ssh server的圖形界面,則需要將這個(gè)配置文件中ForwardAgent yes、ForwardX11 yes、ForwardX11Trusted yes這三行從注釋中釋放出來(lái))。服務(wù)端配置好了,返回windows系統(tǒng),下載Xming,國(guó)外站點(diǎn)下載慢可以打開(kāi)迅雷下載,迅雷下載后沒(méi)有后綴,添加.exe后綴就可以了。安裝后打開(kāi)XLaunch,無(wú)腦點(diǎn)擊下一步,最后會(huì)看到windows右下角的系統(tǒng)托盤處有一個(gè)x圖標(biāo),鼠標(biāo)放上去后可以看到Xming Server:0.0的提示,記住這個(gè)號(hào)碼,待會(huì)兒putty定向虛擬屏幕時(shí)就是填這個(gè)號(hào)碼0。接著下載putty,安裝后在配置界面依次打開(kāi)Connection-->SSh-->X11,選中Enable X11forwarding,X display location中填上上一步要你記住的那個(gè)Xming虛擬顯示器的號(hào)碼,這里顯示到本機(jī),故填寫(xiě)localhost:0。在找到Session配置項(xiàng),將ubuntu服務(wù)器的IP地址填寫(xiě)到IP Address欄中,在Saved Sessions欄填寫(xiě)一個(gè)名字(自己?。┯脕?lái)保存這些配置信息。好了,點(diǎn)擊open,就可以打開(kāi)ubuntu的bash了,gedit一下,可以看到這次沒(méi)有報(bào)錯(cuò),切換到Xming的虛擬屏幕里看看,gedit的光標(biāo)已經(jīng)在標(biāo)題欄下閃動(dòng)了。有了上周docker的摸索經(jīng)驗(yàn),如果也只把ubuntu服務(wù)器當(dāng)做生產(chǎn)服務(wù)器,任何開(kāi)發(fā)工作都不在ubuntu上進(jìn)行,那gedit甚至連vi都是不需要的,有沒(méi)有類似的命令可以從windows或者其他ubuntu上拷貝文件到生產(chǎn)服務(wù)器上呢?有了ssh當(dāng)然是可以的,用scp命令,這個(gè)本來(lái)是linux主機(jī)之間的安全拷貝命令,在windows下也可以通過(guò)ssh實(shí)現(xiàn)文件和目錄的上傳下載。具體命令格式如下:
scp 本地文件路徑 ubuntu用戶名@ubuntu_IP地址:/home/xxx
這樣就將指定的本地文件上傳到了ubuntu的/home/xxx目錄下了。如果需要目錄整體上傳,加上-r參數(shù),遞歸拷貝的意思。捋一下思路,日常管理遠(yuǎn)程服務(wù)器,不需要圖形化界面,那就只需要啟用和配置好ubuntu上的ssh,在windows的cmd或者ubuntu上的bash用ssh連接遠(yuǎn)程ubuntu的bash進(jìn)行進(jìn)程管理,用scp修改ubuntu上的文件。善于提問(wèn)的你可能要問(wèn),有沒(méi)有類似scp的安全刪除指令,剛才不是已經(jīng)能ssh獲得bash了嗎,為所欲為不爽嗎。大道至簡(jiǎn),大功告成,從此無(wú)懼遠(yuǎn)控。
在這一頓折騰的過(guò)程中,還有了一個(gè)重大發(fā)現(xiàn),win10操作系統(tǒng)可以建立子系統(tǒng),子系統(tǒng)上就可以安裝Linux,這個(gè)功能叫做wsl(windows subsystem for linux)。經(jīng)過(guò)實(shí)測(cè),通過(guò)wsl跑一個(gè)本地的ubuntu,要比在虛擬機(jī)上跑ubutun并通過(guò)ssh傳輸文件爽快多了,在wsl的ubuntu中,把windows的文件系統(tǒng)掛載在/mnt下,互傳文件不要太爽,以后連vmware都可以省了啊。很有必要隆重介紹一下wsl,這個(gè)對(duì)于習(xí)慣了windows辦公和開(kāi)發(fā)環(huán)境,但又要在ubuntu上部署測(cè)試的人而言,實(shí)在太貼心了。
打開(kāi)windows控制面板里的程序和功能設(shè)置,添加windows功能,選中“適用于windows的linux子系統(tǒng)“,確認(rèn)后就會(huì)進(jìn)行功能安裝,安裝后需要重啟,然后再到微軟商店里搜索ubuntu,選擇ubuntu20.04進(jìn)行安裝。如果不重啟,這里就沒(méi)法進(jìn)行安裝。安裝完畢后,在程序列表里就多了一個(gè)Ubuntu20.04LTS的程序,打開(kāi)就是熟悉的bash,cd到/mnt目錄下ls看看,電腦的幾個(gè)硬盤分區(qū)都掛載過(guò)來(lái)了。這就意味著在wsl里,不需要再通過(guò)ssh的scp與宿主機(jī)互傳文件了,在wsl的ubuntu中磁盤是打通了的。但有好奇的人又想,是不是在windows中也能找到這個(gè)子系統(tǒng)下的目錄?的確可以,但找到了也不能直接去操作,因?yàn)閘inxu和windows的文件系統(tǒng)是不同的,微軟在其中做了一些手腳,所以這個(gè)想法就打消吧,能從wsl中互通有無(wú)還不夠嗎,人不要太貪心。
有了這個(gè)wsl中的處女地,首先就是更換國(guó)內(nèi)的apt源來(lái)進(jìn)行首次耕耘(那個(gè)詞叫什么來(lái)著)。怎么更新?windows的d盤根目錄下新建一個(gè)txt文檔,連同后綴一起改名為sources.list,把清華大學(xué)對(duì)應(yīng)版本的源粘貼進(jìn)去(詳細(xì)可參考前面的日志)。進(jìn)入wsl的bash(p.s.不僅可以從程序列表點(diǎn)擊ubuntu圖標(biāo)進(jìn)到wsl的bash,也可以直接cmd窗口中輸入bash進(jìn)入,有種windows和linux深度打通了的幻覺(jué)),輸入sudo cp /mnt/d/sources.list /etc/apt/sources.list完成apt源更換,再次輸入sudo apt update,通往開(kāi)源世界的翅膀展開(kāi)了。
要不要再在wsl里安裝GNOME圖形界面呢?除了研究ubuntu系統(tǒng)和GNOME的原理,其它看不出什么價(jià)值,畢竟都已經(jīng)是強(qiáng)大的windows圖形化系統(tǒng)的子系統(tǒng)了,還要GNOME干嘛呢?習(xí)慣ubuntu進(jìn)行工作和開(kāi)發(fā)的人也不會(huì)走windows掛子系統(tǒng)這么曲折的道路了。
在來(lái)看看wsl中ubuntu的網(wǎng)絡(luò)情況,sudo apt install net-tools安裝網(wǎng)絡(luò)工具包,然后可以ifconfig,列出的網(wǎng)卡信息和windows的cmd下ipconfig列出的一模一樣,再次有了雙劍合璧的幻覺(jué),不得不佩服微軟的偉大,你們都說(shuō)linux好,那我就徹底融入linux,人無(wú)我有,人有我也有,至少對(duì)于開(kāi)發(fā)和運(yùn)維測(cè)試而言,這一切都相當(dāng)美好。