第 13 章 tigervnc
tigervnc(
网络虚拟网络计算)是一个图形桌面共享系统,可让您远程控制其他计算机。
tigervnc 遵循
client-server 原则: 服务器 共享其输出(vncserver
),客户端 (vncviewer
)连接到服务器。
与以前的 Red Hat Enterprise Linux 发行版不同,红帽企业 Linux 7 中的 TigerVNC
使用 systemd
系统管理守护进程进行配置。/etc/sysconfig/vncserver
配置文件已被 /etc/systemd/system/vncserver@.service 替代
。
13.1. VNC 服务器
vncserver
是一个可启动 VNC(虚拟网络计算)桌面的实用程序。它使用适当的选项运行 Xvnc,并在 VNC 桌面上启动窗口管理器。vncserver
允许用户在一台计算机上并行运行独立的会话,然后任何数量的客户端可以从任何位置访问这些会话。
13.1.1. 安装 VNC 服务器
要安装 TigerVNC 服务器,以 root
用户身份运行以下命令:
~]# yum install tigervnc-server
13.1.2. 配置 VNC 服务器
VNC 服务器可以配置为为一个或多个用户启动显示,前提是系统中存在用户的帐户,以及显示设置、网络地址和端口以及安全设置等可选参数。
为单个用户配置 VNC 显示
需要名为
/etc/systemd/system/vncserver@.service
的配置文件。要创建这个文件,以root
用户身份复制/usr/lib/systemd/system/vncserver@.service
文件:~]#
cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service
不需要在文件名中包含显示号,因为
systemd 会自动根据需要
在内存中创建适当的命名实例,将服务文件中的'%i'
替换为显示号。对于单个用户,无需重命名该文件。对于多个用户,每个用户都需要一个唯一命名的服务文件,例如,以某种方式将用户名添加到文件名中。详情请查看 第 13.1.2.1 节 “为两个用户配置 VNC 服务器”。编辑
/etc/systemd/system/vncserver@.service
,将 USER 替换为实际用户名。不修改 文件的其余行。ExecStart=/usr/bin/vncserver_wrapper <USER> %i
注意VNC 桌面的默认大小为 1024x768。
可以使用
~/.vnc/config
文件进一步配置用户的 VNC 会话。例如,要更改 VNC 窗口大小,请添加以下行:
geometry= <WIDTH> x <HEIGHT>
- 保存更改。
要使更改立即生效,请运行以下命令:
~]#
systemctl daemon-reload
设置 配置文件中定义的用户或用户的密码。请注意,您需要先从
root
切换到 USER。~]# su - USER ~]$
vncpasswd
Password: Verify:重要存储的密码未加密;有权访问密码文件的任何人都可以找到纯文本密码。
13.1.2.1. 为两个用户配置 VNC 服务器
如果要在同一计算机上配置多个用户,请为每个用户创建不同的模板类型服务文件。
-
创建两个服务文件,如
vncserver-USER_1@.service
和vncserver-USER_2@.service
。在这两个文件中,用正确的用户名替换 USER。 为两个用户设置密码:
~]$ su - USER_1 ~]$
vncpasswd
Password: Verify: ~]$ su - USER_2 ~]$vncpasswd
Password: Verify:
13.1.3. 启动 VNC 服务器
要启动并启用服务,请在 命令中直接指定显示号。以上 为单个用户配置 VNC 显示 中配置的文件作为模板运行,其中 %i
被 systemd
替换为显示号。使用有效的显示号,执行以下命令:
~]# systemctl start vncserver@:display_number.service
您还可以启用 服务在系统启动时自动启动。然后,当您登录时,vncserver
会自动启动。作为 root 用户
,按以下方式发出命令:
~]# systemctl enable vncserver@:display_number.service
此时,其他用户可以使用 VNC viewer 程序使用定义的桌面号和密码连接到 VNC 服务器。如果安装了图形桌面,则将显示该桌面的实例。它与当前目标计算机上显示的实例不同。
13.1.3.1. 为两个用户配置 VNC 服务器,以及两个不同的显示器
对于两个配置的 VNC 服务器,vncserver-USER_1@.service 和 vncserver-USER_2@.service,您可以启用不同的显示号。例如,以下命令将导致 USER_1 的 VNC 服务器在桌面 3 中启动,以及 USER_2 的 VNC 服务器在桌面 5 中启动:
~]# systemctl start vncserver-USER_1@:3.service ~]# systemctl start vncserver-USER_2@:5.service
13.1.4. VNC 设置基于 GDM 的 XDMCP 的 xinetd
对于主要由瘦客户端组成的客户端系统,基于 X 显示管理器控制协议(XDMCP)的 xinetd 进行 VNC 设置是非常有用的设置。设置后,客户端可以访问 GDM 登录窗口并登录到任何系统帐户。设置的先决条件是安装 gdm、vnc、vnc -server & 和 xinetd 软件包。
~]# yum install gdm tigervnc tigervnc-server xinetd
必须启用服务 xinetd。
~]# systemctl enable xinetd.service
系统默认目标单元应为 graphical.target
。要获得当前设置的默认目标单元,请使用:
~]# systemctl get-default
可以使用以下方法更改默认目标单元:
~]# systemctl set-default target_name
访问 GDM 登录窗口并登录
通过编辑
/etc/gdm/custom.conf
配置文件将 GDM 设置为启用 XDMCP:[xdmcp] Enable=true
创建名为
/etc/xinetd.d/xvncserver
的文件,其中包含以下内容:service service_name { disable = no protocol = tcp socket_type = stream wait = no user = nobody server = /usr/bin/Xvnc server_args = -inetd -query localhost -once -geometry selected_geometry -depth selected_depth securitytypes=none }
在 server_args 部分中,
-query localhost
选项将使每个 Xvnc 实例查询 localhost 以获取 xdmcp 会话。深度选项指定要创建的 VNC 桌面的
像素深度(以位为单位)。可接受的值为 8、15、16 和 24 - 任何其它值都可能会导致应用程序的无法预计的行为。编辑文件
/etc/services
以定义服务。要做到这一点,请在/etc/services
文件中附加以下片段:# VNC xinetd GDM base service_name 5950/tcp
为确保配置更改生效,请重新启动 计算机。
或者,您可以执行以下操作:将 init 级别更改为 3 并返回到 5,以强制 gdm 重新加载。
# init 3 # init 5
验证 gdm 是否在侦听 UDP 端口 177。
# netstat -anu|grep 177 udp 0 0 0.0.0.0:177 0.0.0.0:*
重新启动 xinetd 服务。
~]# systemctl restart xinetd.service
验证 xinetd 服务是否已加载新服务。
# netstat -anpt|grep 595 tcp 0 0 :::5950 :::* LISTEN 3119/xinetd
使用 vncviewer 命令测试设置:
# vncviewer localhost:5950
命令将在未要求密码的本地主机上启动 VNC 会话。您将看到 GDM 登录屏幕,并且您可以使用有效的用户名和密码登录系统中的任何用户帐户。然后,您可以在远程连接上运行相同的测试。
为设置配置防火墙。运行防火墙配置工具并添加 TCP 端口 5950,以允许进入系统连接。
~]# firewall-cmd --permanent --zone=public --add-port=5950/tcp ~]# firewall-cmd --reload
13.1.5. 终止 VNC 会话
与启用 vncserver
服务类似,您可以禁用系统启动时自动启动该服务:
~]# systemctl disable vncserver@:display_number.service
或者,当您的系统运行时,您可以以 root
用户身份运行以下命令来停止该服务:
~]# systemctl stop vncserver@:display_number.service