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

  

 

posted @ 2019-05-29 17:14  贱书生  阅读(12521)  评论(0编辑  收藏  举报