基于 CentOS 搭建 VNC 远程桌面服务

必备知识:本教程假设已学习以下 Linux 基本操作:

  • 连接 SSH
  • 执行命令
  • 编辑文件

安装、启动 VNC

VNC 远程桌面原理

注:以下内容旨在更好地了解 Xorg、X11、VNC 等概念和原理。
名词解释

  • Xorg:在 Linux 用户中非常流行,已经成为图形用户程序的必备条件,所以大部分发行版都提供了它。
  • X11:X Window 系统(X Window System,也常称为 X11 或 X )是一种以位图方式显示的软件窗口系统。
  • VNC:VNC(Virtual Network Computing),为一种使用RFB协议的显示屏画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的显示屏画面。
  • x11vnc:轻量级 VNC 服务程序。
  • Xvfb:轻量级 Xorg 服务程序。

在 Linux 中显示窗口,首先要创建一个 display 服务。而 Xvfb 就是一个轻量级的,不产生实际屏幕输出的虚拟 display 服务程序。 Xvfb 创建 display 后, x11vnc 连上去并转换成 VNC 协议。
优点是整个系统按需开启,非常轻量,不会影响服务器性能。

安装 VNC 远程桌面

首先,通过以下命令安装比较的系统库

yum install -y xorg-x11-xauth xterm libXi libXp libXtst libXtst-devel libXext libXext-devel

然后,通过以下命令安装 Xvfb

yum install -y Xvfb

最后,通过以下命令安装 x11vnc

yum install -y x11vnc

启动 VNC 远程桌面

启动 VNC 远程桌面命令如下,其中 12345 为端口号(如果已占用需要换另外的端口号,另外需要记得在腾讯云管理页面添加端口放行规则),CrekeNet 为 VNC 远程桌面连接密码:

x11vnc -rfbport 12345 -passwd CrekeNet -create -forever

出现以下输出则启动成功 VNC 远程桌面
成功VNC远程桌面启动

连接VNC远程桌面

下载 VNC Viewer

点击这里 下载 VNC Viewer ,软件支持多平台。
注意选择电脑的操作系统对应链接进行下载,本教程以 Windows 为例

使用 VNC Viewer

下载安装后,首次运行 VNC Viewer ,会出现用户协议确认,如图勾选同意协议
用户协议确认
接着是介绍 VNC Viewer 的新功能,如图点击 “GOT IT” 确认
确认
选择 “File” —— “New Connection” ,新建 VNC 远程桌面连接
新建VNC远程桌面连接
“VNC Server” 填写腾讯云服务器IP和端口号,格式如 <您的 CVM IP 地址>:12345 ; “Name” 是连接的名字,可随意填,如 Tencent Cloud
VNC远程桌面配置
点击 “OK” ,完成连接的新建,这时面板上多了我们刚刚新建的名叫 Tencent Cloud 的连接
连接建立
右击这个连接,选择 “Connect”
开始连接
开始连接 VNC 远程桌面,此时会出现安全提示,点击 “Continue” 即可继续
确认继续
出现密码输入框,如果您是按照前文的默认密码启动 x11vnc ,则填入 CrekeNet 即可;如果您用了自己的密码,则需要输入您设置的正确密码
输入密码
成功连接后,出现 Linux 远程桌面
连接成功

安装GNOME桌面并实现VNC远程连接

首先更改图形界面模式

[root@localhost ~]# systemctl get-default

如果返回值为:multi-user.target 命令行输入下面指令切入到图形界面:

systemctl set-default graphical.target

如果需要改回命令行模式,输入如下指令

systemctl set-default multi-user.target

关闭防火墙

[root@localhost ~]# systemctl stop firewalld

安装vnc server

yum install tigervnc-server -y

复制配置模板并进行配置

[root@VM_54_14_centos ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
[root@VM_54_14_centos ~]# vim /etc/systemd/system/vncserver@\:1.service

将配置文件中的改成对应的用户,我这里用root

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/home/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

将修改为root
对于其他普通用户,操作步骤类似,即首先复制模板,然后修改用户。

通知systemd重载此配置文件

[root@VM_54_14_centos ~]# systemctl daemon-reload

为用户配置密码

vnc的密码跟系统的用户密码不一样,是使用vnc viewer登陆时需要使用的密码。

[root@VM_54_14_centos ~]# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used

设置开机服务自启

[root@VM_54_14_centos ~]# systemctl enable vncserver@:1.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:1.service to /etc/systemd/system/vncserver@:1.service.

启动服务

[root@VM_54_14_centos ~]# vncserver :1
New 'VM_54_14_centos:1 (root)' desktop is VM_54_14_centos:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/VM_54_14_centos:1.log

VNC远程连接

查看VNC的端口号:

[root@VM_54_14_centos ~]# netstat -lnpt|grep Xvnc
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      23968/Xvnc          
tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN      23968/Xvnc          
tcp6       0      0 :::5901                 :::*                    LISTEN      23968/Xvnc          
tcp6       0      0 :::6001                 :::*                    LISTEN      23968/Xvnc

默认情况下使用5901端口.
VNC连接效果

常见问题:

连接不上提示timeout
解决方法:如果Linux开启了防火墙功能,就需要手工开启相应的端口,以开启桌面号为“1”相应的端口为例,命令如下 :

[root@VM_54_14_centos ~]# systemctl stop firewalld
[root@VM_54_14_centos ~]# iptables -I INPUT -p tcp --dport 5901 -j ACCEPT    #

** 端口冲突**

[root@VM_54_14_centos ~]# systemctl status vncserver@:1.service
● vncserver@:1.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled)
   Active: failed (Result: resources) since Thu 2020-01-02 22:56:30 CST; 45s ago
  Process: 22381 ExecStart=/usr/sbin/runuser -l root -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)
  Process: 22379 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
  Jan 02 22:56:26 VM_54_14_centos systemd[1]: Starting Remote desktop service (VNC)...
Jan 02 22:56:30 VM_54_14_centos systemd[1]: Can't open PID file /home/root/.vnc/VM_54_14_centos:1.pid (yet?) after start: No such file or directory
Jan 02 22:56:30 VM_54_14_centos systemd[1]: Failed to start Remote desktop service (VNC).
Jan 02 22:56:30 VM_54_14_centos systemd[1]: Unit vncserver@:1.service entered failed state.
Jan 02 22:56:30 VM_54_14_centos systemd[1]: vncserver@:1.service failed.

解决办法:关闭vncserver进程,重新启动,命令如下:

[root@VM_54_14_centos ~]# vncserver -kill :1
Killing Xvnc process ID 22403
[root@VM_54_14_centos ~]# vncserver :1

Reference

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