CN117891413B - 基于扩展spice协议的打印机虚拟化方法和装置 - Google Patents

基于扩展spice协议的打印机虚拟化方法和装置 Download PDF

Info

Publication number
CN117891413B
CN117891413B CN202410295486.XA CN202410295486A CN117891413B CN 117891413 B CN117891413 B CN 117891413B CN 202410295486 A CN202410295486 A CN 202410295486A CN 117891413 B CN117891413 B CN 117891413B
Authority
CN
China
Prior art keywords
spice
printer
client
message
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202410295486.XA
Other languages
English (en)
Other versions
CN117891413A (zh
Inventor
所光
曹徐辉
王杰东
胡志洪
汪黎
任敏
魏立峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Galaxy Qilin Software Changsha Co ltd
Original Assignee
Galaxy Qilin Software Changsha Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Galaxy Qilin Software Changsha Co ltd filed Critical Galaxy Qilin Software Changsha Co ltd
Priority to CN202410295486.XA priority Critical patent/CN117891413B/zh
Publication of CN117891413A publication Critical patent/CN117891413A/zh
Application granted granted Critical
Publication of CN117891413B publication Critical patent/CN117891413B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Accessory Devices And Overall Control Thereof (AREA)

Abstract

本发明公开了一种基于扩展spice协议的打印机虚拟化方法及装置,方法包括以下步骤:将支持CUPS接口的虚拟打印机驱动与Spice代理配置在服务器的同一个虚拟机中,并扩展spice协议消息的类型;虚拟打印机与物理打印机之间依次通过Spice代理、Spice服务端、Spice客户端进行spice协议消息的间接通信,其中虚拟打印机驱动与Spice代理之间通过标准的进程间通信接口进行通信,Spice客户端通过CUPS环境提供的接口和物理打印机解耦。本发明满足了在客户端和远程虚拟机相互隔离的网络环境中实现打印机虚拟化的需求。

Description

基于扩展spice协议的打印机虚拟化方法和装置
技术领域
本发明涉及虚拟化技术领域,尤其涉及一种基于扩展spice协议的打印机虚拟化方法和装置。
背景技术
当前,云桌面技术的使用痛点主要在以Spice协议为代表的远程显示协议性能优化和典型外设的虚拟化适配。例如,打印机设备的虚拟化。
传统解决打印机在云桌面场景虚拟化使用的技术有三类:
首先,基于Spice协议的设备透传模式(类型1),把USB、串口、并口打印机直接透传到远程虚拟机使用,但此方法具有数据量较大、打印延迟较高的缺点;
其次,网络共享模式(类型2),在客户端建立打印服务器,远程虚拟机利用IPP、SMB等网络打印协议使用客户端的打印机设备,但是此类方法需要建立虚拟机到客户端的直接网络连接,而考虑到安全、网络维护等因素,客户现场不允许建立虚拟机到客户端的直接网络连接,因此使用范围受限;
第三,网络代理打印模式(类型3),在远程虚拟机中建立一个打印代理,用户在虚拟机中把打印文件交给打印代理,打印代理再通过直接网络连接交给客户端的服务程序,由服务程序执行实际的打印工作,此类方向也需要建立虚拟机到客户端的直接网络连接,同样存在使用范围受限的缺点。
另外,经查询一些已公开的专利或者技术文档,目前在云桌面中打印文件时均需要建立虚拟机和网络打印机的直接通信,不适合虚拟机到打印机客户端没有直接网络连接的场景。
因此,面向安全云桌面使用场景,尤其是客户端所在设备和远程虚拟机没有直接网络连接的场景,迫切需要一种既可以运行在客户端和远程虚拟机相互隔离的网络环境中,又具有较高性能和较低延迟的打印机虚拟化技术。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种基于扩展spice协议的打印机虚拟化方法和装置,采用扩展Spice协议的方式,在虚拟机中加入符合操作系统打印机驱动标准的虚拟打印机驱动,虚拟打印机把需要把打印的数据和打印参数通过扩展Spice协议发送到物理打印机所在的客户端,再通过客户端的物理打印机驱动进行打印。
为解决上述技术问题,本发明提出的技术方案为:
一种基于扩展spice协议的打印机虚拟化方法,包括以下步骤:
将支持CUPS接口的虚拟打印机驱动与Spice代理配置在服务器的同一个虚拟机中,并扩展spice协议消息的类型;
虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信,其中虚拟打印机驱动与Spice代理之间通过标准的进程间通信接口进行通信,Spice代理通过Spice服务端和Spice客户端通信, Spice客户端通过支持Spice协议的打印机虚拟化通道和物理打印机通信,并通过CUPS环境提供的接口和物理打印机解耦。
进一步的,扩展spice协议消息的类型时,包括扩展SPICE_VP_INIT消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_INIT消息的处理流程,具体包括:
当Spice客户端初始化时,查询本地连接的物理打印机连接状态并获取物理打印机的参数,然后生成对应的SPICE_VP_INIT消息并通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据SPICE_VP_INIT消息中物理打印机的参数进行参数配置并将虚拟打印机状态设置为使能状态。
进一步的,扩展spice协议消息的类型时,包括扩展SPICE_VP_DISCONN消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_DISCONN消息的处理流程,具体包括:
当物理打印机失去连接时,若Spice客户端检测到打印机断开事件,Spice客户端生成对应的SPICE_VP_DISCONN消息并通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据SPICE_VP_INIT消息中的打印机断开事件将虚拟打印机状态更新为非使能状态。
进一步的,扩展spice协议消息的类型时,包括扩展SPICE_VP_RECONN消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_RECONN消息的处理流程,具体包括:
当物理打印机重新连接到客户端时,若Spice客户端获取物理打印机上报的连接事件,则获取物理打印机的参数,然后生成对应的SPICE_VP_RECONN消息并通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据SPICE_VP_RECONN消息中物理打印机的参数进行参数配置并将虚拟打印机状态设置为使能状态。
进一步的,扩展spice协议消息的类型时,包括扩展SPICE_VP_QUERY_STATE消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_QUERY_STATE消息的处理流程,具体包括:
当用户查询虚拟打印机属性时,虚拟打印机发出SPICE_VP_QUERY_STATE消息,Spice代理将SPICE_VP_QUERY_STATE消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_QUERY_STATE消息后,调用CUPS接口获取物理打印机的状态后将物理打印机的状态通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据物理打印机的状态返回相关参数。
进一步的,扩展spice协议消息的类型时,包括扩展SPICE_VP_QUERY_JOB_STATE消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_QUERY_JOB_STATE消息的处理流程,具体包括:
当用户查看打印任务的运行状态时,虚拟打印机发出SPICE_VP_QUERY_JOB_STATE消息,消息参数包括打印作业ID和打印作业的文件名称,Spice代理将SPICE_VP_QUERY_JOB_STATE消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_QUERY_JOB_STATE消息后,通过CUPS接口按照消息参数查询打印作业的状态后将查询结果通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据查询结果返回打印作业的状态。
进一步的,扩展spice协议消息的类型时,包括扩展SPICE_VP_SUBMIT_JOB消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_SUBMIT_JOB消息的处理流程,具体包括:
当虚拟机的CUPS系统调用虚拟打印机打印文件时,虚拟打印机发出SPICE_VP_SUBMIT_JOB消息,消息参数包括打印作业的配置信息,Spice代理将SPICE_VP_SUBMIT_JOB消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_SUBMIT_JOB消息后,使用打印作业的配置信息设置CUPS系统的打印参数;
虚拟打印机发出待打印文件,Spice代理将待打印文件消息通过Spice服务端发送给Spice客户端,Spice客户端 通过CUPS接口综合打印参数和待打印文件后发送给物理打印机进行打印;
物理打印机打印完成后,打印结果依次通过CUPS接口、Spice客户端、Spice服务端、Spice代理到达虚拟打印机,虚拟机的CUPS系统最终收到打印文件的执行结果。
进一步的,扩展spice协议消息的类型时,包括扩展SPICE_VP_CANCEL_JOB消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_CANCEL_JOB消息的处理流程,具体包括:
当虚拟机的CUPS系统取消虚拟打印机的打印作业时,虚拟打印机发出SPICE_VP_CANCEL_JOB消息,消息参数包括打印作业ID,Spice代理将SPICE_VP_CANCEL_JOB消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_CANCEL_JOB消息后,调用CUPS接口按照打印作业ID从物理打印机取消打印作业,查询打印作业的状态后将查询结果通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟机的CUPS系统最终收到取消打印作业操作的执行结果。
进一步的,所述虚拟打印机包括KVP打印机,所述KVP打印机包括:
CUPS接口模块,用于KVP打印机和CUPS接口层的交互;
Spice代理接口模块,用于KVP打印机和Spice代理接口的交互;
KVP打印参数控制模块,用于收到SPICE_VP_INIT和SPICE_VP_RECONN消息时,根据客户端连接的物理打印机参数设置虚拟打印机的参数;
打印文件生成模块,用于接收来自CUPS的打印请求,按照预定义的中间格式生成打印文件,并把生成的中间格式打印文件保存到文件缓存目录中;
打印参数生成模块,用于生成在物理打印机打印时的参数,若物理打印机和CUPS参数设置不匹配,则检测差异并生成符合物理打印机参数约束的打印参数列表;
打印机和打印状态查询模块,用于收到CUPS接口的状态查询请求时,发出SPICE_VP_QUERY_STATE和SPICE_VP_QUERY_JOB_STATE消息,查询客户端连接的物理打印机及其打印任务的状态,并把状态返回给CUPS接口。
本发明还提出一种基于扩展spice协议的打印机虚拟化装置,包括通过网络互相连接的物理服务器与终端,所述物理服务器的操作系统的Qemu进程中内置Spice协议的服务端Spice服务端,每个Qemu进程里面启动了一个虚拟机且同一个虚拟机的操作系统中设有支持CUPS接口的虚拟打印机驱动与Spice代理,所述终端操作系统上运行了云桌面客户端软件包括Spice协议的客户端Spice客户端,所述虚拟打印机驱动与Spice代理之间通过标准的进程间通信接口进行通信,Spice代理通过虚拟机中的虚拟串口设备和Spice服务端通信,Spice客户端通过支持Spice协议的打印机虚拟化通道和物理打印机通信,并通过CUPS环境提供的接口和物理打印机解耦,使得虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信。
与现有技术相比,本发明的优点在于:
本发明在虚拟机中安装兼容CUPS接口的虚拟打印机驱动,同时还在Spice协议中扩展了不同的消息类型,从而虚拟打印机可以使用扩展Spice协议把要打印的数据文件和参数发送到客户端。
本发明在虚拟机中的虚拟打印机只和Spice代理通信,二者在同一个虚拟机中,可以通过进程间通信机制实现通信。Spice代理通过Spice服务端和客户端的Spice客户端通信,最终和客户端的物理打印机通信。因此虚拟打印机和物理打印机之间只能通过Spice代理 、Spice服务端、Spice客户端进行间接通信,它们之间的通信遵循Spice协议的规范,从而避免了虚拟机和客户端所在终端的直接通信,提高了系统的安全性和网络的可靠性。
附图说明
图1为典型安全云桌面部署网络架构图。
图2为本发明实施例的方法流程图。
图3为本发明实施例中虚拟打印机在虚拟机中的位置描述示意图。
图4为本发明实施例中KVP打印机架构示意图。
图5为本发明实施例中SPICE_VP_INIT消息的处理流程。
图6为本发明实施例中SPICE_VP_DISCONN消息的处理流程。
图7为本发明实施例中SPICE_VP_RECONN消息的处理流程。
图8为本发明实施例中SPICE_VP_QUERY_STATE消息的处理流程。
图9为本发明实施例中SPICE_VP_QUERY_JOB_STATE消息的处理流程。
图10为本发明实施例中SPICE_VP_SUBMIT_JOB消息的处理流程。
图11为本发明实施例的装置的结构示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
在介绍具体实施例之前,先对于相关概念进行说明。
云桌面技术:虚拟化技术、云计算技术、桌面操作系统技术的结合带来了全新的资源整合和使用模式,虚拟化技术提供的资源按需分配与调度能力,可以提高云计算资源的利用率,提升云计算服务的服务质量,并且可以提供高可用、负载均衡等增值服务,并降低云计算中心的总体拥有成本。云计算技术可以以虚拟机或容器为单位按需的向客户或租户提供虚拟计算资源,通过适当的资源超售,在保证用户服务质量的前提下,保障用户的用户体验,提高系统的可靠性、安全性、运维能力。当云计算提供的计算资源为可图形化展示的桌面操作系统时,桌面操作系统的用户不再需要本地电脑也可以完成日常办公工作,这就是云桌面技术的使用场景。
图1为典型安全云桌面部署网络架构图,是典型的安全云桌面的使用模式。本架构中包含若干台物理服务器,每台物理服务器上可以运行若干个虚拟机,为简单描述,本图中只画出了一台物理服务器。若干台物理服务和若干个终端通过路由器或者交换机连接在一套网络中,命名为物理网络1。为简单起见,本图中只画出了使用路由器的3层网络场景,实际上,对于使用交换机的二层网络,本场景仍然适用。在本图的服务器上,运行了4台虚拟机,每台虚拟机都拥有一个虚拟网卡,每两台虚拟机的虚拟网卡通过虚拟路由进行互联,即:虚拟机1和虚拟机2通过虚拟路由器1互联,命名为虚拟网络1;虚拟机3和虚拟机4通过虚拟路由器2互联,命名为虚拟网络2。物理网络1、虚拟网络1、虚拟网络2之间网络直接不互通。终端1、终端2、终端3、终端4可以通过Spice协议访问虚拟机1、虚拟机2、虚拟机3、虚拟机4,Spice协议报文通过物理网络1和虚拟机进行交互访问。因此,终端设备和虚拟机设备不能通过虚拟机的虚拟网络接口通信,达到的安全隔离的效果。
设备透传技术:设备透传技术把连接在客户端的打印机(可以是USB接口打印机、串口打印机、并口打印机)直接重定向到运行远程服务器上的客户虚拟机中,在虚拟机中安装对应打印机驱动程序,从而实现了在远程虚拟机中使用客户端本地打印机的功能。但是,这种直接透传的方法存在性能局限性,以USB接口打印机为例子,设备驱动程序在打印文件时,需要把文件数据转换成打印机可以识别的RAW数据,该数据具有精度高的优势,但是数据量较大,而这些数据需要按照透传协议转换成USB报文并且在网络中传输到客户端,再在客户端通过USB接口下发到USB打印机中。因此,在打印过程中,需要产生大量的数据传输,导致远程虚拟机中打印文件的延迟较高,尤其在打印大文件时,可能会产生10倍左右的打印延迟。
Spice协议:Spice协议可以建立一种客户端到远程虚拟机OS的通信通道,通信的一端是客户端Spice协议中的Spice客户端(Spice Client),另一端是运行在虚拟机中的Spice代理(Spice Vdagent),Spice虚拟桌面代理通过Qemu提供的虚拟串口设备和Spice客户端通信,串口的后端backend是Spice 服务端(Spice Server)提供的Spice 端口(SpicePort)通道。因此,可以扩展Spice协议,在虚拟机中加入面向Spice协议的虚拟打印机,在客户端的Spice客户端中加入Spice协议的解析模块,把需要打印的任务调度到物理打印机中打印。
微软技术文档“与你的虚拟机共享设备”https://learn.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/user-guide/enhanced-session-mode提出了一种基于网络打印机的虚拟机中打印的技术和方法,但是,该方法需要在网络打印机和客户端之间建立直接网络连接,不适合虚拟机到打印机客户端没有直接网络连接的场景。
已申请在公开专利“一种打印数据重定向方法及其打印机重定向系统”(CN115686396A)公开了一种打印数据重定向方法,但是服务端的打印代理需要通过本地网络把打印数据发送到网络打印机,不适合虚拟机到打印机客户端没有直接网络连接的场景。
已申请在公开专利“一种半虚拟化打印方法及装置、电子设备”(CN115857841A)公开了一种半虚拟化打印方法及装 置、电子设备,该专利把发起打印请求的设备称为第一设备,把负责打印的设备称为第二设备,但是,该专利需要在第一设备和第二设备之间通过网络传输打印数据,不适合虚拟机到打印机客户端没有直接网络连接的场景。
已申请在公开专利“打印管理方法、装置、存储介质和电子设备”(CN114942734A)公开了一种根据用户权限和位置信息自动添加用户可用的打印机的方法,利用通用驱动以支持大量的网络打印机,解决了诸多打印机使用和管理上的难题,但是,该专利需要在打印任务和网络打印机之间传输数据,不适合虚拟机到打印机客户端没有直接网络连接的场景。
国内授权专利“基于桌面虚拟化技术的打印机映射方法及系统”(CN104394290B)提供了一种基于桌面虚拟化技术的打印机映射方法及系统,包括:虚拟桌面服务器、虚拟机及与虚拟机器建立数据连接的终端设备,终端设备上安装有VRS服务器模块及打印机驱动模块,虚拟机上安装有一VRS客户端模块,用于将虚拟机打印指令信息发送给VRS服务器模块。但是,该方法需要建立虚拟机打印机和VRS服务器的直接通信,不适合虚拟机到打印机客户端没有直接网络连接的场景。
已申请在公开专利“基于桌面虚拟化技术的网络打印方法、介质和装置”(CN113934379A)公开了一种网络打印方法。该方法包括由虚拟桌面服务器执行以下步骤:获取网络打印机的网络地址;向虚拟桌面终端设备发送网络打印机的网络地址,该虚拟桌面终端设备通过虚拟桌面应用访问由虚拟桌面服务器提供的虚拟机;响应于在虚拟机内接收到的打印指令,将打印指令和待打印作业转换为网络打印机可读的打印数据流;以及向虚拟桌面终端设备发送打印数据流。但是,该方法需要建立虚拟机和网络打印机的直接通信,不适合虚拟机到打印机客户端没有直接网络连接的场景。
已申请在公开专利“一种基于Windows应用虚拟化的打印方法”(CN112612431A)公开了一种基于应用虚拟化的网络打印方法,该方法需要通过RDP通道把打印文件从服务器传输到打印机客户机,需要建立虚拟机和网络打印机的直接通信,不适合虚拟机到打印机客户端没有直接网络连接的场景。
已申请在公开专利“打印处理方法、虚拟机、虚拟机管理装置、设备及系统”(CN115328409A)公开了一种虚拟打印机配置方法,当用户更换办公地址或者目标终端时,能够通过终端的标识数据和预先设置的打印策略,在打印策略中查询得到对应的预先与标识数据关联的打印机配置数据,将用户原先配置好的打印机配置数据发送至虚拟机中进行配置。该专利主要涉及虚拟打印机的控制流,不涉及虚拟打印机的数据流。
已申请在公开专利“一种在云桌面打印文件的方法及设备”(CN116400872A)公开了一种在云桌面中打印文件的方法,该方法的核心是本地虚拟打印机压缩每个被打印页面的图片并发送给客户端,以使客户端解析解压缩后的每个被打印页面的图片,根据打印参数将解析的每个被打印页面绘制到本地虚拟打印机映射的打印机。但是,该方法需要建立虚拟机和网络打印机的直接通信,不适合虚拟机到打印机客户端没有直接网络连接的场景。
美国授权专利“HYPERVISOR PRINTER EMULATION FOR VIRTUAL MACHINES”(US9990217B2)公开了一种基于VMM的虚拟打印机配置方法,VMM提供了一个软件模拟的虚拟打印机设备给虚拟机,虚拟机可以自动安装相应的驱动程序,并执行打印任务,打印的数据最终以图片的形式由虚拟打印机后端保存到服务器上,该专利主要涉及虚拟打印机设计和管理,没有说明虚拟打印机产生的数据传输到物理打印机的方式和方法。
实施例一
本实施例提出一种基于扩展spice协议的打印机虚拟化方法,面向图1所示的网络架构。本实施例的方法运行的目标环境包括:
(1)一台物理服务器,该物理服务器上可以运行多个虚拟机,虚拟机之间可以通过虚拟网络进行通信,但虚拟机不可以直接和物理机的物理网络通信。因为考虑到安全性,客户端和虚拟机进行直接网络通信的情况在大部分数据中心是被禁止的。
(2)一个客户端,客户端可以是PC或者嵌入式盒子设备,客户端可以连接显示器、鼠标、键盘等设备,客户端可以有USB等扩展接口,可以连接打印机、摄像头、USB存储等设备,客户端还可以拥有物理网口,该物理网口可以和服务器的物理网口在同一网络。
(3)一套物理网络,该网络可以包含多个物理服务器和多个客户端,该网络可以是二层网络也可以是三层网络。
(4)一个物理打印机设备,该打印机设备连接在客户端上,可以是USB接口打印机、也可以是并口或串口等其它接口打印机,只要客户端接口支持并且驱动程序可以正常使用,物理打印机就符合虚拟打印机的功能要求。
本实施例中,典型安全云桌面需要添加或扩展的模块包括:
(1)KVP打印机。KVP是麒麟虚拟打印机(Kylin Virtual Printer)的简称,KVP一种兼容操作系统打印机驱动接口的虚拟打印机驱动程序,该驱动程序可以使用扩展Spice协议把要打印的数据文件和参数发送到客户端。
(2)Spice Vdagent。Spice虚拟桌面代理(Spice Virtual Desktop Agent,SpiceVdagent)本实施例中简称为Spice代理,是Spice协议在虚拟机中的代理程序,该程序可以通过虚拟串口设备和Spice Server以及Spice Client库进行通信。
(3)Spice Server。Spice 服务端(Spice Server)是Spice协议的服务端,SpiceServer负责显示数据的生成,透传设备的数据转发,虚拟串口数据的转发,数据格式的解析,鼠标、键盘、声音等设备的转发,打印机虚拟化功能数据解析和转发等功能。
(4)Spice Client。Spice客户端(Spice Client)是Spice协议的客户端,SpiceClient负责Spice协议和客户端的交互,包括各个通道数据的处理,例如显示通道、USB透传通道、声音通道、鼠标键盘通道、虚拟打印机通道等。
如图2所示,本实施例的方法包括以下步骤:
S101)将支持CUPS接口的虚拟打印机驱动与Spice代理(Spice Vdagent)配置在服务器的同一个虚拟机中,并扩展spice协议消息的类型;
S102)虚拟打印机与客户端的物理打印机之间依次通过Spice代理(SpiceVdagent) 、服务器的Spice 服务端(Spice Server)、客户端的Spice客户端(SpiceClient)进行spice协议消息的间接通信,其中虚拟打印机驱动与Spice代理(SpiceVdagent)之间通过标准的进程间通信接口进行通信,Spice代理(Spice Vdagent)通过Spice 服务端(Spice Server)和Spice客户端(Spice Client)通信,Spice客户端(SpiceClient)通过支持Spice协议的打印机虚拟化通道和物理打印机通信,并通过CUPS环境提供的接口和物理打印机解耦。
上述步骤采用扩展Spice协议的方式,在虚拟机中加入符合操作系统打印机驱动标准的虚拟打印机驱动,虚拟打印机可以把需要把打印的数据和打印参数通过扩展Spice协议发送到物理打印机所在的客户端,再通过客户端的物理打印机驱动进行打印。
本实施例的步骤S101中,扩展spice协议消息的类型时,需要在Spice协议中扩充如下的7类消息类型,其中VP是虚拟打印机(Virtual Printer)的简称:
(1)SPICE_VP_INIT。SPICE协议初始化的时候,Spice客户端(Spice Client)会发送该消息给虚拟打印机。该消息的主要执行流程是,Spice客户端(Spice Client)查询本地连接的物理打印机状态,然后通过Spice服务端(Spice Server) 把状态发送给Spice代理(Spice Vdagent),Spice代理(Spice Vdagent)再发送给KVP打印机,KVP打印机根据物理打印机的打印参数设置虚拟打印机的打印参数,然后把KVP打印机设置成使能状态。
(2)SPICE_VP_DISCONN。当物理打印机断开的时候,Spice客户端(Spice Client)会发送该消息给虚拟打印机。例如,当物理打印机断电或者数据连接断开时,Spice客户端(Spice Client)会检测到物理打印机断开连接,然后Spice客户端(Spice Client)把该信息通过Spice服务端(Spice Server)发送给Spice代理(Spice Vdagent),Spice代理(SpiceVdagent)再把消息转发给KVP打印机,KVP打印机收到消息后,把打印机状态设置成非使能状态。
(3)SPICE_VP_RECONN。当物理打印机断开后再次连接到客户端的时候,Spice客户端(Spice Client)会发送该消息给虚拟打印机。当物理打印机重新连接到客户端时,客户端操作系统的事件检测机制会发现打印机连接事件,Spice客户端(Spice Client)得到通知后,把该消息通过Spice服务端(Spice Server)发送给Spice代理(Spice Vdagent),Spice代理(Spice Vdagent)再把消息转发给KVP打印机,KVP打印机收到消息后,把打印机状态设置成使能。
(4)SPICE_VP_QUERY_STATE。该消息的功能是供虚拟打印机查询物理打印机状态,虚拟打印机需要具备查询物理打印机状态的功能,例如当用户查询虚拟打印机属性的时候,虚拟打印机需要根据物理打印机的实际状态返回相关参数,该消息的执行路径为,虚拟打印机发出SPICE_VP_QUERY_STATE消息,Spice代理(Spice Vdagent)收到消息后,通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(SpiceClient)收到消息后,调用物理打印机的状态查询接口,例如通过CUPS接口查询物理打印机状态,Spice客户端(Spice Client)收到来自物理打印机的回复后,再通过Spice服务端(Spice Server)把消息返回给Spice代理(Spice Vdagent),虚拟打印机最后通过Spice代理(Spice Vdagent)获得物理打印机的状态。
(5)SPICE_VP_QUERY_JOB_STATE。该消息的功能是供虚拟打印机查询打印作业的状态。该消息的执行路径为,虚拟打印机发出SPICE_VP_QUERY_JOB_STATE消息,参数包括打印作业ID、打印文件名等。Spice代理(Spice Vdagent)收到消息后,通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(Spice Client)收到消息后,调用打印作业的状态查询接口,例如通过CUPS接口查询打印作业的状态,Spice客户端(Spice Client)收到来自CUPS的回复后,再通过Spice服务端(Spice Server)把消息返回给Spice代理(Spice Vdagent),虚拟打印机最后通过Spice代理(Spice Vdagent)获得打印作业的状态。
(6)SPICE_VP_SUBMIT_JOB。该消息的功能是供虚拟打印机提交打印任务到物理打印机。SPICE_VP_SUBMIT_JOB消息主要参数包括:打印作业ID、打印文件名、文件大小、单双面、页面大小等。该消息的执行路径为,虚拟打印机发出该消息,Spice代理(SpiceVdagent)收到消息后,通过Spice服务端(Spice Server)发送给Spice客户端(SpiceClient),Spice客户端(Spice Client)收到消息后,调用CUPS接口提交打印作业到物理打印机,然后返回状态信息给Spice客户端(Spice Client),Spice客户端(Spice Client)收到来自CUPS的回复后,再通过Spice服务端(Spice Server)把执行状态返回给Spice代理(Spice Vdagent),虚拟打印机最后通过Spice代理(Spice Vdagent)获得返回的打印作业状态。
(7)SPICE_VP_CANCEL_JOB。该消息的功能是供虚拟打印机从物理打印机取消待打印或打印中的作业。SPICE_VP_CANCEL_JOB消息主要参数包括:打印作业ID。该消息的执行路径为,虚拟打印机发出该消息,Spice代理(Spice Vdagent)收到消息后,通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(Spice Client)收到消息后,调用CUPS接口从物理打印机取消打印作业,然后返回状态信息给Spice客户端(Spice Client),Spice客户端(Spice Client)收到来自CUPS的回复后,再通过Spice服务端(Spice Server)把执行状态返回给Spice代理(Spice Vdagent),虚拟打印机最后通过Spice代理(Spice Vdagent)获得返回的本次取消打印作业操作的执行结果。
本实施例的步骤S101中,支持CUPS接口的虚拟打印机驱动采用KVP虚拟打印机,如图3所示,KVP虚拟打印机是一个遵循CUPS协议的规范的虚拟打印机驱动。在虚拟机中,浏览器、编辑器、阅读器等工具可以通过CUPS接口进行打印,CUPS接口向上对接了各种有打印需求的工具,向下对接各种打印机驱动,包括物理打印机驱动和虚拟打印机驱动。物理打印机驱动包括各个打印机厂商的打印机驱动,例如:惠普、东芝、联想等厂商。虚拟打印机驱动包括:虚拟PDF打印机、KVP虚拟打印机等。在本图中,CUPS接口对接了3个打印机驱动:PDF打印机、其它打印机、KVP打印机。PDF打印机和KVP打印机是虚拟打印机驱动,其它打印机是物理打印机器驱动,物理打印机可以通过Spice协议支持USB透传方式,把终端连接的物理打印机以USB协议透传的方式透传到虚拟机中,在虚拟机中直接按照对应的物理打印机驱动程序,就可以使用。PDF打印机把需要打印的文件转换成PDF文件。KVP打印机把需要打印的文件通过Spice协议传输到终端,并由终端进行打印。
如图4所示,KVP打印机本身是一个符合CUPS接口规范的打印机驱动,又称为KVP虚拟打印机、KVP打印机驱动,其主要由以下六个模块组成:
CUPS接口模块,用于KVP打印机和CUPS接口层的交互,需要实现打印机的注册接口,打印接口等;
Spice代理(Spice Vdagent)接口模块,用于KVP打印机和Spice代理(SpiceVdagent)接口的交互,二者的交互采用进程间通信的方式,通信方向为双向,二者之间通信具有一定的报文格式,便于区分数据报文和控制报文;
KVP打印参数控制模块,用于收到SPICE_VP_INIT和SPICE_VP_RECONN消息时,根据客户端连接的物理打印机参数设置虚拟打印机的参数;
打印文件生成模块,用于接收来自CUPS的打印请求,按照预定义的中间格式生成打印文件,并把生成的中间格式打印文件保存到文件缓存目录中;
打印参数生成模块,用于生成在物理打印机打印时的参数,包括单双面、页面大小等,某些时候会存在物理打印机和CUPS参数设置不匹配的情况,例如CUPS设置的A4纸大小和物理打印机设置的A4纸大小存在细微差异,若物理打印机和CUPS参数设置不匹配,则打印参数生成模块检测差异并生成符合物理打印机参数约束的打印参数列表;
打印机和打印状态查询模块,用于收到CUPS接口的状态查询请求时,发出SPICE_VP_QUERY_STATE和SPICE_VP_QUERY_JOB_STATE消息,查询客户端连接的物理打印机及其打印任务的状态,并把状态返回给CUPS接口。
本实施例的步骤S102中,KVP打印机与客户端的物理打印机之间依次通过Spice代理(Spice Vdagent) 、服务器的Spice服务端(Spice Server)、客户端的Spice客户端(Spice Client)进行spice协议消息的间接通信时,包括:
1)SPICE_VP_INIT消息的处理流程
如图5所示,该消息的处理涉及5个主要模块,物理打印机、Spice客户端(SpiceClient)、Spice服务端(Spice Server)、Spice代理(Spice Vdagent)、KVP打印机。因为Spice服务端(Spice Server)只负责Spice客户端(Spice Client)和Spice代理(SpiceVdagent)的消息传递,所以处于简化复杂度的考虑,在消息处理流程图里面并没有画出Spice服务端(Spice Server)。具体包括:
当Spice客户端(Spice客户端位于SpiceGtk包中)初始化时,会调用设备查询接口查询本地连接的物理打印机连接状态,当发现物理打印机时,就会调用物理打印机的查询接口获取物理打印机的配置参数,物理打印机把配置参数传给Spice客户端(SpiceClient)后,Spice客户端(Spice Client)生成对应的SPICE_VP_INIT消息(物理打印机的配置参数)并通过Spice服务端(Spice Server)发送给Spice代理(Spice Vdagent),Spice代理(Spice Vdagent)再转发给KVP打印机,KVP打印机根据SPICE_VP_INIT消息中物理打印机的参数进行参数配置并将KVP打印机状态设置为使能状态。使能表示虚拟打印机可以接收来自CUPS的打印任务。
2)SPICE_VP_DISCONN消息的处理流程
如图6所示,该消息的处理涉及5个主要模块,物理打印机、Spice客户端(SpiceClient)、Spice服务端(Spice Server)、Spice代理(Spice Vdagent)、KVP打印机。为简化起见,在消息处理流程图里面并没有画出Spice服务端(Spice Server)。具体包括:
当物理打印机失去连接时,例如打印机断电、数据线断开,Spice客户端(SpiceClient)会检测到打印机断开事件,具体检测方法可以是:对于USB设备,可以是基于udev的事件通知机制,对于串口或者并口设备,可以采用定期轮询的方式。若Spice客户端(SpiceClient)检测到打印机断开事件,Spice客户端(Spice Client)生成对应的SPICE_VP_DISCONN消息(打印机断开消息)并通过Spice服务端(Spice Server)发送给Spice代理(Spice Vdagent),Spice代理(Spice Vdagent)再转发给KVP打印机,KVP打印机根据SPICE_VP_INIT消息中的打印机断开事件将KVP打印机状态更新为非使能状态。
3)SPICE_VP_RECONN消息的处理流程
如图7所示,该消息的处理涉及5个主要模块,物理打印机、Spice客户端(SpiceClient)、Spice服务端(Spice Server)、Spice代理(Spice Vdagent)、KVP打印机。为简化起见,在消息处理流程图里面并没有画出Spice服务端(Spice Server)。具体包括:
当物理打印机失去连接后,再重新连接到终端,或者Spice初始化时没有连接物理打印机,初始化完成后,物理打印机再连接到终端上,Spice客户端(Spice Client)就会发出SPICE_VP_RECONN消息。当物理打印机重新连接到客户端时,物理打印机上报连接事件,若Spice客户端(Spice Client)获取物理打印机上报的连接事件,则通过接口获取物理打印机的配置参数,然后生成对应的SPICE_VP_RECONN消息(物理打印机的配置参数)并通过Spice服务端(Spice Server)发送给Spice代理(Spice Vdagent),Spice代理(SpiceVdagent)再转发给KVP打印机,KVP打印机根据SPICE_VP_RECONN消息中物理打印机的参数进行参数配置并将KVP打印机状态设置为使能状态。
4)SPICE_VP_QUERY_STATE消息的处理流程
如图8所示,该消息的处理涉及5个主要模块,物理打印机、Spice客户端(SpiceClient)、Spice服务端(Spice Server)、Spice代理(Spice Vdagent)、KVP打印机。为简化起见,在消息处理流程图里面并没有画出Spice服务端(Spice Server)。具体包括:
SPICE_VP_QUERY_STATE消息的发出时机为虚拟打印机需要查询物理打印机的状态。当用户查询KVP打印机属性时,首先,KVP打印机发出SPICE_VP_QUERY_STATE消息(查询打印机状态),然后Spice代理(Spice Vdagent)将SPICE_VP_QUERY_STATE消息通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(Spice Client)收到SPICE_VP_QUERY_STATE消息后,调用CUPS接口向物理打印机发出查询状态的请求,然后接收物理打印机反馈的当前状态信息,Spice客户端(Spice Client)获取物理打印机返回的状态信息后,将物理打印机的状态信息通过Spice服务端(Spice Server)发送给Spice代理(Spice Vdagent),Spice代理(Spice Vdagent)再转发给KVP打印机,KVP打印机根据物理打印机的状态信息返回相关参数。
5)SPICE_VP_QUERY_JOB_STATE消息的处理流程
如图9所示,该消息的处理涉及6个主要模块,物理打印机、CUPS、Spice客户端(Spice Client)、Spice服务端(Spice Server)、Spice代理(Spice Vdagent)、KVP打印机。为简化起见,在消息处理流程图里面并没有画出Spice服务端(Spice Server)。具体包括:
当虚拟机的用户需要查看打印任务的运行状态时,KVP打印机发出SPICE_VP_QUERY_JOB_STATE消息(查询打印作业状态的消息),消息参数包括打印作业ID和打印作业的文件名称,Spice代理(Spice Vdagent)将SPICE_VP_QUERY_JOB_STATE消息通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(Spice Client)收到SPICE_VP_QUERY_JOB_STATE消息后,通过客户端的CUPS接口按照消息参数查询打印作业的状态,CUPS系统通过打印机的驱动查询待打印作业的情况,并且把结果返回给终端的CUPS系统;CUPS系统再把结果返回给Spice客户端(Spice Client),然后Spice客户端(Spice Client)将查询结果通过Spice服务端(Spice Server)发送给Spice代理(SpiceVdagent),Spice代理(Spice Vdagent)再转发给KVP打印机,KVP打印机根据查询结果返回打印作业的状态。
6)SPICE_VP_SUBMIT_JOB消息的处理流程
如图10所示,该消息的处理涉及6个主要模块,物理打印机、CUPS、Spice客户端(Spice Client)、Spice服务端(Spice Server)、Spice代理(Spice Vdagent)、KVP打印机。为简化起见,在消息处理流程图里面并没有画出Spice服务端(Spice Server)。具体包括:
当虚拟机的CUPS系统调用KVP打印机打印文件时,KVP打印机发出SPICE_VP_SUBMIT_JOB消息,消息参数包括打印作业的配置信息包括:打印作业ID、打印文件名、文件大小、单双面、页面大小等,Spice代理(Spice Vdagent)将SPICE_VP_SUBMIT_JOB消息通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(SpiceClient)收到SPICE_VP_SUBMIT_JOB消息后,使用打印作业的配置信息设置CUPS系统的打印参数;
KVP打印机发出待打印文件,Spice代理(Spice Vdagent)将待打印文件消息通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(SpiceClient) 通过CUPS接口综合打印参数和待打印文件后发送给物理打印机进行打印;
物理打印机打印完成后,打印结果依次通过CUPS接口、Spice客户端(SpiceClient)、Spice服务端(Spice Server)、Spice代理(Spice Vdagent)到达KVP打印机,虚拟机的CUPS系统最终收到打印文件的执行结果,执行结果可能是:OK、FAILED、CANCEL、RERTY等,分别代表打印成功,打印失败,打印取消,需要重新打印等状态。
7)SPICE_VP_CANCEL_JOB消息的处理流程
SPICE_VP_CANCEL_JOB消息的执行流程类似于SPICE_VP_QUERY_JOB_STATE,具体包括:
当虚拟机的CUPS系统取消KVP打印机的打印作业时,KVP打印机发出SPICE_VP_CANCEL_JOB消息,消息参数包括打印作业ID,Spice代理(Spice Vdagent)将SPICE_VP_CANCEL_JOB消息通过Spice服务端(Spice Server)发送给Spice客户端(Spice Client),Spice客户端(Spice Client)收到SPICE_VP_CANCEL_JOB消息后,调用CUPS接口按照打印作业ID从物理打印机取消打印作业,查询打印作业的状态后将查询结果通过Spice服务端(Spice Server)发送给Spice代理(Spice Vdagent),Spice代理(Spice Vdagent)再转发给KVP打印机,虚拟机的CUPS系统最终收到取消打印作业操作的执行结果。
实施例二
本实施例提出一种基于扩展spice协议的打印机虚拟化装置,如图11所示,包括通过网络互相连接的物理服务器与终端,所述物理服务器的操作系统的Qemu进程中内置Spice协议的服务端Spice服务端(Spice Server),每个Qemu进程里面启动了一个虚拟机且同一个虚拟机的操作系统中设有支持CUPS接口的虚拟打印机驱动与Spice代理(SpiceVdagent),所述终端操作系统上运行了云桌面客户端软件包括Spice协议的客户端Spice客户端(Spice Client),所述虚拟打印机驱动与Spice代理(Spice Vdagent)之间通过标准的进程间通信接口进行通信,Spice代理(Spice Vdagent)通过虚拟机中的虚拟串口设备和Spice服务端(Spice Server)通信,Spice客户端(Spice Client)通过支持Spice协议的打印机虚拟化通道和物理打印机通信,并通过CUPS环境提供的接口和物理打印机解耦,使得虚拟打印机与客户端的物理打印机之间依次通过Spice代理(Spice Vdagent) 、服务器的Spice服务端(Spice Server)、客户端的Spice客户端(Spice Client)进行spice协议消息的间接通信。
图11中,左侧是物理服务器,右侧是终端(包括PC和盒子),二者之间通过网络进行连接,该网络可以是二层网络,也可以是三层网络,可以是以太网,也可以是光纤网络。服务器包括CPU、内存、硬盘、网络接口等基本组件,服务器上运行操作系统,操作系统上运行多个Qemu进程,每个Qemu进程里面启动了一个虚拟机。在Qemu进程中,内置Spice协议的服务端,即Spice服务端(Spice Server),本实施例需要在Spice服务端(Spice Server)中进行功能扩展,以满足打印机虚拟化的要求。
本实施例同样在虚拟机的操作系统中加入了KVP打印机驱动程序和Spice代理(Spice Vdagent),其中KVP打印机驱动程序是支持CUPS接口的打印机驱动,Spice代理(Spice Vdagent)是Spice在虚拟机中的代理组件。Spice代理(Spice Vdagent)可以通过虚拟机中的虚拟串口设备(Spice Port类型)和Spice服务端(Spice Server)通信。KVP打印机驱动程序和Spice代理(Spice Vdagent)在同一个虚拟机中,二者之间通过标准的进程间通信接口进行通信,可以包括:共享内存、Socket等。KVP打印机驱动程序和Spice代理(SpiceVdagent)也需要做功能扩展,以满足打印机虚拟化的要求。
本实施例的终端设备包括CPU、内存、硬盘、网络接口、显示接口、USB接口等,终端设备的网络接口连接到互联网络中,并且可以同服务器的网络接口通信。显示接口连接了外接显示器,在本实施例中,并不限制外接显示器的数目,通常情况下,一个显示接口可以外接一个显示器,多个外接接口可以连接多个显示器。USB接口连接了鼠标、键盘、打印机等设备。在图11中,鼠标、键盘、打印机等设备通过USB接口连接到终端,在实际使用中,鼠标、键盘、打印机等设备也可以通过PS/2、并口、串口等设备接口和终端连接,本实施例并不限制设备的接口类型。
在图11中,USB接口上连接了两个打印机设备,其中打印机1以传统的USB设备透传模式连接到虚拟机中,打印机2以打印机虚拟化的方式连接到虚拟机中。在终端设备上,运行终端操作系统,终端操作系统上运行了云桌面客户端软件,云桌面客户端软件主要包括两个重要模块:云桌面显示窗口、Spice客户端(Spice Client)。
云桌面显示窗口用来显示远程虚拟机桌面的内容,云桌面显示窗口的内容最终通过显示接口显示到显示器上。
Spice客户端(Spice Client)是Spice协议的客户端,主要包含四个模块:声音、Cdrom、鼠标、键盘透传通道,USB透传通道,打印机虚拟化通道,显示协议通道,其中:
声音、Cdrom、鼠标、键盘透传通道主要负责声音和Cdrom内容和数据的传输,鼠标键盘事件的传输;
USB透传通道主要负责把USB设备以USB协议透传的模式透传到远程虚拟机中,使用USB透传模式透传设备时,远程虚拟机可以像在本地一样使用透传的USB设备;
打印机虚拟化通道即为本实施例所扩展的虚拟打印机设备的Spice协议支持通道,负责面向虚拟打印机业务的Spice协议的处理;
显示协议通道负责把远程虚拟机桌面内容在本地窗口中显示,显示协议通道支持图像的区域更新、H264图像压缩、网络带宽自适应压缩等功能。
在终端的虚拟机中,连接了两个打印机设备,打印机1采用USB透传模式传输到远程虚拟机中,打印机2采用虚拟打印机的方式连接到远程虚拟机中,当Spice客户端(SpiceClient)和本地打印机2交互式,一般通过CUPS环境提供的接口,这样可以把Spice客户端(Spice Client)和物理打印机解耦,可以让更多种类的打印机以虚拟化的方式在远程虚拟机中使用。
综上所述,本发明需要在虚拟机中安装KVP打印机驱动,该驱动兼容CUPS接口。虚拟机开机时,KVP打印机会和Spice代理(Spice Vdagent)建立连接,并从Spice代理(SpiceVdagent)中获取物理打印机的配置信息,配置自己的虚拟打印机参数。当客户端(或者客户端所在的终端)关闭时,且虚拟机仍在服务器中活跃时,Spice协议会失去连接,Spice代理(Spice Vdagent)会向KVP打印机发送消息,让打印机处于非使能状态。当客户端重新连接虚拟机时,Spice客户端(Spice Client)会发送SPICE_VP_INIT消息给KVP打印机,让KVP打印机处于使能状态。当客户端检测大物理打印机失去连接时,会发送SPICE_VP_DISCONN消息给KVP打印机。当物理打印机重新连接时,Spice客户端(Spice Client)会发送SPICE_VP_RECONN消息给KVP打印机。在虚拟机运行过程中,应用调用KVP打印机进行打印前,会发送SPICE_VP_QUERY_STATE消息到Spice客户端(Spice Client),来获取物理打印机的状态,确保打印任务正常执行。当用户需要监控具体打印任务的状态,KVP打印机会发送SPICE_VP_QUERY_JOB_STATE消息到客户端,Spice客户端(Spice Client)调用CUPS接口查询打印任务的状态并返回。当用户需要打印文件时,KVP打印机会发送SPICE_VP_SUBMIT_JOB消息到客户端,Spice客户端(Spice Client)调用CUPS接口取消打印任务。当客户需要取消打印作业时,KVP打印机会发送SPICE_VP_CANCEL_JOB消息到客户端,客户端调用CUPS或物理打印机接口取消打印任务。
虚拟机中的KVP打印机驱动只和Spice代理(Spice Vdagent)通信,二者在同一个虚拟机中,可以通过进程间通信机制实现通信。Spice代理(Spice Vdagent)通过Spice服务端(Spice Server)和客户端的Spice客户端(Spice Client)通信,最终和客户端的物理打印机通信。KVP打印机和物理打印机之间只能通过Spice代理(Spice Vdagent) 、Spice服务端(Spice Server)、Spice客户端(Spice Client)进行间接通信,它们之间的通信遵循Spice协议的规范,从而避免了虚拟机和客户端所在终端的直接通信,提高了系统的安全性和网络的可靠性。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

