Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 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 显示

  1. 需要名为 /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 服务器”

  2. 编辑 /etc/systemd/system/vncserver@.service,将 USER 替换为实际用户名。不修改 文件的其余行。

    ExecStart=/usr/bin/vncserver_wrapper <USER> %i
    注意

    VNC 桌面的默认大小为 1024x768。

    可以使用 ~/.vnc/config 文件进一步配置用户的 VNC 会话。

    例如,要更改 VNC 窗口大小,请添加以下行:

    geometry= <WIDTH> x <HEIGHT>

  3. 保存更改。
  4. 要使更改立即生效,请运行以下命令:

    ~]# systemctl daemon-reload
  5. 设置 配置文件中定义的用户或用户的密码。请注意,您需要先从 root 切换到 USER

    ~]# su - USER
    ~]$ vncpasswd
    Password:
    Verify:
    重要

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

继续 第 13.1.3 节 “启动 VNC 服务器”

13.1.2.1. 为两个用户配置 VNC 服务器

如果要在同一计算机上配置多个用户,请为每个用户创建不同的模板类型服务文件。

  1. 创建两个服务文件,如 vncserver-USER_1@.servicevncserver-USER_2@.service。在这两个文件中,用正确的用户名替换 USER
  2. 为两个用户设置密码:

    ~]$ su - USER_1
    ~]$ vncpasswd
    Password:
    Verify:
    ~]$ su - USER_2
    ~]$ vncpasswd
    Password:
    Verify:

13.1.3. 启动 VNC 服务器

要启动并启用服务,请在 命令中直接指定显示号。以上 为单个用户配置 VNC 显示 中配置的文件作为模板运行,其中 %isystemd 替换为显示号。使用有效的显示号,执行以下命令:

~]# 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 登录窗口并登录到任何系统帐户。设置的先决条件是安装 gdmvnc、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 登录窗口并登录

  1. 通过编辑 /etc/gdm/custom.conf 配置文件将 GDM 设置为启用 XDMCP:

    [xdmcp]
    Enable=true
  2. 创建名为 /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 - 任何其它值都可能会导致应用程序的无法预计的行为。

  3. 编辑文件 /etc/services 以定义服务。要做到这一点,请在 /etc/services 文件中附加以下片段:

    # VNC xinetd GDM base
    service_name 5950/tcp
  4. 为确保配置更改生效,请重新启动 计算机。

    或者,您可以执行以下操作:将 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
  5. 使用 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