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'