Claims (10)

1.一种基于扩展spice协议的打印机虚拟化方法,其特征在于,包括以下步骤:
将支持CUPS接口的虚拟打印机驱动与Spice代理配置在服务器的同一个虚拟机中,并扩展spice协议消息的类型;
虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信,其中虚拟打印机驱动与Spice代理之间通过标准的进程间通信接口进行通信,Spice代理通过Spice服务端和Spice客户端通信, Spice客户端通过支持Spice协议的打印机虚拟化通道和物理打印机通信,并通过CUPS环境提供的接口和物理打印机解耦。
2. 根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,扩展spice协议消息的类型时,包括扩展SPICE_VP_INIT消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_INIT消息的处理流程,具体包括:
当Spice客户端初始化时,查询本地连接的物理打印机连接状态并获取物理打印机的参数,然后生成对应的SPICE_VP_INIT消息并通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据SPICE_VP_INIT消息中物理打印机的参数进行参数配置并将虚拟打印机状态设置为使能状态。
3.根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,扩展spice协议消息的类型时,包括扩展SPICE_VP_DISCONN消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_DISCONN消息的处理流程,具体包括:
当物理打印机失去连接时,若Spice客户端检测到打印机断开事件,Spice客户端生成对应的SPICE_VP_DISCONN消息并通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据SPICE_VP_INIT消息中的打印机断开事件将虚拟打印机状态更新为非使能状态。
4. 根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,扩展spice协议消息的类型时,包括扩展SPICE_VP_RECONN消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_RECONN消息的处理流程,具体包括:
当物理打印机重新连接到客户端时,若Spice客户端获取物理打印机上报的连接事件,则获取物理打印机的参数,然后生成对应的SPICE_VP_RECONN消息并通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据SPICE_VP_RECONN消息中物理打印机的参数进行参数配置并将虚拟打印机状态设置为使能状态。
5. 根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,扩展spice协议消息的类型时,包括扩展SPICE_VP_QUERY_STATE消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_QUERY_STATE消息的处理流程,具体包括:
当用户查询虚拟打印机属性时,虚拟打印机发出SPICE_VP_QUERY_STATE消息,Spice代理将SPICE_VP_QUERY_STATE消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_QUERY_STATE消息后,调用CUPS接口获取物理打印机的状态后将物理打印机的状态通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据物理打印机的状态返回相关参数。
6. 根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,扩展spice协议消息的类型时,包括扩展SPICE_VP_QUERY_JOB_STATE消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_QUERY_JOB_STATE消息的处理流程,具体包括:
当用户查看打印任务的运行状态时,虚拟打印机发出SPICE_VP_QUERY_JOB_STATE消息,消息参数包括打印作业ID和打印作业的文件名称,Spice代理将SPICE_VP_QUERY_JOB_STATE消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_QUERY_JOB_STATE消息后,通过CUPS接口按照消息参数查询打印作业的状态后将查询结果通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟打印机根据查询结果返回打印作业的状态。
7. 根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,扩展spice协议消息的类型时,包括扩展SPICE_VP_SUBMIT_JOB消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_SUBMIT_JOB消息的处理流程,具体包括:
当虚拟机的CUPS系统调用虚拟打印机打印文件时,虚拟打印机发出SPICE_VP_SUBMIT_JOB消息,消息参数包括打印作业的配置信息,Spice代理将SPICE_VP_SUBMIT_JOB消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_SUBMIT_JOB消息后,使用打印作业的配置信息设置CUPS系统的打印参数;
虚拟打印机发出待打印文件,Spice代理将待打印文件消息通过Spice服务端发送给Spice客户端,Spice客户端 通过CUPS接口综合打印参数和待打印文件后发送给物理打印机进行打印;
物理打印机打印完成后,打印结果依次通过CUPS接口、Spice客户端、Spice服务端、Spice代理到达虚拟打印机,虚拟机的CUPS系统最终收到打印文件的执行结果。
8. 根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,扩展spice协议消息的类型时,包括扩展SPICE_VP_CANCEL_JOB消息,虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信时,包括SPICE_VP_CANCEL_JOB消息的处理流程,具体包括:
当虚拟机的CUPS系统取消虚拟打印机的打印作业时,虚拟打印机发出SPICE_VP_CANCEL_JOB消息,消息参数包括打印作业ID,Spice代理将SPICE_VP_CANCEL_JOB消息通过Spice服务端发送给Spice客户端,Spice客户端收到SPICE_VP_CANCEL_JOB消息后,调用CUPS接口按照打印作业ID从物理打印机取消打印作业,查询打印作业的状态后将查询结果通过Spice服务端发送给Spice代理,Spice代理再转发给虚拟打印机,虚拟机的CUPS系统最终收到取消打印作业操作的执行结果。
9.根据权利要求1所述的基于扩展spice协议的打印机虚拟化方法,其特征在于,所述虚拟打印机包括KVP打印机,所述KVP打印机包括:
CUPS接口模块,用于KVP打印机和CUPS接口层的交互;
Spice代理接口模块,用于KVP打印机和Spice代理接口的交互;
KVP打印参数控制模块,用于收到SPICE_VP_INIT和SPICE_VP_RECONN消息时,根据客户端连接的物理打印机参数设置虚拟打印机的参数;
打印文件生成模块,用于接收来自CUPS的打印请求,按照预定义的中间格式生成打印文件,并把生成的中间格式打印文件保存到文件缓存目录中;
打印参数生成模块,用于生成在物理打印机打印时的参数,若物理打印机和CUPS参数设置不匹配,则检测差异并生成符合物理打印机参数约束的打印参数列表;
打印机和打印状态查询模块,用于收到CUPS接口的状态查询请求时,发出SPICE_VP_QUERY_STATE和SPICE_VP_QUERY_JOB_STATE消息,查询客户端连接的物理打印机及其打印任务的状态,并把状态返回给CUPS接口。
10. 一种基于扩展spice协议的打印机虚拟化装置,其特征在于,包括通过网络互相连接的物理服务器与终端,所述物理服务器的操作系统的Qemu进程中内置Spice协议的Spice服务端,每个Qemu进程里面启动了一个虚拟机且同一个虚拟机的操作系统中设有支持CUPS接口的虚拟打印机驱动与Spice代理,所述终端操作系统上运行了云桌面客户端软件包括Spice协议的Spice客户端,所述虚拟打印机驱动与Spice代理之间通过标准的进程间通信接口进行通信,Spice代理通过虚拟机中的虚拟串口设备和Spice服务端通信,Spice客户端通过支持Spice协议的打印机虚拟化通道和物理打印机通信,并通过CUPS环境提供的接口和物理打印机解耦,使得虚拟打印机与客户端的物理打印机之间依次通过Spice代理 、服务器的Spice服务端、客户端的Spice客户端进行spice协议消息的间接通信。
CN202410295486.XA 2024-03-15 2024-03-15 基于扩展spice协议的打印机虚拟化方法和装置 Active CN117891413B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410295486.XA CN117891413B (zh) 2024-03-15 2024-03-15 基于扩展spice协议的打印机虚拟化方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410295486.XA CN117891413B (zh) 2024-03-15 2024-03-15 基于扩展spice协议的打印机虚拟化方法和装置

