RHEL/CentOS 7安装和配置vnc服务器

时间:2020-02-23 14:40:32  来源:igfitidea点击:

在本文中,将介绍在RHEL/CentOS 7 Linux中安装和配置vnc服务器的分步指南。
默认情况下,在CentOS 7和RHEL 7中,我们使用TigerVNC(老虎虚拟网络计算)作为VNC服务器。
因此,"我们将使用Tigervnc在RHEL/CentOS 7中安装和配置vnc服务器"

" TigerVNC"是用于图形化桌面共享的系统,它使我们可以远程控制其他计算机,并按照客户端-服务器原理工作。

服务器共享其输出(vncserver),而客户端(vncviewer)连接到服务器以查看输出。

什么是vncserver?

vncserver是启动VNC(虚拟网络计算)桌面的实用程序。
它使用适当的选项运行Xvnc,并在VNC桌面上启动窗口管理器。
vncserver允许用户在计算机上并行运行单独的会话,以便任何数量的客户端都可以从任何位置访问该节点。
为了使VNC有用,它还需要与窗口管理器一起安装X Windows系统。

在CentOS 7上安装和配置vnc服务器

我们建议使用" yum"来安装rpm,否则,如果我们没有有效的Internet连接,那么我们始终可以使用CentOS/RHEL DVD来获取软件包并执行安装。

因为对我们来说我们有一个活动的互联网连接,所以我们将使用yum安装rpms在CentOS 7上安装和配置vnc服务器。

# yum -y install tigervnc tigervnc-server

如何配置TigerVNC服务器?

要开始在CentOS 7上安装和配置vnc服务器的步骤,我们需要一个配置文件。
默认情况下,我们将从tigervnc-serverrpm获取一个示例配置文件,如下所示

# rpm -ql tigervnc-server-1.8.0-5.el7.x86_64
/etc/sysconfig/vncservers
/usr/bin/vncserver
/usr/bin/x0vncserver
/usr/lib/systemd/system/[email protected]
/usr/lib/systemd/system/xvnc.socket
/usr/lib/systemd/system/[email protected]
/usr/share/man/man1/vncserver.1.gz
/usr/share/man/man1/x0vncserver.1.gz

在本示例中,我们将为root用户和普通用户hynman创建vncservice。
为此,我们将使用两个不同的"显示号"将默认配置文件复制到以下位置。

# cp /usr/lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service
# cp /usr/lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:2.service

提示:

更改每个实例的vncserver @:<num> .service号。
我们应该为每个用户创建一个单位文件

其中vncserver @:1.service将充当root用户的配置文件,而vncserver @:2.service将被Deepap用户使用。

重要的提示:

在RHEL 7.8和更高版本中,配置vnc服务器的步骤已更改。
如果我们使用的是CentOS,则次要版本可能会有所不同,因此请通过以下方法查找示例配置文件,然后选择一个与示例配置文件匹配的示例文件。

方法一

我有rpm的tigervnc-server-1.8.0-5.el7.x86_64版本的服务单元文件。
使用文本编辑器编辑/etc/systemd/system/vncserver @:1.service文件,并将字符串" USER"替换为适当的vncuser用户名。
在此示例中,用户将是" root"用户

# 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

说明:

如果用户是root,则将PIDFile行中的路径更改为/root/.vnc /%H%i.pid

接下来,类似地为普通用户在CentOS 7上安装和配置vnc服务器,我们将为hynman用户修改其他配置文件。

# 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 hynman -c "/usr/bin/vncserver %i"
PIDFile=/home/hynman/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target

重要的提示:

确保使用用户的原始路径(即" /home/hynman/.vnc/%H%i.pid")更改PIDFile的路径,如果用户的原始路径为"/export/home",则该路径应该是/export/home/hynman/.vnc /%H%i.pid

要使更改立即生效,请发出以下命令:

# systemctl daemon-reload

方法2

