NoVNC安裝部署


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM