文章目录
- 前言
- 1. 桌面配置图形化 VNC 远程连接
-
- 1.1. 安装 VNC 服务
- 1.2. 临时启用 VNC 远程连接
-
- 1.2.1. 单终端启用 VNC 远程连接
- 1.2.2. 多终端启用 VNC 远程连接
- 1.3. 开机自启动 VNC 实现远程连接的服务
-
- 1.3.1. 设置以 root 远程连接用户身份
- 1.3.2. 远程连接设置为普通用户
- 2. 安装配置最小化 VNC 远程连接
- 3. 关于 VNC 的其它说明
-
- 3.1. 几条简单的 vnc 维护命令
- 3.2. 远程桌面模糊的处理方法
- 总结
前言
前段时间因为一个项目需要远程访问 linux 尽管如此 Xmanager 提供的 Xstart 可以实现远程调用图形化,但是使用体验没有 VNC 好,那么如何配置呢? VNC 远程连接,心血来潮写了这样的博客。
需要注意的是,本文所述的所有操作都是基于系统的(CentOS 7.6)以下配置已完成:
- 设置主机名;
- 关闭系统防火墙;
- 禁用 selinux 模块;
- 配置好本地 yum 源。
1. 桌面配置图形化 VNC 远程连接
1.1. 安装 VNC 服务
已安装桌面图形操作系统的配置 VNC 远程连接相对简单,只需配置本地 yum 然后安装源
tigervnc
和tigervnc-server
安装包就够了。下面是我的一个 Nginx 操作显示服务器。
首先,Nginx 服务器未提前安装 vnc 服务:
[root@nginx ~]# which vncserver /usr/bin/which: no vncserver in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
接下来,让我们安装它 vnc 服务:
[root@nginx ~]# yum search tigervnc --showduplicates //可见本地 yum 源提供的 vnc 版本。 [root@nginx ~]# yum -y install tigervnc*
是不是很意外? vnc 服务真的只需要这么简单的一步 ~~
1.2. 临时启用 VNC 远程连接
所谓临时启用 VNC 顾名思义,远程连接是由于一些特殊要求,用户需要临时使用 VNC 当操作完成后,远程连接到桌面进行一些操作 VNC 用户不在乎服务是否启动。而且,如果没有配置, VNC 事实上,当系统重启时,自启动服务,VNC 服务不会随机启动。
- 【单终端】用户操作只需要一个远程窗口;
- 【多终端】需要多个远程窗口供多个用户操作(比如多个用户需要图形界面来配置多个不同的应用服务)。
注意事项:在上述两种情况下,用户在远程连接桌面时使用 root 超级管理员登录,所以权限最大;因此,在授权用户连接时需要特别注意。如果您想为用户分配一个普通的远程账户,请参考 1.3.2 章节的内容。
1.2.1. 单终端启用 VNC 远程连接
[root@nginx ~]# vncserver [root@nginx ~]# vncserver -list
需要下载的首选 VNC? Viewer 客户端。
安装并打开 VNC Viewer 按下图所示配置客户端:
在服务器端启动输入 vnc 服务时设置的密码:
此时,我们可以远程访问服务器的图形桌面:
1.2.2. 多终端启用 VNC 远程连接
事实上,多终端也很容易理解,即使用多个终端 vnc 服务如下图所示:
此时,我们可以在客户端连接三个窗口,如下图所示:
1.3. 开机自启动 VNC 实现远程连接的服务
在配置自启动服务之前,我们可以先启动之前的服务 vncserver 全部 kill 方法如下:
[root@nginx ~]# vncserver -kill :1 [root@nginx ~]# vncserver -kill :2 [root@nginx ~]# vncserver -kill :3
1.3.1. 设置以 root 远程连接用户身份
开机自启动 VNC 并设置服务 root 用户身份远程连接后,即使系统重启,用户也可以随时远程使用服务器图形桌面 vnc 它还将自己启动服务,用户每次都使用它 root 超级管理员的身份与桌面相连。
其实 /lib/systemd/system/vncserver@.service
文件中默认的注释信息已经说明了配置服务的方法。以下是根据注释中的内容进行操作:
[root@nginx ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service [root@nginx ~]# vim /etc/systemd/system/vncserver@:1.service //服务文件配置信息如下。 [Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=forking # 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=/root/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
通过比较源文件不难发现,它实际上是源文件中的 <USER>
替换成了 root
,只不过 root 用户不在 /home 因此,在目录下进行配置 root 当用户身份远程连接时,需要在服务文件前面连接 /home 删除掉:
重新加载服务配置文件,并将服务设置为开机自启动:
[root@nginx ~]# systemctl daemon-reload [root@nginx ~]# systemctl enable vncserver@:1.service
设置以下命令 vncserver 的密码:
[root@nginx ~]# vncpasswd Password: ///输入密码。 Verify: //确认密码。
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
启动 vnc 服务并查看服务状态:
[root@nginx ~]# systemctl start vncserver@:1.service
[root@nginx ~]# systemctl status vncserver@:1.service
1.3.2. 设置以普通用户身份远程连接
开机自启动 VNC 服务,并设置以普通用户身份远程连接后,用户可以随时远程使用服务器的图形化桌面,即使系统发生重启 vnc 也会自己把服务启动起来,但是用户每次都是以普通用户的身份连接到桌面。
[root@nginx ~]# useradd vncuser1 //新建一个名为 vncuser1 的普通用户。
[root@nginx ~]# passwd vncuser1
Changing password for user vncuser1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@nginx ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service
[root@nginx ~]# vim /etc/systemd/system/vncserver@:2.service //服务文件配置信息如下。
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# 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 vncuser1 -c "/usr/bin/vncserver %i"
PIDFile=/home/vncuser1/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
通过对比源文件不难发现,只需要将源文件中的 <USER>
替换成 vncuser1
即可:
重新加载服务配置文件,并将服务设置为开机自启动:
[root@nginx ~]# systemctl daemon-reload
[root@nginx ~]# systemctl enable vncserver@:2.service
通过下面的命令来设置 vncserver 的密码(注意:此时需要在 vncuser1 用户下设置密码而非在 root 用户下哦
):
[root@nginx ~]# su - vncuser1
[vncuser1@nginx ~]$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
启动 vnc 服务并查看服务状态(启动服务还是在 root 用户下执行
):
[root@nginx ~]# systemctl start vncserver@:2.service
[root@nginx ~]# systemctl status vncserver@:2.service
通过端口号我们就可以看出确实启动了两个 vnc 服务(默认从 5900 往后面顺延):
[root@nginx ~]# netstat -antp |grep 590
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 10147/Xvnc //root 用户的 vnc 服务。
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 10146/Xvnc //vncuser1 用户的 vnc 服务。
tcp6 0 0 :::5901 :::* LISTEN 10147/Xvnc
tcp6 0 0 :::5902 :::* LISTEN 10146/Xvnc
2. 最小化安装配置 VNC 远程连接
当系统默认使用最小化安装,后期想要启用图形化桌面并配置 vnc 远程连接,其实也很简单,主要需要下面两个步骤。
配置图形化界面请参考 《CentOS 7 最小化系统安装图形化桌面》 这篇博客。
3. 关于 VNC 的其它说明
3.1. 几条简单的 vnc 维护命令
# vncserver
# vncserver -kill <X DISPLAY>
# vncserver -list
# vncpasswd
# vncserver -geometry 1920x1080 //其实就是新启动一个分辨率为 1080p 的 vnc 服务窗口。
3.2. 关于远程桌面模糊的处理方法
有的朋友可能发现了使用 VNC Viewer 去连接远程桌面的时候,桌面背景糊的跟马赛克一样 ~~ 虽说这种状态下并不影响我们使用 Terminal 以及其它类似于火狐浏览器这样的图形化工具,但是终究还是觉得丑哇 …… 下图就是这个丑样的展示,它和分辨率无关,主要是 VNC Viewer 获取图片质量的设置问题。
OK,打开我们的 VNC Viewer 软件,找到目标 Connection 编辑其属性,在 Options
选项中我们可以看到 Picture quality
默认设置为 Automatic
,我们只需要将其改为 High
就可以完美解决这个问题啦。
设置好以后重新连接桌面,此时的体验就很 nice 啦。
总结
其实日常 linux 运维工作中,很少会去用到服务器的桌面,至少对我而言是这样的。因为 linux 本身就需要运维人员掌握大量的命令行工具去配置各种各样的系统服务和应用服务,如果一些简单的操作还需要依赖于桌面去点点点,那就失去了 linux 系统本身的优越性。当然喽,有些服务还是通过图形化配置会更加方便、简单一些,如配置 Oracle RAC 数据库啥的。
个人感觉这篇博客写的已经很详细了,以后再次面临访问远程桌面的需求,就可以直接拿来用了。以上,若有不当之处,欢迎朋友们及时指正!