隨著技術的發展,測試行業也慢慢和運維靠攏,與devops對應,誕生了testops的概念。所以各位測試同學務必建立起一定的運維知識。在傳統的運維或者測試工作當中,對于機器的遠程桌面管理一直是很常規的工作,比如windows的遠程桌面RDP,linux的vnc和nomachine。今天我們主要聊一下novnc這個東西在vnc領域的使用,原因在于,有時候我們不想安裝一個客戶端軟件,或者需要提供一個方便的遠程的工具內嵌到我們的應用當中。下文以ubuntu為例進行介紹,windows比較簡便,不在贅述。
安裝vncserver
傳統linux服務器在安裝過程中為了減少空間,提高效率和增強安全性,一般只會做最小的服務器安裝,所以不會安裝桌面相關的組件。而在vnc的使用過程中,大家動動腦子就知道,沒有桌面支持,我們顯示個鳥文件夾啊。
- 以xfce為例,我們增加桌面環境的支持:
sudo apt-get install xfce4
- 然后我們安裝vnc服務端:
sudo apt-get install vnc4server
- 修改~/.vnc/xstartup中的內容為:
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
- 然后使用如下命令啟動vnc:
vncserver
啟動的時候會提示輸入連接密碼以及是否提供一個只讀密碼,根據需要,自行輸入。啟動成功后會得到如下結果:
ubuntu@awvs:~/.vnc$ vncserver
New 'X' desktop is awvs:1
Starting Applications specified in /home/ubuntu/.vnc/xstartup
Log file is /home/ubuntu/.vnc/awvs:1.log
這里面要說明下,vnc的服務器的端口從5901開始,上面的awvs:1中,awvs是主機名;1的意思就是端口5901,如果是2的話,端口就是5902了。如果要停止當前的vnc服務,使用:
vncserver -kill :1
支持,服務端的配置算完成了。一般的介紹中,后面會介紹客戶端的安裝。比較常見的有tightnvc、vncviewer等,隨便選擇安裝一款即可。比如我在windows上安裝的就是tightvnc。
使用的時候,從程序里面找到tightvnc%20viewer進行啟動,然后輸入我們vnc服務的ip和地址,比如上文的192.168.10.49:5901:
啟動后輸入我們在執行vncserver的時候設定的密碼:
,就可以看到遠程桌面了:
novnc的安裝和使用
上文我們說到,使用vnc的時候必須安裝服務端和客戶端,其中服務端是必不可少的,客戶端有可以不必安裝的解決方案,這里介紹下novnc:https://github.com/novnc/noVNC。看下官方的介紹:
noVNC is both a html VNC client JAVAScript library and an application built on top of that library. noVNC runs well in any modern browser including mobile browsers (IOS and Android).
簡單翻譯下:noVNC是一個使用HTML的VNC客戶端JavaScript的庫和基于該庫之上的應用。noVNC運行在所有的現代瀏覽器當中(包括iOS和安卓)。
Many companies, projects and products have integrated noVNC including OpenStack, OpenNebula, LibVNCServer, and ThinLinc.
再來看看典型客戶:許多、項目和產品都在其中集成了noVNC,包括OpenStack, OpenNebula(OpenNebula是專門為云計算打造的開源系統,用戶可以使用Xen、KVM、VMware等虛擬化軟件一起打造企業云。利用OpenNebula可以輕松構建私有云、混合云、公開云)、LibVNCServer(一個實現了vnc服務器端的庫)等。
簡單總結下:NoVNC是一個js庫,在云計算等iaas層有著典型的應用。這與我在上面提到的測試必須掌握一定的運維知識相符合:)
- 首先在ubuntu上開啟snap:
sudo apt install snapd
sudo systemctl enable --now snapd.socket
- 然后通過snap安裝novnc應用:
sudo snap install novnc
- 接下來使用如下的命令創建一個novnc的服務:
sudo snap set novnc services.n6081.listen=6081 services.n6081.vnc=localhost:5901
簡單解釋下,該novnc的服務名稱為services.n6081,監聽的端口為6081,所監聽的vnc服務為locahost:5901,如果連接的是其他服務器,將localhost改為對應的ip或者主機名即可。
- 使用如下的命令查看服務的狀態:
sudo snap get novnc services.n6081
- 接著,我們使用瀏覽器打開http://192.168.10.49:6081/vnc.html:
點擊其中的“鏈接”按鈕,輸入我們啟動vnc時候的密碼,見證奇跡的時刻到了:
我們在瀏覽器上實現了通過vnc協議對服務器的鏈接和管理,有么有:)
- 如果我們想停止掉某個監聽服務器,直接運行如下命令:
sudo snap set novnc services.n6081.listen='' services.n6081.vnc=''
就是把監聽的端口和vnc服務都設置為空串就行了,這個時候在訪問http://192.168.10.49:6081/vnc.html發現已經鏈接不上了,而且通過snap get命令發現服務有如下輸出:
是不是很方便:)
總結與擴展
文章介紹了ubuntu上vnc服務的搭建以及通過novnc不安裝vnc客戶端情況下使用瀏覽器訪問和管理vnc服務器的步驟,非常方便,很有實戰價值。
我的落地應用,主要是在selenium集群做ui自動化測試時,每個selenium客戶端上安裝了vnc server,然后通過測試平臺的界面,使用novnc訪問這些客戶端,從而可以實時進行自動化測試用例的調試和監控。關于selenium的自動化測試,后續撰文再說。