一、VNC简介
VNC (Virtual Network Console),即虚拟网络控制台,它是一款基于 UNIX 和 Linux 操作系统的优秀远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发,远程控制能力强大,高效实用,并且免费开源。
VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器端的应用程序(vncserver)。在任何安装了客户端的应用程序(vncviewer)的计算机都能十分方便地与安装了服务器端的应用程序(vncserver)的计算机相互连接。
二、VNC运行的工作流程
(1)VNC客户端通过浏览器或VNC Viewer连接至VNC Server。
(2)VNC Server传送一对话窗口至客户端,要求输入连接密码,以及存取的VNC Server显示装置。
(3)在客户端输入联机密码后,VNC Server验证客户端是否具有存取权限。
(4)若是客户端通过VNC Server的验证,客户端即要求VNC Server显示桌面环境。
(5)VNC Server通过X Protocol 要求X Server将画面显示控制权交由VNC Server负责。
(6)VNC Server将来由 X Server的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC Server的桌面环境及输入装置。
三、VNC安装
3.1 系统环境
服务端:Centos7.6
客户端:Windows10
客户端VNC-Viewer 6.20下载地址:https://www.realvnc.com/en/connect/download/viewer/
3.2 安装桌面环境
本实验中安装的系统没有安装桌面环境,我们需要自己安装,如果已经安装桌面了清跳过这一步。Centos7提供了"Cinnamon Desktop","MATE Desktop","GNOME Desktop","KDE Plasma Workspaces","LXQt Desktop","Xfce"让我们安装。
下面的命令列出可用环境组:
[root@localhost ~]# yum grouplist
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile* base: mirrors.tuna.tsinghua.edu.cn* epel: mirrors.aliyun.com* extras: mirrors.aliyun.com* updates: mirrors.aliyun.com
Available Environment Groups:Minimal InstallCompute NodeInfrastructure ServerFile and Print ServerCinnamon DesktopMATE DesktopBasic Web ServerVirtualization HostServer with GUIGNOME DesktopKDE Plasma WorkspacesDevelopment and Creative Workstation
Available Groups:CinnamonCompatibility LibrariesConsole Internet ToolsDevelopment ToolsEducational SoftwareElectronic LabFedora PackagerGeneral Purpose DesktopGraphical Administration ToolsHaskellLXQt DesktopLegacy UNIX CompatibilityMATEMilkymistScientific SupportSecurity ToolsSmart Card SupportSystem Administration ToolsSystem ManagementTurboGears application frameworkXfce
Done
我们可以选择自己喜欢的桌面环境,在这里选择安装Xfce桌面:
[root@localhost ~]# yum -y install epel-release && yum groupinstall Xfce
3.3 创建一个用户
[root@localhost ~]# useradd user1
[root@localhost ~]# echo '123456'|passwd --stdin user1
[root@localhost ~]# usermod -a -G wheel user1
3.4 安装 VNC
在Centos仓库默认提供的是TigerVNC安装包,我们就安装这个:
[root@localhost ~]# yum -y install tigervnc-server tigervnc-server-module
切换到user1用户,运行vncserver命令创建一个初始配置并设置密码:
[root@localhost ~]# su - user1
[user1@localhost ~]$ vncserver :2You will require a password to access your desktops.Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not usedNew 'localhost.localdomain:2 (user1)' desktop is localhost.localdomain:2Starting applications specified in /home/user1/.vnc/xstartup
Log file is /home/user1/.vnc/localhost.localdomain:2.log
然后停止vncserver服务,目的就是创建密码和.vnc下面的文件。
[user1@localhost ~]$ vncserver -kill :2
切换到user1用户,运行vncserver命令创建一个初始配置并设置密码:
[root@localhost ~]# su - user1
[user1@localhost ~]$ vncserver :2You will require a password to access your desktops.Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not usedNew 'localhost.localdomain:2 (user1)' desktop is localhost.localdomain:2Starting applications specified in /home/user1/.vnc/xstartup
Log file is /home/user1/.vnc/localhost.localdomain:2.log
然后停止vncserver服务,目的就是创建密码和.vnc下面的文件。
[user1@localhost ~]$ vncserver -kill :2
3.5 配置VNC Server
编辑用户家目录下面的.vnc/xstartup文件
[user1@localhost ~]$ vim ~/.vnc/xstartup#!/bin/shxrdb $HOME/.Xresources
#xsetroot -solid grey
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
startxfce4 &
如果需要修改屏幕分辨率,可以修改~/.vnc/config文件,取消gemoetry前面的注释。
[user1@localhost ~]$ vim .vnc/config## Supported server options to pass to vncserver upon invocation can be listed
## in this file. See the following manpages for more: vncserver(1) Xvnc(1).
## Several common ones are shown below. Uncomment and modify to your liking.
##
# securitytypes=vncauth,tlsvnc
# desktop=sandbox
geometry=1920x1080
# localhost
# alwaysshared
3.6 创建 Systemd Unit文件
Unit文件方便快速的启动,停止,重启服务
[user1@localhost ~]$ sudo cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service
编辑vncserver@:2.service,替换文件里面的<user>为user1用户, Type由默认的forking改为simple
[user1@localhost ~]$ vim /etc/systemd/system/vncserver\@\:2.service[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l user1 -c "/usr/bin/vncserver %i"
PIDFile=/home/user1/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
启动vncserver服务
#重新加载管理器配置
[user1@localhost ~]$ sudo systemctl daemon-reload
#启动vncserver
[user1@localhost ~]$ sudo systemctl start vncserver@:2
3.7 客户端远程连接测试
在windows10客户端打开VNC Viewer,输入地址和会话端口号:
总结:
如果需要将VNC服务器配置为多个用户启动显示,请使用vncserver命令创建初始配置并设置密码,然后使用其他端口创建新的服务文件。