前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KVM--Qemu-Spice构建云桌面(十六)

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

作者头像
Kevin song
发布2022-11-19 09:24:39
5.2K0
发布2022-11-19 09:24:39
举报
文章被收录于专栏:运维监控日志分析

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'

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云桌面
云桌面(Cloud Virtual Desktop,CVD),为您提供随需快捷交付的虚拟远程桌面服务。云桌面可以帮助您轻松构建安全的数字化工作空间,满足移动办公、安全开发、教育实训、在线设计等场景需求,提升业务访问的安全性和连续性。通过自适应传输协议,终端用户可以获得优质的云桌面访问体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档