为 Linux VM 启用 VNC

默认情况下,不会将 VM 设置为支持虚拟网络计算 (Virtual Network Computing, VNC),XenServer 使用该计算方法远程控制 VM。为了可以与 XenCenter 连接,需要确保 VNC 服务器和 X 显示管理器安装在 VM 中并进行了正确的配置。本节介绍如何在支持的每个 Linux 操作系统发行版中配置 VNC 以便能够与 XenCenter 正确交互。

对于基于 CentOS 的 VM,请参照下文中有关基于 Red Hat 的 VM 的说明,因为它们使用相同的基础代码提供图形 VNC 访问。CentOS X 建立在 Red Hat Enterprise Linux X 的基础之上。

在 Debian Squeeze VM 上启动图形控制台

注意:

在 Debain Squeeze VM 上启用图形控制台之前,请确保已安装 Linux 来宾代理。有关详细信息,请参阅安装 Linux 来宾代理

Debian Squeeze 虚拟机的图形控制台由在该 VM 内部运行的 VNC 服务器提供。在建议的配置中,由一个标准显示管理器控制控制台,以便提供登录对话框。

  1. 使用桌面系统软件包安装 Squeeze 来宾系统,或使用 apt(按照标准过程)安装 GDM(显示管理器)。

  2. 使用 apt-get(或类似命令)安装 Xvnc 服务器:

    apt-get install vnc4server
    

    注意:

    Debian Squeeze 图形桌面环境(使用 Gnome Display Manager 版本 3 守护程序)会占用大量 CPU 时间。Citrix 强烈建议客户卸载 Gnome Display Manager gdm3 软件包并按如下所示安装 gdm 软件包:

    apt-get install gdm
    apt-get purge gdm3
    
  3. 使用 vncpasswd 命令设置 VNC 密码(不设置密码将存在严重的安全风险)。传入一个文件名以向其写入密码信息。例如:

    vncpasswd /etc/vncpass
    
  4. 修改您的 gdm.conf 文件 (/etc/gdm/gdm.conf) 以配置 VNC 服务器来管理显示 0,即按如下所示扩展 [servers][daemon] 部分:

    [servers]
    0=VNC
    [daemon]
    VTAllocation=false
    [server-VNC]
    name=VNC
    command=/usr/bin/Xvnc -geometry 800x600 -PasswordFile /etc/vncpass BlacklistTimeout=0
    flexible=true
    
  5. 重新启动 GDM,然后等待 XenCenter 检测图形控制台:

    /etc/init.d/gdm restart
    

注意:

可以使用类似于 ps ax | grep vnc 的命令检查 VNC 服务器是否正在运行。

在 Red Hat、CentOS 或 Oracle Linux VM 中启用图形控制台

注意:

为 Red Hat VM 配置 VNC。

为 VNC 设置 Red Hat VM 之前,请确保已安装了 Linux 来宾代理。有关详细信息,请参阅安装 Linux 来宾代理

要在 Red Hat VM 中配置 VNC,请修改 GDM 配置。GDM 配置保存在一个文件中,该文件位置会根据使用的 Red Hat Linux 版本的不同而有所差异。修改之前,先确定此配置文件的位置。在本节后续几个过程中将修改此文件。

注意:

有关为 RHEL、CentOS 或 OEL 6.x VM 启用 VNC 的信息,请参阅为 RHEL、CentOS 或 OEL 6 VM 启用 VNC

确定 VNC 配置文件的位置

如果您使用的是 Red Hat Linux 版本 5.x,则 GDM 配置文件为 /etc/gdm/custom.conf。此文件是一个拆分的配置文件,仅包含用于覆盖默认配置的用户指定值。在较新版本的 GDM 中,将默认使用此文件类型。此类型的文件包含在这些版本的 Red Hat Linux 中。

