必备知识:本教程假设已学习以下 Linux 基本操作:
注:以下内容旨在更好地了解 Xorg、X11、VNC 等概念和原理。
名词解释:
在 Linux 中显示窗口,首先要创建一个 display 服务。而 Xvfb 就是一个轻量级的,不产生实际屏幕输出的虚拟 display 服务程序。 Xvfb 创建 display 后, x11vnc 连上去并转换成 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 远程桌面命令如下,其中 12345 为端口号(如果已占用需要换另外的端口号,另外需要记得在腾讯云管理页面添加端口放行规则),CrekeNet 为 VNC 远程桌面连接密码:
x11vnc -rfbport 12345 -passwd CrekeNet -create -forever
点击这里 下载 VNC Viewer ,软件支持多平台。
注意选择电脑的操作系统对应链接进行下载,本教程以 Windows 为例
下载安装后,首次运行 VNC Viewer ,会出现用户协议确认,如图勾选同意协议
接着是介绍 VNC Viewer 的新功能,如图点击 “GOT IT” 确认
选择 “File” —— “New Connection” ,新建 VNC 远程桌面连接
“VNC Server” 填写腾讯云服务器IP和端口号,格式如 <您的 CVM IP 地址>:12345 ; “Name” 是连接的名字,可随意填,如 Tencent Cloud
点击 “OK” ,完成连接的新建,这时面板上多了我们刚刚新建的名叫 Tencent Cloud 的连接
右击这个连接,选择 “Connect”
开始连接 VNC 远程桌面,此时会出现安全提示,点击 “Continue” 即可继续
出现密码输入框,如果您是按照前文的默认密码启动 x11vnc ,则填入 CrekeNet 即可;如果您用了自己的密码,则需要输入您设置的正确密码
成功连接后,出现 Linux 远程桌面
[root@localhost ~]# systemctl get-default
如果返回值为:multi-user.target 命令行输入下面指令切入到图形界面:
systemctl set-default graphical.target
如果需要改回命令行模式,输入如下指令
systemctl set-default multi-user.target
[root@localhost ~]# systemctl stop firewalld
yum install tigervnc-server -y
[root@VM_54_14_centos ~]# cp /lib/systemd/system/[email protected] /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
对于其他普通用户,操作步骤类似,即首先复制模板,然后修改用户。
[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的端口号:
[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
连接不上提示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