VNC:VNC(Virtual Network Computing),为一种使用RFB协议的屏幕画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的屏幕画面。VNC与操作系统无关,因此可跨平台使用,例如可用Windows连线到某Linux的计算机,反之亦同。甚至在没有安装客户端程序的计算机中,只要有支持JAVA的浏览器,也可使用。VNC包含客户端和服务器两个操作软件。
VNC Server:VNC服务器,接收VNC Viewer的连接请求,传输画面到客户端。本例需要在centos7上安装VNC Server
VNC Viewer:VNC客户端,将键盘和鼠标的动作转递给服务器,本例需要在windows上安装Viewer连接到远程的Linux服务器
一、如果当前系统没有桌面环境,需要先安装桌面环境。
1、更新系统
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# yum update ##避免一些系统方面的意外错误,最好更新yum到最新,生产环境有业务在运行不建议更新
---------------------------------------------------------------------------------------------
2、安装GNOME Desktop图形桌面服务
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# yum groupinstall "GNOME Desktop"
---------------------------------------------------------------------------------------------
3、查看系统运行模式
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# systemctl get-default
---------------------------------------------------------------------------------------------
4、切换到桌面运行模式
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# systemctl set-default graphical.target
---------------------------------------------------------------------------------------------
5、启动桌面模式
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# init 5
---------------------------------------------------------------------------------------------
二、VNC配置
1、安装vnc,CentOS7默认使用tigervnc软件提供vnc服务
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# yum install tigervnc-server
---------------------------------------------------------------------------------------------
2、启动VNC服务
使用vncserver命令启动VNC服务,命令格式为“vncserver :桌面号”,其中“桌面号”用“数字”的方式表示,每个用户连接需要占用1个桌面
启动编号为1的桌面示例如下
---------------------------------------------------------------------------------------------
[laopi@CentOS7 ~]$ vncserver :1
You will require a password to access your desktops.
Password: ##登录vnc的密码,以后可用通过vncpasswd命令更改密码
Verify: ##重新输入登录vnc的密码
Would you like to enter a view-only password (y/n)? n ##是否设置只查看用户密码,这里不设置
A view-only password is not used
New 'CentOS77:1 (laopi)' desktop is CentOS7:1
Creating default startup script /home/laopi/.vnc/xstartup
Creating default config /home/laopi/.vnc/config
Starting applications specified in /home/laopi/.vnc/xstartup
Log file is /home/laopi/.vnc/CentOS7:1.log
---------------------------------------------------------------------------------------------
命令的执行是在需要远程登陆的laopi用户下执行的,同时也是第一次执行,会在此用户的主目录(/home/laopi/)下生成.vnc子目录和相应的配置文件,同时需要输入密码(vncviewer端用此用户访问的密码),这个密码被加密保存在此用户主目录下的.vnc子目录(/home/laopi/.vnc/passwd)中;同时在用户主目录下的.vnc子目录中为用户自动建立xstartup配置文件(/home/laopi/.vnc/xstartup),在每次启动VNC服务时,都会读取该文件中的配置信息。上面的是添加普通用户通过VNC访问权限,如果想添加其他用户访问权限,需要在相应的用户命令提示符下进行上面的操作(如test用户也需要执行[test@ localhost ~]$ vncserver :1 在相应的主目录下生成对应的.vnc子目录)。对不同用户的访问密码更改也需要在相应的命令提示符下操作。
在/home/laopi/.vnc/目录下还有一个“CentOS7:1.pid”文件,这个文件记录着启动VNC后对应操作系统的进程号,用于停止VNC服务时准确定位进程号.
3、VNC服务使用的端口号与桌面号的关系
VNC服务使用的端口号与桌面号相关,VNC使用TCP端口从5900开始,对应关系如下
桌面号为“1” ---- 端口号为5901
桌面号为“2” ---- 端口号为5902
桌面号为“3” ---- 端口号为5903
.......
基于上面的介绍,如果Linux开启了防火墙功能,就需要手工开启相应的端口.
4、防火墙设置,这里我就粗暴的把防火墙关了
---------------------------------------------------------------------------------------------
[laopi@CentOS7 ~]# systemctl stop firewalld.service ##停止firewall
[laopi@CentOS7 ~]# systemctl disable firewalld.service ##禁止firewall开机启动
---------------------------------------------------------------------------------------------
5、测试VNC服务,通过RealVNC Viewer客户端软件进行测试
设置登录信息
进行登录
登录成功后输入系统的用户名密码就可用登录了
三、配置多个桌面
可以使用如下的方法启动多个桌面的VNC
vncserver :1
vncserver :2
vncserver :3
……
但是这种手工启动的方法在服务器重新启动之后将失效,因此,下面介绍如何让系统自动管理多个桌面的VNC,方法是创建 Systemd Unit文件.
文件的格式为:vncserver@:桌面号.service,Unit文件方便快速的启动,停止,重启服务
1、为laopi用户创建 Systemd Unit文件。(第一个用户vncserver@:1.service,第二个用户vncserver@:2.service,其他以此类推),可用通过复制模板文件方式创建
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service ##需要root用户操作
---------------------------------------------------------------------------------------------
3、修改/etc/systemd/system/vncserver@:1.service文件,复制过来的这个文件是个模板文件,替换文件里面的<user>为需要登陆的用户, Type由默认的forking改为simple,这里如果不更改后面的启动会报错
---------------------------------------------------------------------------------------------
[user1@localhost ~]$ vim /etc/systemd/system/vncserver\@\:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple ##这里将forking改为simple
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l laopi -c "/usr/bin/vncserver %i" ##这里将<user>更改为需要登陆的用户laopi
PIDFile=/home/laopi/.vnc/%H%i.pid ##这里将<user>更改为需要登陆的用户laopi
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
---------------------------------------------------------------------------------------------
3、刷新systemctl
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# systemctl daemon-reload
---------------------------------------------------------------------------------------------
4、启动服务
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# systemctl start vncserver@:1.service #启动
---------------------------------------------------------------------------------------------
如果启动服务器失败如果如下所示:
[root@CentOS7 ~]# systemctl start vncserver@:1.service
Job for vncserver@:1.service failed because a configured resource limit was exceeded. See "systemctl status vncserver@:1.service" and "journalctl -xe" for details.
---------------------------------------------------------------------------------------------
上面的错误很有可能是Type没有由默认的forking改为simple,更改后重启服务,一次不好用就多重启几次,因为这个原因我浪费的大半天的时间,很多文章写的都不需要更改这个但是我在CentOS7.7下只有更改了这个选项才好用,不知道为什么,也有说通过
这个方法解决:删除/tmp/.X11-unix/ 目录,再启用一次即可,这个没有验证只是记录下
5、设置服务开机启动
---------------------------------------------------------------------------------------------
[root@CentOS7 ~]# systemctl enable vncserver@:1.service
---------------------------------------------------------------------------------------------
6、常用选项
---------------------------------------------------------------------------------------------
systemctl stop vncserver@:1.service #关闭
systemctl restart vncserver@:1.service #重启
---------------------------------------------------------------------------------------------
7、查看服务器的状态
上面的状态才是正常的,如果不是请进行排查
注意:上面的配置完成以后重启系统,当常看vncserver@:1.service的服务时状态不正常,但是依然可用连接,重启服务后状态正常,暂时还不知道什么原因,如下所示会有红字体的报错
参考:
http://blog.itpub.net/31559985/viewspace-2674525/
https://blog.51cto.com/shaonian/2090283