在这种方法中,对于root用户和普通用户而言,我们没有任何特殊处理即可使用vnc服务器。
我有CentOS 7.7的tigervnc-server-1.8.0-19.el7.x86_64版本rpm的这个单位文件。
以下是vncserver服务的示例单位文件。
其中将<USER>替换为要为其配置vnc服务器的用户名。

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver_wrapper <USER> %i
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target

在此示例中,我将 <USER>替换为hynman

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver_wrapper hynman %i
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target

其中不需要将" PIDFile"行中的路径更改为" /root/.vnc/%H%i.pid"。
除了替换<USER>外,不要替换其余的单元文本。

接下来,要激活更改,请重新加载systemd守护程序。

# systemctl daemon-reload

为用户分配vnc密码

为配置文件中定义的一个或者多个用户设置密码。

# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

说明:

要将密码分配给普通用户,我们必须首先以" root"用户身份登录,然后切换用户

# su - hynman
$vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

重要的提示:

存储的密码未加密;有权访问密码文件的任何人都可以找到纯文本密码。

启动vncserver服务

接下来,完成安装和配置vnc服务器的步骤,我们必须启动vnc服务器服务。
要启动或者启用服务,请直接在命令中指定显示编号。
上面配置的文件用作模板,其中"%i"由systemd替换为显示编号。

# 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.
# systemctl enable vncserver@:2.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:2.service to /etc/systemd/system/vncserver@:2.service.

让我们为用户" root"启动vncservice

# systemctl start vncserver@:1.service
# 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: active (running) since Sat 2016-09-22 23:18:57 IST; 2min 17s ago
Process: 10897 ExecStart=/usr/sbin/runuser -l root -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)
Process: 10892 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Main PID: 10934 (Xvnc)
CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
‣ 10934 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop openstack.example:1 (root) -fp catalogue:/etc/X11/fontpath.d -g...
Sep 22 23:18:54 openstack.example systemd[1]: Starting Remote desktop service (VNC)...
Sep 22 23:18:57 openstack.example systemd[1]: Started Remote desktop service (VNC).

同样为用户hynman启动vncservice

# systemctl start vncserver@:2.service
# systemctl status vncserver@:2.service
● vncserver@:2.service - Remote desktop service (VNC)
Loaded: loaded (/etc/systemd/system/vncserver@:2.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2016-09-26 20:01:41 IST; 16min ago
Main PID: 27325 (Xvnc)
CGroup: /system.slice/system-vncserver.slice/vncserver@:2.service
‣ 27325 /usr/bin/Xvnc :2 -auth /home/hynman/.Xauthority -desktop openstack-test:2 (hynman) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/hynman/.vnc/passwd -...
Sep 26 20:01:38 openstack-test systemd[1]: Starting Remote desktop service (VNC)...
Sep 26 20:01:41 openstack-test systemd[1]: Started Remote desktop service (VNC).

说明:

由于超出已配置的资源限制,尝试启动服务vncserver服务失败时可能会遇到以下错误

配置防火墙

运行防火墙配置工具并添加TCP端口5950,以允许到系统的传入连接。

# firewall-cmd --permanent --zone=public --add-port=5950/tcp
success
# firewall-cmd --reload
success

配置桌面环境

vnc的用户特定配置文件位于用户主目录中的" .vnc"目录中。
(例如/home/username/.vnc /)。
在我们喜欢的编辑器中打开.vnc/xstartup并进行如下编辑。
在配置文件中进行任何更改后,重新启动vnc服务器服务。
对于Gnome," xstartup"文件应如下所示

# cat ~/.vnc/xstartup
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &

对于KDE," xstartup"文件应如下所示

# cat ~/.vnc/xstartup
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#vncconfig -iconic &
#dbus-launch --exit-with-session gnome-session &
startkde &

终止或者停止VNC会话

与启用vncserver服务类似,我们可以在系统启动时禁用该服务的自动启动:

# systemctl disable vncserver@:display_number.service

或者,当系统正在运行时,我们可以通过以超级用户身份发出以下命令来停止服务:

# systemctl stop vncserver@:display_number.service