Publications (2)

Publication Number Publication Date
CN117891413A CN117891413A (zh) 2024-04-16
CN117891413B true CN117891413B (zh) 2024-05-14

Family

ID=90652150

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410295486.XA Active CN117891413B (zh) 2024-03-15 2024-03-15 基于扩展spice协议的打印机虚拟化方法和装置

Country Status (1)

Country Link
CN (1) CN117891413B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016155266A1 (zh) * 2015-03-27 2016-10-06 中兴通讯股份有限公司 虚拟桌面的数据共享方法和装置
US11262960B1 (en) * 2020-10-30 2022-03-01 Vmware, Inc. Cache management in a printing system in a virtualized computing environment
CN115686396A (zh) * 2022-11-07 2023-02-03 西安雷风电子科技有限公司 一种打印数据重定向方法及其打印机重定向系统
CN116400872A (zh) * 2023-03-31 2023-07-07 新华三技术有限公司 一种在云桌面打印文件的方法及设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100138829A1 (en) * 2008-12-01 2010-06-03 Vincent Hanquez Systems and Methods for Optimizing Configuration of a Virtual Machine Running At Least One Process
US8667153B2 (en) * 2010-07-07 2014-03-04 Red Hat Israel, Ltd. Using a virtual network interface to obtain access to resources

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016155266A1 (zh) * 2015-03-27 2016-10-06 中兴通讯股份有限公司 虚拟桌面的数据共享方法和装置
US11262960B1 (en) * 2020-10-30 2022-03-01 Vmware, Inc. Cache management in a printing system in a virtualized computing environment
CN115686396A (zh) * 2022-11-07 2023-02-03 西安雷风电子科技有限公司 一种打印数据重定向方法及其打印机重定向系统
CN116400872A (zh) * 2023-03-31 2023-07-07 新华三技术有限公司 一种在云桌面打印文件的方法及设备

