为 Linux VM 启用 VNC

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

基于 CentOS 的 VM 应当使用下文中针对基于 Red Hat 的 VM 的说明,因为它们使用相同的基础代码提供图形 VNC 访问。CentOS 4 基于 Red Hat Enterprise Linux 4,CentOS 5 基于 Red Hat Enterprise Linux 5。

在 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 中启用图形控制台

注意

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

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

确定 VNC 配置文件的位置

如果您使用的是 Red Hat Linux 版本 4.x,则 GDM 配置文件为 /etc/X11/gdm/gdm.conf。这是统一的配置文件,除包含您自己的自定义配置外,还包含由 GDM 版本的提供商指定的默认值。默认情况下,在 GDM 的较旧版本(包含在这些版本的 Red Hat Linux 中)中使用此类型的文件。

如果您使用的是 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
    
    • 对于 4.x 中的配置文件,应将这些命令行添加到 [server-Standard] 部分的上面。

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

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

    • 如果您使用的是 Red Hat Linux 3 或 4,其上会显示以下行:

      0=Standard
      

      请将其修改为:

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

  4. 保存并关闭该文件。

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

注意

Red Hat Linux 将运行级别 5 用于图形启动。如果您的安装配置为以运行级别 3 启动,则需要为要启动的显示管理器更改此设置(以便访问图形控制台)。

防火墙设置

配置 VNC 防火墙设置, RHEL默认情况下,防火墙配置不允许进行 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 4.x 和 5.x,使用 system-config-securitylevel-tui

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

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

VNC 屏幕分辨率

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

  1. 使用您喜欢的文本编辑器打开 GDM 配置文件。

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

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

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

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

  4. 保存并关闭该文件。

为 RHEL、CentOS 或 OEL 6.x VM 启用 VNC

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

操作系统安装过程中,选择 Desktop(桌面)模式。

  1. 在 RHEL 安装屏幕上,依次选择 Desktop(桌面),“Customize now”(立即自定义),然后单击 Next(下一步):

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

  2. 选择 Desktop(桌面)、“Optional packages”(可选包),然后单击 Next(下一步)。

    这将显示桌面 窗口,选择 tigervnc-server-<version_number>,然后单击 下一步中的软件包

完成以下步骤,以继续设置您的 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”(远程管理)。可以选择在安装时启用远程管理(在 SLES 安装程序的“网络服务”屏幕上提供)。这使您可以将外部 VNC 查看器连接到来宾系统以查看图形控制台;使用 SLES 远程管理功能的方法与 XenCenter 提供的方法稍有不同,但可以修改 SUSE Linux 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

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

    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
    }
    
  2. port 行编辑为

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

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

    /etc/init.d/xinetd restart
    rcxdm restart
    

SUSE Linux 将运行级别 5 用于图形启动。如果未显示远程桌面,请验证是否已将 VM 配置为以运行级别 5 启动。

防火墙设置

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

如果希望使用 IP 连接跟踪或将连接限制为仅从一端启动,可能需要进一步自定义防火墙配置。

在基于 SLES 10.x 的 VM 防火墙中打开 VNC 端口

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

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

  3. 在 Firewall(防火墙)屏幕中,使用箭头键选择左侧菜单中的 Allowed Services(允许的服务)。

  4. 按 Tab 键切换到右侧的 Firewall Configuration: Allowed Services(防火墙配置: 允许的服务)字段。使用箭头键选择 Advanced(高级)按钮(在右下角附近,Next(下一步)按钮的正上方),然后按 Enter 键。

  5. 在“Additional Allowed Ports”(其他允许端口)屏幕的“TCP Ports”(TCP 端口)字段中,输入 5900。按 Tab 键切换到“OK”(确定)按钮,然后按 Enter 键。

  6. 按 Tab 键切换到“Next”(下一步)按钮并按 Enter 键,然后在“Summary”(摘要)屏幕中,按 Tab 键切换到“Accept”(接受)按钮并按 Enter 键,最后在顶级 YaST 屏幕上,按 Tab 键切换到“Quit”(退出)按钮,并按 Enter 键。

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

    /etc/init.d/xinetd restart
    rcxdm restart
    

或者,也可以通过运行 rcSuSEfirewall2 stop 命令在下次重新启动之前一直禁用防火墙,或使用 YaST 将其永久禁用。这必然会将其他服务器公开给外部环境并降低 VM 的整体安全性。

在基于 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 键,然后在“Summary”(摘要)屏幕中,按 Tab 键切换到“Finish”(完成)按钮并按 Enter 键,最后在顶级 YaST 屏幕上,按 Tab 键切换到“Quit”(退出)按钮,并按 Enter 键。

  8. 使用下列命令重新启动显示管理器和 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 启动,以及如果不是以该级别应如何进行更改。Linux 运行级别

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

    id:n:initdefault:
    

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

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