1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
|
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<title>Introduction</title>
<para>
Spice is an open remote computing solution, providing client access to remote displays and devices (e.g. keyboard, mouse, audio).
At the moment, it's mainly used to get remote access to virtual machines. Spice provides a desktop-like user experience, while trying to
offload most of the intensive CPU and GPU tasks to the client.
The basic building blocks of Spice are:
</para>
<orderedlist>
<listitem><para><link linkend="spice_server">Spice Server</link></para></listitem>
<listitem><para><link linkend="spice_client">Spice Client</link></para></listitem>
<listitem><para>Spice Protocol</para></listitem>
</orderedlist>
<para>
The following sections provide basic information on Spice components and features, obtaining, building installing and using Spice.
</para>
<section>
<title>Spice and Spice-related Components</title>
<section xml:id="spice_server">
<title>Spice Server</title>
<para>
Spice server is implemented in libspice, a VDI pluggable library.
Currently, the main user of this library is QEMU. QEMU uses spice-server
to provide remote access to virtual machines through the Spice protocol.
Virtual Device Interface (VDI) defines a set of interfaces that provide
a standard way to publish virtual devices (e.g. display device, keyboard,
mouse) and enables different Spice components to interact with those
devices. On one side, the server communicates with the remote client
using the Spice protocol and on the other side, it interacts with the
VDI host application (e.g QEMU).
</para>
</section>
<section xml:id="spice_client">
<title>Spice Client</title>
<para>
The Spice client is a cross-platform (Linux and Windows)
which is used by the end user to access remote systems through Spice.
The recommended client is <link xlink:href="https://fedorahosted.org/released/virt-viewer/">remote-viewer</link>
(which is shipped with virt-viewer).
<link xlink:href="https://wiki.gnome.org/Apps/Boxes">GNOME Boxes</link>
can also be used as a Spice client. spicec is an obsolete
legacy client, and spicy is only a test application.
</para>
</section>
<section>
<title>QXL Device and Drivers</title>
<para>
Spice server supports the QXL VDI interface. When libspice is used with
QEMU, a specific video PCI device can be used for improving
remote display performance and enhancing the graphic capabilities of the
guest graphic system. This video device is called a QXL
device and requires guest QXL drivers for full functionality. However,
standard VGA is supported when no driver exists.
</para>
</section>
<section xml:id="vdagent">
<title>Spice Agent</title>
<para>
The Spice agent is an optional component for enhancing user
experience and performing guest-oriented management tasks.
For example, the agent injects mouse position and state to
the guest when using client mouse mode. It also enables you to
move cursor freely between guest and client. Other features
of agent are shared clipboard (copy and paste between guest and host)
and aligning guest resolution with client when entering fullscreen mode.
</para>
</section>
<section>
<title>VDI Port Device</title>
<para>
Spice protocol supports a communication channel between the
client and the agent on the server side. When using QEMU, Spice agent
resides on the guest. VDI port is a QEMU PCI device used
for communication with the agent.
</para>
</section>
</section>
<section xml:id="features">
<title>Features</title>
<para>
The server and client communicate via channels. Each channel is dedicated to
a specific type of data. The available channels are following.
</para>
<section xml:id="multiple_channels">
<title>Multiple Channels</title>
<orderedlist numeration="arabic">
<listitem>
<para><emphasis role="bold">Main</emphasis> - control and configuration</para>
</listitem>
<listitem>
<para><emphasis role="bold">Display</emphasis> - graphics commands images and video streams</para>
</listitem>
<listitem>
<para><emphasis role="bold">Inputs</emphasis> - keyboard and mouse inputs</para>
</listitem>
<listitem>
<para><emphasis role="bold">Cursor</emphasis> - pointer device position and cursor shape</para>
</listitem>
<listitem>
<para><emphasis role="bold">Playback</emphasis> - audio received from the server to be played by the client</para>
</listitem>
<listitem>
<para><emphasis role="bold">Record</emphasis> - audio captured on the client side</para>
</listitem>
<listitem>
<para><emphasis role="bold">Smartcard</emphasis> - passthrough of smartcard data from the client machine to the guest OS</para>
</listitem>
<listitem>
<para><emphasis role="bold">USB</emphasis> - redirection of USB devices plugged into the client to the guest OS</para>
</listitem>
</orderedlist>
</section>
<section xml:id="image_compression">
<title>Image Compression</title>
<para>
Spice offers several image compression algorithms, which
can be chosen on server initiation and dynamically at run-time. Quic is a
Spice proprietary image compression technology based on the SFALIC
algorithm. The Lempel-Ziv (LZ) algorithm is another option. Both Quic and
LZ are local algorithms encoding each image separately. Global LZ (GLZ) is
another proprietary Spice technology that uses LZ with history-based global
dictionary. GLZ takes advantage of repeating patterns among images to
shrink the traffic and save bandwidth, which is critical in a WAN
environment. Spice also offers an automatic mode for compression selection
per image, where the choice between LZ/GLZ and Quic is heuristically based
on image properties. Conceptually, synthetic images are better compressed
with LZ/GLZ and real images are better with Quic.
</para>
</section>
<section xml:id="video_compression">
<title>Video Compression</title>
<para>
Spice uses loss-less compression for images sent to the
client. However, video streams are handled differently. Spice server
heuristically identifies video areas and sends them as a video stream coded
using M-JPEG. This handling saves a lot of traffic, improving Spice
performance, especially in a WAN environment. However, in some
circumstances the heuristic behavior might cause low quality images (e.g.
identifying updated text area as a video stream). Video streaming can be
chosen on server initiation and dynamically at run-time.
</para>
</section>
<section xml:id="mouse_modes">
<title>Mouse modes</title>
<para>
Spice supports two mouse modes: server and client. The mode
can be changed dynamically and is negotiated between the client and the
server.
</para>
<orderedlist>
<listitem>
<para>
<emphasis role="bold">Server mouse</emphasis> - When a user
clicks inside the Spice client window, the client mouse is
captured and set invisible. In this mode, the server controls
the mouse position on display. However, it might be problematic
on WAN or on a loaded server, where mouse cursor might have some
latency or non-responsiveness.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Client mouse</emphasis> - Not
captured and is used as the effective pointing device. To enable
client mouse, the VDI host application must register an absolute
pointing device (e.g. USB tablet in QEMU). This mode is
appropriate for WAN or or for a loaded server, since cursor has
smooth motion and responsiveness. However, the cursor might
lose synchronization (position and shape) for a while.
</para>
</listitem>
</orderedlist>
</section>
<section xml:id="other_features">
<title>Other Features</title>
<orderedlist>
<listitem>
<para>
<emphasis role="bold">Multiple Monitors</emphasis> - any number of monitors is supported
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Arbitrary Resolution</emphasis> - when
using the QXL driver, the resolution of the guest OS will be
automatically adjusted to the size of the client window.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">USB Redirection</emphasis> - Spice
can be used to redirect USB devices that are plugged in the
client to the guest OS. This redirection can either be
automatic (all newly plugged devices are redirected), or manual
(the user selects which devices (s)he wants to redirect).
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Smartcard Redirection</emphasis> -
data from smartcard that are inserted into the client machine
can be passed through to the guest OS. The smartcard can be
used by both the client OS and the guest OS.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Bidirectional Audio</emphasis> - Spice supports audio playback and recording. Playback is compressed using the CELT algorithm
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Lip-sync</emphasis> - between video and audio. Available only when video streaming is enabled.
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Migration</emphasis> - switching channel connectivity for supporting server migration
</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Pixmap and Palette caching</emphasis>
</para>
</listitem>
</orderedlist>
</section>
</section>
</chapter>
|