Also Published As

Publication number Publication date
CN117891413A (zh) 2024-04-16

Similar Documents

Publication Publication Date Title
US9069503B2 (en) Apparatus, system, and method of output distribution, and recording medium storing output distribution control program
US8854663B2 (en) Dynamic print server generation in a distributed printing environment
JP3578714B2 (ja) ジョブトークンプリンタ割当システム
US8006287B2 (en) Network apparatus and control method therefor
US8526041B2 (en) Efficiently controlling a print output destination in association with an information processing apparatus that has issued a print request
US9069497B2 (en) Information processing apparatus having relay virtual printer and functional relay virtual printer
US7990558B2 (en) Information processing apparatus and data output management system to restrict printing operations
US8121954B2 (en) Information processor, method for controlling the same, and image forming system
US20020101600A1 (en) Augmented operating system printing architecture
JP5338496B2 (ja) 情報処理装置、プログラムおよび記録媒体
US9489153B2 (en) Print server system, method for controlling the same, and program
US8059294B2 (en) Image forming based on operation mode
US9110623B2 (en) Printing system, print relay server, method of controlling the server, and program
US10091380B1 (en) Systems and methods of implementing universal print drivers in a windows print architecture
US20050111030A1 (en) Hard copy imaging systems, print server systems, and print server connectivity methods
US8861008B2 (en) Bidirectional communication technique between an information processing apparatus and an image processing apparatus
CN117891413B (zh) 基于扩展spice协议的打印机虚拟化方法和装置
US9565058B2 (en) Method of connecting a device to a network, a device connecting system, and a program
JP4045800B2 (ja) プリントシステム及び方法
CN115686396A (zh) 一种打印数据重定向方法及其打印机重定向系统
JP4912093B2 (ja) 情報処理方法、情報処理装置、プログラム及び記憶媒体
JP2003022172A (ja) プリントサーバ装置およびその制御方法
JP2003256157A (ja) ターミナルサービスにおけるプリンタステータスモニタ方法及びプリンタステータスモニタプログラム
JP2007140663A (ja) 画像処理装置
JP2006163772A (ja) 情報処理装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant