KVM--Qemu-Spice构建云桌面(十六)

2022-11-19 09:24:39 浏览数 (1)

Spice简介

Spice是由Qumranet开发的开源网络协议,2008年红帽收购了Qumranet得到了这个协议。SPICE是红帽在虚拟化领域除了KVM的又一“新兴技术”,它提供与虚拟桌面设备的远程交互实现。目前,spice主要目标是为qemu虚拟机提供高质量的远程桌面访问,它致力于克服传统虚拟桌面的一些弊端,而且强调用户体验。

Spice官网:https://www.spice-space.org/index.html

Qemu-Spice框架

Spice 基本构建模块

Spice Server

Spice Server是在libspice中实现的,libspice是一个VDI可插拔库。目前,这个库的主要用户是QEMU。QEMU使用Spice -server通过Spice协议提供对虚拟机的远程访问。虚拟设备接口(Virtual Device Interface, VDI)定义了一组接口, 提供了发布虚拟设备(例如,显示设备、键盘、鼠标)的标准方法,并允许不同的Spice组件与这些设备交互。一方面,服务器使用Spice协议与远程客户端通信; 另一方面,它与VDI主机应用程序(例如QEMU)交互。

Spice Client

Spice客户端是终端用户通过Spice访问远程系统的程序。推荐的客户端是远程查看器(与virt-viewer一起提供)。GNOME Boxes也可以用作Spice客户端。

QXL Device and Drivers

Spice Server支持QXL VDI接口。当libspice与QEMU一起使用时,可以使用特定的视频PCI设备来提高远程显示性能和增强客户图形系统的图形功能。这个视频设备称为QXL设备,需要客户QXL驱动程序才能实现完整的功能。但是,当不存在驱动程序时,支持标准VGA。

Spice Agent

Spice代理是一个可选组件,用于增强用户体验和执行面向客户的管理任务。例如,当使用客户端鼠标模式时,代理将鼠标位置和状态注入到客户端。它还允许您在客户端和客户端之间自由移动光标。代理的其他功能包括共享剪贴板(客户端和主机之间的复制和粘贴)和在进入全屏模式时客户端分辨率与客户端对齐。

VDI Port Device

Spice协议支持客户端和服务器端代理之间的通信通道。当使用QEMU时,Spice代理驻留在客户机上。VDI端口是QEMU PCI设备,用于与代理通信。

Spice Protocol

Spice协议定义了各种Spice组件之间通信的消息和规则。

Spice 架构

Spice agent运行在客户机(虚拟机)系统中。Spice server和Spice client利用spice agent来执行一些需要在虚拟机里执行的任务,如配置分辨率,另外还有经过剪贴板来拷贝文件等。从上图能够看出,Spice client与server与Spice Agent的通讯需要借助一些其余的软件模块,如在客户机里面,Spice Agent需要经过VDIPort Driver与主机上 QEMU的VDIPort Device进行交互,他们的交互经过一种叫作输入/输出的环进行。Spice Client和Server产生的消息被写入到设备的输出环中,由VDI Port Driver读取;而Spice Agent发出的消息则经过VDI Port Driver先写入到VDI Port Device输入环中,被QEMU读入到Spice server的缓冲区中,而后再根据消息决定由Spice Server直接处理,仍是被发往Spice Client中。

Spice的不足

  • spice目标是提供一个高性能,高用户体验的远程桌面链接,就像本地桌面同样展示给用户. 其目前实现的功能有usb重定向,音视频传输,剪贴板,鼠标同步,2D图形支持,任意调整分辨率(qxl驱动)等
  • spice目前不支持虚拟机中的3D效果

1,宿主机安装spice-server

代码语言:javascript复制
yum -y install spice-protocol spice-server xorg-x11-drv-qxl spice-glib

2,客户端安装spice client

(1)centos客户端安装virt-viewer

代码语言:javascript复制
yum -y install virt-viewer

连接远程虚拟机

代码语言:javascript复制
#remote-viewer spice://IP:PORT
remote-viewer spice://127.0.0.1:5900
#virt-viewer Domain
virt-viewer guest-rhel7

(2)windows客户机安装virt-viewer

http://virt-manager.org/download/sources/virt-viewer/virt-viewer-x64-2.0.msi

3,修改虚拟机xml文件

关闭虚拟机

代码语言:javascript复制
virsh  destroy  win10

编辑虚拟机

代码语言:javascript复制
virsh  edit  win10

原始XML配置

默认情况下,qemu使用vnc建立远程连接,监听地址为0.0.0.0,其端口为自动分配(xml文件中定义graphics type='vnc' port='-1', -1表示端口自动分配5900 N)

//XML文件修改如下内容

代码语言:javascript复制
<graphics type='spice'  port='5920'  autoport='no' listen='0.0.0.0'>    
  <listen type='address' address='0.0.0.0'/>    
</graphics>
<video>      
  <model type='qxl' vram='32768' heads='1' primary='yes'/>    
  <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>   
</video>

注:默认虚拟机使用的显卡是虚拟显卡,而使用spice协议时可以将虚拟显卡更换为qxl 显卡,这会加快视频传输的质量。

4,虚拟机安装时启用spice协议

代码语言:javascript复制
virt-install -n windows01 -r 2048 
-f /var/kvm/images/windows.img -s 50 
--vcpus=2--os-type windows--os-variant=win7 
--network bridge=br0 
--graphics spice,port=5940,listen=0.0.0.0,password=password 
--video qxl --channel spicevmc 
--cdrom /dev/cdrom 

5,Windows 客户端连接测试

6,提高虚拟机性能(鼠标同步,共享剪贴板,音视频传输等)

在客户端使用spice client远程连接虚拟机,如果想要虚拟机中播放的音视频传输到本地客户端,或者在虚拟机和客户机之间共享剪贴板,则需要在虚拟机中安装相应增强工具。

(1) windows虚拟机配置

Windows虚拟机需要安装增强工具spice-guest-tools,软件包含qxl视频卡驱动,SPICE guest agent,实现同步剪贴板,鼠标,任意调整虚拟机分辨率等功能,安装QXL驱动前,请确保已添加virtio镜像。

下载地址

http://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe

(2) Linux虚拟机配置

centos gnome桌面版虚拟机,安装以下软件包

代码语言:javascript复制
yum install xorg-x11-drv-qxl spice-vdagent

设置开机启动

代码语言:javascript复制
systemctl start spice-vdagentd

(3)虚拟机中的传输文件,共享剪贴板

//XML文件添加如下内容

代码语言:javascript复制
<channel type='spicevmc'>
   <target type='virtio' name='com.redhat.spice.0'/>
   <alias name='channel0'/>
   <address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>

(4)虚拟机中的音视频传输到客户端

//XML文件添加启用声卡

代码语言:javascript复制
<sound model='ac97'>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</sound>

linux下model='ich6',windows下model='ac97'

0 人点赞