noVNC 是一個 HTML5 VNC 客戶端,采用 HTML 5 WebSockets, Canvas 和 JavaScript 實現,noVNC 被普遍用在各大雲計算、虛擬機控制面板中,比如 OpenStack Dashboard 和 OpenNebula Sunstone 都用的是 noVNC。
noVNC 采用 WebSockets 實現,但是目前大多數 VNC 服務器都不支持 WebSockets,所以 noVNC 是不能直接連接 VNC 服務器的,需要一個代理來做 WebSockets 和 TCP sockets 之間的轉換。這個代理在 noVNC 的目錄里,叫做 websockify
一、安裝VNC服務
1、查看本地是否有安裝vncserver(一般情況下系統會自帶vncserver)
[root@localhost ~]# which vncserver /usr/bin/vncserver
2、安裝vncserver(如果沒有vncserver)
yum install -y tigervnc-server
然后在使用第一條命令查看是否安裝成功
3、查看vncserver版本
[root@localhost ~]# rpm -qa | grep vnc tigervnc-license-1.8.0-13.el7.noarch tigervnc-server-minimal-1.8.0-13.el7.x86_64 tigervnc-server-1.8.0-13.el7.x86_64
二、啟動VNC服務
啟動vnc服務有兩種方式,一種直接啟動vncserver,第二種配置vncserver@.service(在第五節講)
1、直接啟動vncserver
$ vncserve :1
此時會要求輸入密碼。這里需要注意:
The VNC server will run in the background. The port that it runs on is the display number + 5900 (i.e. 5901 in the case above).
意思就是當你執行vncserver :1設置為1時,下面要運行VNC是的端口號應該是5900+1,那就是5901,VNC的默認端口是5900。
2、查看日志
[root@localhost ~]# cat /root/.vnc/localhost.localdomain:1.log Xvnc TigerVNC 1.3.1 - built Nov 16 2016 13:38:44 Copyright (C) 1999-2011 TigerVNC Team and many others (see README.txt) See http://www.tigervnc.org for information on TigerVNC. Underlying X server release 11702000, The X.Org Foundation Tue May 28 15:34:07 2019 vncext: VNC extension running! vncext: Listening for VNC connections on all interface(s), port 5901 vncext: created VNC server for screen 0
PS:localhost.localdomain為服務器名稱,:1 就是vncserver啟動的參數
3、查看端口
[root@localhost ~]# netstat -npl | grep 59 tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 4056/Xvnc tcp6 0 0 :::5901 :::* LISTEN 4056/Xvnc
三、NoVNC部署
1、下載
下載地址:https://github.com/novnc/noVNC
2、解壓
$ tar -zxf noVNC-1.1.0.tar.gz /usr/local/novnc/
3、運行
[root@localhost ~]$ /usr/local/novnc/utils/launch.sh --vnc localhost:5901 Using local websockify at /usr/local/novnc/utils/websockify/run Starting webserver and WebSockets proxy on port 6080 /usr/local/novnc/utils/websockify/websockify/websocket.py:30: UserWarning: no 'numpy' module, HyBi protocol will be slower warnings.warn("no 'numpy' module, HyBi protocol will be slower") WebSocket server settings: - Listen on :6080 - Web server. Web root: /usr/local/novnc - SSL/TLS support - proxying from :6080 to localhost:5901 Navigate to this URL: http://localhost.localdomain:6080/vnc.html?host=localhost.localdomain&port=6080 Press Ctrl-C to exit
4、訪問
在Chrome、Firefox等瀏覽器中訪問 http://ip:6080/vnc.html
PS:瀏覽器需要支持html5
四、關於self.pem文件
1.我們可以利用openssl生成,具體命令如下: openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem 2.將生成的self.pem文件放到noVNC/utils底下 3.重新啟動noVNC即可
五、vncserver@.service啟動
1、檢查vncserver狀態
VNC服務器在首次安裝時不會自動啟動。若要檢查這一點,請運行以下命令:
systemctl status vncserver@:.service
輸出將是這樣的:
vncserver@:.service - Remote desktop service (VNC) Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; disabled) Active: inactive (dead)
你也可以運行這個命令:
systemctl is-enabled vncserver@.service
這應該顯示出這樣的輸出:
disabled
那么為什么它被禁用了呢?這是因為每個用戶都會啟動一個單獨的VNC服務守護進程實例。換句話說,VNC不是作為服務於每個用戶請求的一個進程運行的。每個通過VNC連接的用戶都必須啟動守護進程的新實例(或者系統管理員可以自動實現)。
CentOS7使用systemd守護進程啟動其他服務,本地系統下運行的每個服務都有一個服務單元文件存放在/lib/systemd/system/目錄下,在啟動時自動啟動的進程有一個指向該服務單元文件的鏈接。
在本例中,在/lib/systemd/system/目錄,但沒有鏈接/etc/systemd/system/. 要測試這一點,請運行以下命令:
[root@localhost ~]# ls -l /lib/systemd/system/vnc* -rw-r--r--. 1 root root 1828 Nov 3 2018 /lib/systemd/system/vncserver@.service
然后檢查/etc/systemd/system/目錄:
[root@localhost ~]# ls -l /etc/systemd/system/*.wants/vnc* ls: cannot access /etc/systemd/system/*.wants/vnc*: No such file or directory
2、啟動一個新的VNC服務器實例
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
3、編輯vncserver@:1.service文件
vi /etc/systemd/system/vncserver@:4.service
替換<USER>為運行的用戶,本機上默認使用root用戶運行vncserver,所以將<USER>替換為root,添加“-geometry 1280x1024”到ExecStart參數的結尾處
[Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=forking # Clean any existing files in /tmp/.X11-unix environment ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i -geometry 1280x1024" PIDFile=/root/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
4、重啟守護進程,並啟動VNC服務
[root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl enable vncserver@:1.service ln -s '/etc/systemd/system/vncserver@:1.service' '/etc/systemd/system/multi-user.target.wants/vncserver@:1.service'
5、設置VNC密碼
[root@localhost ~]# vncpasswd You will require a password to access your desktops. Password: Verify: xauth: file /rootc/.Xauthority does not exist New 'localhost.localdomain:1 (joevnc)' desktop is localhost.localdomain:1 Creating default startup script /root/.vnc/xstartup Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/localhost.localdomain:1.log
6、重啟服務
[root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart vncserver@:1.service