配置 GDM 以使用 VNC

  1. 以 root 用户身份在 VM 中的文本 CLI 上,运行 rpm -q vnc-server gdm 命令。将显示软件包名称 vnc-servergdm,并指定了它们的版本号。

    显示的软件包名称表明已安装相应软件包。如果出现提示未安装某个软件包的消息,则您可能在安装过程中未选择图形桌面选项。安装相应软件包后才能继续。有关在 VM 上安装更多软件的详细信息,请参阅相应的《Red Hat Linux x86 安装指南》。

  2. 使用您喜欢的文本编辑器打开 GDM 配置文件,然后将下列行添加到文件中:

    [server-VNC]
    name=VNC Server
    command=/usr/bin/Xvnc -SecurityTypes None -geometry 1024x768 -depth 16 \
    -BlacklistTimeout 0
    flexible=true
    

    对于 Red Hat Linux 5.x 中的配置文件,应将这些命令行添加到空的 [servers] 部分中。

  3. 修改配置,以便使用 Xvnc 服务器而不是标准 X 服务器:

    • 0=Standard

      请将其修改为:

      0=VNC

    • 如果您使用的是 Red Hat Linux 5.x 或更高版本,则应在 [servers] 部分下面、[server-VNC] 部分之前添加以上行。

  4. 保存并关闭该文件。

运行 /usr/sbin/gdm-restart 命令来重新启动 GDM 以使对配置所做的更改生效。

注意:

Red Hat Linux 将运行级别 5 用于图形启动。如果安装的软件以运行级别 3 启动,请更改此配置以便显示管理器能够启动并访问图形控制台。有关详细信息,请参阅检查运行级别

防火墙设置

默认情况下,防火墙配置不允许进行 VNC 通信。如果您在 VM 和 XenCenter 间设置了防火墙,则应允许通过 VNC 连接使用的端口传输通信。默认情况下,VNC 服务器在 TCP 端口 5900 + n 上侦听来自 VNC 查看器的连接,其中 n 为显示号(通常为 0)。因此,为 Display-0 设置的 VNC 服务器将侦听 TCP 端口 5900,为 Display-1 设置的 VNC 服务器将侦听 TCP-5901,依此类推。请参考防火墙文档,确保这些端口已打开。

如果希望使用 IP 连接跟踪或将连接限制为仅从一端启动,则应进一步配置防火墙。

要配置基于 Red Hat 的 VM 防火墙以打开 VNC 端口,请执行以下操作:

  1. 对于 Red Hat Linux 5.x,使用 system-config-securitylevel-tui

  2. 选择自定义,然后将 5900 添加到其他端口列表中。

或者,也可以通过运行 service iptables stop 命令在下次重新启动之前一直禁用防火墙,或通过运行 chkconfig iptables off 将其永久禁用。此配置可能会向外部环境公开额外的服务并降低 VM 的整体安全性。

VNC 屏幕分辨率

连接到具有图形控制台的 VM 后,屏幕分辨率有时不匹配。例如,该 VM 的显示屏幕太大,无法与图形控制台窗格很好地相配。可以按如下所示通过设置 VNC 服务器的 geometry 参数来控制此行为:

  1. 使用您喜欢的文本编辑器打开 GDM 配置文件。有关详细信息,请参阅确定 VNC 配置文件的位置

  2. 找到上面添加的 [server-VNC] 部分。

  3. 例如,将命令行编辑为:

    command=/usr/bin/Xvnc -SecurityTypes None -geometry 800x600
    

    geometry 参数的值可以是任何有效的屏幕宽度和高度。

  4. 保存并关闭该文件。

为 RHEL、CentOS 或 OEL 6 VM 启用 VNC

如果您使用的是 Red Hat Linux 版本 6.x,则 GDM 配置文件为 /etc/gdm/custom.conf。此文件是一个拆分的配置文件,仅包含用于覆盖默认配置的用户指定值。默认情况下,在较新的 GDM 版本中使用此类型的文件,并且此类型的文件包含在这些版本的 Red Hat Linux 中。

操作系统安装过程中,选择 Desktop(桌面)模式。在 RHEL 安装屏幕上,依次选择 Desktop(桌面)> Customize now(立即自定义),然后单击 Next(下一步):

RHEL 安装屏幕的屏幕截图

此操作将显示“Base System”(基本系统)屏幕,请务必选择 Legacy UNIX compatibility(旧 UNIX 兼容性):

“Base System”(基本系统)屏幕的屏幕截图

依次选择 Desktops(桌面)> Optional packages(可选软件包),然后单击 Next(下一步):

“Desktops”(桌面)屏幕的屏幕截图

此操作将显示 Packages in Desktop(桌面中的软件包)窗口,请选择 tigervnc-server-<版本号>,然后单击 Next(下一步):

