KVM虚拟化:为来宾操作系统启动VNC远程访问

时间:2020-01-09 10:41:43  来源:igfitidea点击:

我在Redhat Enterprise Linux 5.5下运行KVM虚拟机(FreeBSD 7和Fedora Linux 13桌面)。
但是,我无法通过VNC(虚拟网络计算)进行远程访问来访问我的Fedora Linux图形桌面或FreeBSD控制台。
如何在不重新安装两个操作系统的情况下打开VNC支持?
您需要将vncserver追加到来宾操作系统控制台。
可以使用以下任何一种方法来完成此操作:

方法1:命令行选项

通常,QEMU(/usr/libexec/qemu-kvm)使用SDL显示VGA输出。
使用-vnc选项,您可以让QEMU在VNC显示器上监听,并通过VNC会话重定向VGA显示。
使用VNC显示屏时,如果不使用en-us,则必须使用-k参数设置键盘布局。
显示的有效语法如下:

-vnc :0
-vnc 192.168.1.5:0
-vnc 0.0.0.0:5
-vnc 0.0.0.0:1 -k en-us
####  Require that password based authentication is used for client connections ####
-vnc 0.0.0.0:1,password -k en-us

在以下示例中,使用vnc启动centos1 guest虚拟机

/usr/libexec/qemu-kvm -S -M rhel5.4.0 -m 1024 -smp 1 -vnc 0.0.0.0:1 -k en-us -name centos1 -monitor pty -boot c -drive file=/var/lib/libvirt/images/centos1.img

方法2:qemu-kvm VM配置文件(推荐)

您需要编辑XML格式的VM配置文件。
配置文件位于/etc/libvirt/qemu目录中。
在此示例中,如下编辑centos1.xml:

# vi /etc/libvirt/qemu/centos1.xml

在最终</devices>之前添加以下行:

<graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>

这是我的示例配置文件:

<domain type='kvm'>
  <name>centos1</name>
  <uuid>88d067cf-e5f7-7229-f35f-472a9c884864</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='rhel5.4.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' cache='none'/>
      <source file='/emc/vms/images/host302.f02.dc05.corplan.theitroad.com/c/centos1.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <mac address='xx:yy:zz:ee:f4:63'/>
      <source bridge='br0'/>
      <model type='virtio'/>
    </interface>
    <interface type='bridge'>
      <mac address='54:52:xx:yy:zz:ee'/>
      <source bridge='br1'/>
      <model type='virtio'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target port='0'/>
    </console>
    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
  </devices>
</domain>

最后,重新启动libvirtd:

# /etc/init.d/libvirtd restart
# virsh shutdown centos1
# virsh start centos1

如何使用VNC客户端?

输入您的VNC(KVM)服务器ip和端口:
使用VNC客户端连接到KVM Guest

连接后,您可以查看桌面:

在KVM下运行的VNC会话上的RHEL 6 Guest Beta Desktop

确保使用ssh隧道或某种VPN会话浏览桌面。

如何找出给定域/VM的当前VNC设置?

执行以下命令:

# virsh vncdisplay domainName
# virsh vncdisplay 3
# virsh vncdisplay centos1

输出示例:

:2

如何使用密码保护我的VNC会话?

passwd属性以明文形式提供VNC密码(因此,请确保root用户只能读取xml配置文件)。
如下编辑centos1.xml文件:

<graphics type='vnc' port='-1' autoport='yes' passwd='YOUR-PASSWORD-HERE' keymap='en-us'/>

或者

<graphics type='vnc' port='-1' autoport='yes' listen='192.168.1.5' passwd='YOUR-PASSWORD-HERE' keymap='en-us'/>

其中:

  • type = vnc:图形元素具有强制的type属性,该属性采用值sdl,vnc,rdp或Desktop。在这种情况下,将其设置为VNC以进行远程访问。
  • autoport = yes:autoport属性是新的首选语法,用于指示要使用的TCP端口的自动分配。
  • " passwd = YOUR-PASSWORD-HERE":passwd属性以明文形式提供VNC密码。
  • keymap = en-us:keymap属性指定要使用的键映射。
  • listen = 192.168.1.5:listen属性是服务器要监听的IP地址。

保存并关闭文件。
重新启动服务,如下所示:

# /etc/init.d/libvirtd restart
# virsh start centos1