在CentOS系统下使用VNC提供远程桌面服务

1. 为什么我要使用VNC

我使用VNC,是为了能远程连接到服务器的桌面。有些特殊的操作必须在服务器的桌面上完成。比如我需要通过百度网盘上传和下载高通量测序数据以及分析结果。这个时候,必须要安装windows虚拟机,而使用虚拟的windows系统必须要在服务器CentOS系统的桌面界面进行操作。

此外,我也使用了简单易用的teamviewer软件,但是该软件存在问题是,整个服务器系统仅能一个用户使用teamviewer软件。当我正在使用teamviewer的时候,某天,另外一个管理员人直接在服务器上登录了另外的账户桌面,我可能就无法再使用teamviewer连接服务器了。而VNC应该可以多用户同时远程访问各自的桌面。

以下讲解如何在家里通过一台公网服务器作为跳板,访问内网服务器的CentOS7系统桌面。

1. 在内网服务器安装VNC软件并进行设置

使用root用户联网安装软件
# yum install vnc vnc-server tiger*
开启5901、5902和5903端口。每增加一个用户使用VNC,则端口号加1,需要额外开放端口。 # firewall-cmd --zone=public --add-port=5901/tcp --permanent # firewall-cmd --zone=public --add-port=5902/tcp --permanent # firewall-cmd --zone=public --add-port=5903/tcp --permanent 重启防火墙,使开放的端口生效 # systemctl restart firewalld.service 查看被开启的端口 # firewall-cmd --list-ports 使用普通用户启动VNC软件 $ vncserver Password: 设置使用VNC连接服务器的密码 Verify: 再次输入一遍密码 Would you like to enter a view-only password (y/n)? 选择n,以使连接到服务器后可以操作服务器 启动VNC后,在用户家目录下会生成 .vnc 配置文件夹,查看其中的log文件,得到启用的端口号,比如我启动了5901端口。 再使用普通用户在内网服务器上构建反向隧道 $ ssh -N -f -R 4499:localhost:5901 chenlianfu@115.29.105.12 我在aliyun上有一台服务器,以之为跳板,以上命令将内网服务器的5092端口映射到了跳板服务器的4499端口。 查看vncserver的服务情况 $ vncserver -list 关闭编号为:1的vncserver $ vncserver -kill :1 修改vncserver的配置文件~/.vnc/config,尾部添加分辨率信息 geometry=1400x900 再次开启vncserver以获得更好的分辨率支持 $ vncserver

2. 在跳板服务器上的设置

在跳板服务器的防火墙设置中开放4499端口
# firewall-cmd --zone=public --add-port=4499/tcp --permanent
# systemctl restart firewalld.service

在跳板服务器的sshd配置中设置GatewayPorts参数值为yes
# perl -p -i -e 's/.*GatewayPorts.*/GatewayPorts yes/' /etc/ssh/sshd_config
# systemctl restart sshd.service

3. 在家里的笔记本电脑上连接

下载VNC viewer软件,安装完毕后,输入115.29.105.12:4499地址,再输入密码,即可连接到内网服务器的CentOS7桌面。默认画面质量可能较差,可以点击软件的设置图标,在Option选项卡的General栏下的Picture quality菜单中选择High,即可让画面显示清晰。

4. CentOS8下vncserver会出的bug及其解决方法

在CentOS8下安装vnc-server后,第一次能正常使用VNC,但重启服务器后,则可能无法再次启动VNC服务端了,即使重新安装vnc软件也不行。原因是因为Xvnc启动失败。报错如下:

/home/chenlianfu/.vnc/xstartup: line 5: 114069 Terminated /etc/X11/xinit/xinitrc
Killing Xvnc process ID 114063
(EE)
(EE) Backtrace:
(EE) 0: /usr/bin/Xvnc (xorg_backtrace+0x7d) [0x55e88a8250ad]
(EE) 1: /usr/bin/Xvnc (0x55e88a63a000+0x1eeaed) [0x55e88a828aed]
(EE) 2: /usr/lib64/libpthread.so.0 (0x7f8357cf4000+0x12dd0) [0x7f8357d06dd0]
(EE) 3: /usr/bin/Xvnc (_ZN14XserverDesktopD2Ev+0xd3) [0x55e88a789a23]
(EE) 4: /usr/bin/Xvnc (_ZN14XserverDesktopD0Ev+0xd) [0x55e88a789b7d]
(EE) 5: /usr/bin/Xvnc (vncExtensionClose+0x28) [0x55e88a77dfd8]
(EE) 6: /usr/bin/Xvnc (CloseDownExtensions+0x39) [0x55e88a7e8be9]
(EE) 7: /usr/bin/Xvnc (dix_main+0x3ab) [0x55e88a7d910b]
(EE) 8: /usr/lib64/libc.so.6 (__libc_start_main+0xf3) [0x7f8355b366a3]
(EE) 9: /usr/bin/Xvnc (_start+0x2e) [0x55e88a6ace6e]
(EE)
(EE) Segmentation fault at address 0x8
(EE)
Fatal server error:
(EE) Caught signal 11 (Segmentation fault). Server aborting
(EE)

安装mesa软件即可解决:

yum install mesa*

此外,可能还会如下错误而不能成功运行VNC服务:

Failed to import environment: Process org.freedesktop.systemd1 exited with status 1

需要开启相应的服务:

systemctl restart dbus-org.freedesktop.import1.service 

5. 出现Authentication is required to access the PC/SC daemon提示

当画面变黑,弹出Authentication is required to access the PC/SC daemon提示时。可以输入密码来解决。若绝对很烦,执行如下操作:

首先,生成配置文件/etc/polkit-1/rules.d/03-allow-pcscd.rules,内容如下:

polkit.addRule(function(action, subject) {
    if (action.id == "org.debian.pcsc-lite.access_pcsc" ||
        action.id == "org.freedesktop.color-manager.create-device" ||
        action.id == "org.freedesktop.color-manager.create-profile" ||
        action.id == "org.freedesktop.color-manager.delete-device" ||
        action.id == "org.freedesktop.color-manager.delete-profile" ||
        action.id == "org.freedesktop.color-manager.modify-device" ||
        action.id == "org.freedesktop.color-manager.modify-profile" ||
        subject.isInGroup("{wheel}")) {
            return polkit.Result.YES;
    }
});

然后,使用root用户执行命令,将目标用户chenlianfu添加到wheel用户组,并重启相关服务。

# usermod -a -G wheel chenlianfu
# systemctl restart polkit
# systemctl restart pcscd

6. 出现提示The login keyring did not get unlocked when you logged into your computer

当使用google浏览器时,可能弹出窗口,提示密钥环未解锁。考虑删除密钥环,打开google浏览器并按提示重新设置密钥即可。

rm -rf .local/share/keyrings/*

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据