“Packets in Desktop”(桌面中的软件包)窗口的屏幕截图

完成以下步骤,以继续设置您的 RHEL 6.x VM:

  1. 使用您喜欢的文本编辑器打开 GDM 配置文件,然后将下列行添加到相应的部分:

    [security]
    DisallowTCP=false
    
    [xdmcp]
    Enable=true
    
  2. 创建文件 /etc/xinetd.d/vnc-server-stream

    service vnc-server
    {
    id = vnc-server
    disable = no
    type = UNLISTED
    port = 5900
    socket_type = stream
    wait = no
    user = nobody
    group = tty
    server = /usr/bin/Xvnc
    server_args = -inetd -once -query localhost -SecurityTypes None \
    -geometry 800x600 -depth 16
    }
    
  3. 输入以下命令以启动 xinetd 服务:

    # service xinetd start
    
  4. 打开文件 /etc/sysconfig/iptables。将以下行添加到内容为 -A INPUT -j REJECT --reject-with icmp-host-prohibited 的行上方:

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT
    
  5. 输入以下命令以重新启动 iptables

    # service iptables restart
    
  6. 输入以下命令以重新启动 gdm

    # telinit 3
    # telinit 5
    

注意:

Red Hat Linux 将运行级别 5 用于图形启动。如果安装的软件以运行级别 3 启动,请更改此配置以便显示管理器能够启动并访问图形控制台。有关详细信息,请参阅检查运行级别

为 VNC 设置基于 SLES 的 VM

注意:

在为 VNC 设置 SUSE Linux Enterprise Server VM 之前,请确保已安装了 Linux 来宾代理。有关详细信息,请参阅安装 Linux 来宾代理

SLES 支持在 YaST 中以一个配置选项方式启用“Remote Administration”(远程管理)。安装时可以选择启用“Remote Administration”(远程管理),此设置在 SLES 安装程序的 Network Services(网络服务)屏幕中提供。您可以通过此功能将外部 VNC 查看器连接到您的来宾系统以允许您查看图形控制台。使用 SLES 远程管理功能的方法与 XenCenter 提供的方法稍有不同。但是,可以修改 SUSE Linux VM 中的配置文件,以便该 VM 与图形控制台功能集成。

检查 VNC 服务器

进行配置更改前,请验证是否安装了 VNC 服务器。默认情况下,SUSE 附带 tightvnc 服务器。此服务器适合作为 VNC 服务器使用,但您也可以使用标准 RealVNC 发行版。

可以通过运行以下命令检查是否安装了 tightvnc 软件:

rpm -q tightvnc

启用远程管理

如果在 SLES 软件安装过程中未启用远程管理,可以执行以下步骤启用该功能:

  1. 在 VM 中打开文本控制台,然后运行 YaST 实用程序:

    yast
    
  2. 使用箭头键选择左侧菜单中的 Network Services(网络服务)。按 Tab 键切换到右侧菜单,然后使用箭头键选择 Remote Administration(远程管理)。按 Enter 键。

  3. Remote Administration(远程管理)屏幕中,按 Tab 键切换到 Remote Administration Settings(远程管理设置)部分。使用箭头键选择 Allow Remote Administration(允许远程管理),然后按 Enter 键在复选框中标记 X。

  4. Tab 键切换到 Firewall Settings(防火墙设置)部分。使用箭头键选择 Open Port in Firewall(在防火墙中打开端口),然后按 Enter 键在复选框中标记 X。

  5. Tab 键切换到 Finish(完成)按钮,然后按 Enter 键。

  6. 此时将显示一个消息框,提示您重新启动显示管理器以使设置生效。按 Enter 键确认此消息。

  7. 此时将显示 YaST 的原始顶层菜单。按 Tab 键切换到 Quit(退出)按钮,然后按 Enter 键。

修改 xinetd 配置

启用“Remote Administration”(远程管理)后,如果希望允许 XenCenter 进行连接,则修改一个配置文件。或者,也可以使用一个第三方 VNC 客户端。

  1. 在首选文本编辑器中,打开文件 /etc/xinetd.d/vnc

  2. 该文件包含类似下面的部分:

    service vnc1
    {
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = nobody
    server      = /usr/X11R6/bin/Xvnc
    server_args = :42 -inetd -once -query localhost -geometry 1024x768 -depth 16
    type        = UNLISTED
    port        = 5901
    }
    
  3. port 行编辑为

    port = 5900
    
  4. 保存并关闭该文件。

  5. 使用下列命令重新启动显示管理器和 xinetd 服务:

    /etc/init.d/xinetd restart
    rcxdm restart
    

SUSE Linux 将运行级别 5 用于图形启动。如果未显示远程桌面,请验证是否已将 VM 配置为以运行级别 5 启动。有关详细信息,请参阅检查运行级别

防火墙设置

默认情况下,防火墙配置不允许进行 VNC 通信。如果您在 VM 和 XenCenter 间设置了防火墙,则应允许通过 VNC 连接使用的端口传输通信。默认情况下,VNC 服务器在 TCP 端口 5900 + n 上侦听来自 VNC 查看器的连接,其中 n 为显示号(通常为 0)。因此,为 Display-0 设置的 VNC 服务器将侦听 TCP 端口 5900,为 Display-1 设置的 VNC 服务器将侦听 TCP-5901,依此类推。请参考防火墙文档,确保这些端口已打开。

如果希望使用 IP 连接跟踪或将连接限制为仅从一端启动,则应进一步配置防火墙。

要在 SLES 11.x VM 防火墙中打开 VNC 端口,请执行以下操作:

  1. 在 VM 中打开文本控制台,然后运行 YaST 实用程序:

    yast
    
  2. 使用箭头键选择左侧菜单中的 Security and Users(安全性与用户)。按 Tab 键切换到右侧菜单,然后使用箭头键选择 Firewall(防火墙)。按 Enter 键。

  3. Firewall(防火墙)屏幕中,使用箭头键选择左侧菜单中的 Custom Rules(自定义规则),然后按 Enter 键。

  4. Tab 键切换到 Custom Allowed Rules(自定义允许的规则)部分中的 Add(添加)按钮,然后按 Enter 键。

  5. Source Network(源网络)字段中,输入 0/0。按 Tab 键切换到 Destination Port(目标端口)字段并输入 5900

  6. Tab 键切换到 Add(添加)按钮,然后按 Enter 键。

  7. Tab 键切换到 Next(下一步)按钮,然后按 Enter 键。

  8. Summary(摘要)屏幕中,按 Tab 键切换到 Finish(完成)按钮并按 Enter 键。

  9. 在顶层 YaST 屏幕中,按 Tab 键切换到 Quit(退出)按钮并按 Enter 键。

  10. 使用下列命令重新启动显示管理器和 xinetd 服务:

    /etc/init.d/xinetd restart
    rcxdm restart
    

或者,也可以通过运行 rcSuSEfirewall2 stop 命令,在下次重新启动之前一直禁用防火墙,或使用 YaST 永久禁用防火墙。此配置可能会向外部环境公开额外的服务并降低 VM 的整体安全性。

VNC 屏幕分辨率

连接到具有图形控制台的虚拟机后,屏幕分辨率有时不匹配。例如,该 VM 的显示屏幕太大,无法与图形控制台窗格很好地相配。可以按如下所示通过设置 VNC 服务器的 geometry 参数来控制此行为:

  1. 使用首选文本编辑器打开 /etc/xinetd.d/vnc 文件并查找与 displayID 1 对应的 service_vnc1 部分。

  2. server-args 行中的 geometry 参数编辑为所需的显示分辨率。例如:

    server_args  = :42 -inetd -once -query localhost -geometry 800x600 -depth 16
    

    geometry 参数的值可以是任何有效的屏幕宽度和高度。

  3. 保存并关闭该文件。

  4. 重新启动 VNC 服务器:

    /etc/init.d/xinetd restart
    rcxdm restart
    

查看运行级别

Red Hat 和 SUSE Linux VM 将运行级别 5 用于图形启动。本节介绍如何确认 VM 以运行级别 5 启动,以及如何更改此设置。

  1. 检查 /etc/inittab 以查看设置的默认运行级别。查找以下行:

    id:n:initdefault:
    

    如果 n 不是 5,请编辑文件将其更改为 5。

  2. 可以在更改后运行 telinit q ; telinit 5 命令,以避免必须重新启动才能改变运行级别。