Difference between revisions of "SPICE support in Xen"

From Xen
 
(9 intermediate revisions by 3 users not shown)
Line 5: Line 5:
 
Xen Project 4.4 adds support for additional SPICE functionality, including vdagent, clipboard sharing, and USB redirection.
 
Xen Project 4.4 adds support for additional SPICE functionality, including vdagent, clipboard sharing, and USB redirection.
   
<em>The following notes were added to the wiki on request of Fabio Fantoni, who added most of the SPICE support to Xen</em>
+
<em>The following notes were added to the wiki on request of Fabio Fantoni, who added SPICE support to Xen</em>
   
 
=== Restrictions ===
 
=== Restrictions ===
The SPICE [protocol is currently only supported on [[Xen_Overview#HVM|HVM]] guests.
+
The SPICE protocol is currently only supported on [[Xen_Overview#HVM|HVM]] guests.
   
 
=== QEMU Upstream ===
 
=== QEMU Upstream ===
To use SPICE you will need an [[QEMU_Upstream|upstream version of qemu]] built with SPICE support enabled. In many cases, you may
+
To use SPICE you will need an [[QEMU_Upstream|upstream version of qemu]] built with SPICE support enabled.
be able to use upstream qemu packages from Linux distributions (recent Debian, Ubuntu, etc. will work) : these have SPICE support already built-in.
 
   
  +
The upstream qemu packages may already be in your Linux distribution. Recent Debian, Ubuntu, etc. will work: these have SPICE support already built-in. In addition to the xl configuration changes below, you only need to install spice-vdagent in the domU to fully enable SPICE.
Alternatively, can compile [[Xen_Project_Repositories#Qemu_Xen_Trees|upstream qemu from the xen source tree]]. However, you will need to apply a small patch to enable SPICE and USB Redirection to the build parameters. See:
 
  +
  +
Alternatively, you can compile [[Xen_Project_Repositories#Qemu_Xen_Trees|upstream qemu from the xen source tree]]. However, you will need to apply a small patch to enable SPICE and USB Redirection to the build parameters. See:
   
 
<pre>
 
<pre>
> tools/Makefile
+
tools/Makefile
> @@ -201,6 +201,8 @@ subdir-all-qemu-xen-dir: qemu-xen-dir-find
+
@@ -201,6 +201,8 @@ subdir-all-qemu-xen-dir: qemu-xen-dir-find
> --datadir=$(SHAREDIR)/qemu-xen \
+
--datadir=$(SHAREDIR)/qemu-xen \
> --localstatedir=/var \
+
--localstatedir=/var \
> --disable-kvm \
+
--disable-kvm \
> + --enable-spice \
+
+ --enable-spice \
> + --enable-usb-redir \
+
+ --enable-usb-redir \
> --disable-docs \
+
--disable-docs \
> --disable-guest-agent \
+
--disable-guest-agent \
> --python=$(PYTHON) \
+
--python=$(PYTHON) \
 
</pre>
 
</pre>
  +
  +
With xen 4.5 can be added with configure:
  +
./configure --with-extra-qemuu-configure-args="--enable-spice --enable-usb-redir"
   
 
=== XL Configuration ===
 
=== XL Configuration ===
 
You can use [[XL]] configuration parameters to enable SPICE support and control its advanced functions. Please check <em>man xl.cfg</em> or check out [http://xenbits.xen.org/docs/4.4-testing/man/xl.cfg.5.html#spice_graphics_support xl.cfg(5)].
 
You can use [[XL]] configuration parameters to enable SPICE support and control its advanced functions. Please check <em>man xl.cfg</em> or check out [http://xenbits.xen.org/docs/4.4-testing/man/xl.cfg.5.html#spice_graphics_support xl.cfg(5)].
   
  +
The following example is for a domU xl cfg for xen 4.4 with spice full features (except qxl):
You can also find configuration examples in this [http://lists.xenproject.org/archives/html/xen-users/2013-06/msg00423.html e-mail thread].
 
  +
  +
<pre>
  +
name='W7'
  +
builder="hvm"
  +
memory=2048
  +
vcpus=2
  +
# The fixed mac address is a workaround for know xl problem (network not working after restore)
  +
vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8f']
  +
# empty cdrom is for use cdrom hotswap from xl
  +
# raw disk with qdisk as backend produces better performance than blktap2
  +
disk=['/mnt/vm/disks/W7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom']
  +
boot='dc'
  +
device_model_version="qemu-xen"
  +
viridian=1
  +
vnc=0
  +
keymap="it"
  +
on_crash="destroy"
  +
vga="stdvga"
  +
spice=1
  +
spicehost='0.0.0.0'
  +
spiceport=6000
  +
# spicedisable_ticketing enabled is for no spice password, instead use spicepasswd
  +
spicedisable_ticketing=1
  +
#spicepasswd="test"
  +
spicevdagent=1
  +
spice_clipboard_sharing=1
  +
# this will automatically redirect up to 4 usb devices from spice client to domUs
  +
spiceusbredirection=4
  +
# This adds intel hd audio emulated card used for spice audio
  +
soundhw="hda"
  +
localtime=1
  +
</pre>
   
=== Know Problems ===
+
=== Known Problems ===
* Linux domUs with recent kernel need <b>pci=nomsi</b> set for kernel boot parameters to ensure that vdagent is working. This is a know problem with virtio devices on Xen which has not yet been solved. All other cases and things works out of box based on my tests. We are not entirely sure which kernel versions are affected, except that kernel >= 3.2 exhibits the problem, while kernel <= 2.6.32 does not. -<i>Feel free to update this section if you have more accurate information.</i>
+
* Linux domUs with recent kernel need <b>pci=nomsi</b> set for kernel boot parameters to ensure that vdagent is working. This is a know problem with virtio devices on Xen which has not yet been solved. All other cases and things works out of box based on my tests. We are not entirely sure which kernel versions are affected, except that kernel >= 3.2 exhibits the problem, while kernel <= 2.6.32 does not. <i>Feel free to update this section if you have more accurate information.</i>
   
 
== Ongoing work ==
 
== Ongoing work ==
   
 
Work on the following patches to improve SPICE support and integration in Xen is ongoing:
 
Work on the following patches to improve SPICE support and integration in Xen is ongoing:
* qxl vga (libxl patch complete and seems good but qxl is not working because other changes are needed on xen and/or qemu)
+
* qxl vga support (libxl patch complete and seems good. qxl is working on windows domUs but is not working on linux domUs because other changes are needed on xen, xorg/qxl driver and/or qemu) [http://lists.xen.org/archives/html/xen-devel/2014-05/msg03214.html patch v16]
 
* Basic SPICE support on PV guests (patch is working but needs serious improvements)
 
* Basic SPICE support on PV guests (patch is working but needs serious improvements)
 
* Add SPICE parameters to xenstore and handle those acquired with qmp (only the qmp part is currently working)
 
* Add SPICE parameters to xenstore and handle those acquired with qmp (only the qmp part is currently working)

Latest revision as of 21:11, 24 April 2020

SPICE is a protocol for virtual desktops which allows a much richer connection than display-only protocols like VNC.

Xen 4.4

Xen Project 4.4 adds support for additional SPICE functionality, including vdagent, clipboard sharing, and USB redirection.

The following notes were added to the wiki on request of Fabio Fantoni, who added SPICE support to Xen

Restrictions

The SPICE protocol is currently only supported on HVM guests.

QEMU Upstream

To use SPICE you will need an upstream version of qemu built with SPICE support enabled.

The upstream qemu packages may already be in your Linux distribution. Recent Debian, Ubuntu, etc. will work: these have SPICE support already built-in. In addition to the xl configuration changes below, you only need to install spice-vdagent in the domU to fully enable SPICE.

Alternatively, you can compile upstream qemu from the xen source tree. However, you will need to apply a small patch to enable SPICE and USB Redirection to the build parameters. See:

 tools/Makefile
 @@ -201,6 +201,8 @@ subdir-all-qemu-xen-dir: qemu-xen-dir-find
  		--datadir=$(SHAREDIR)/qemu-xen \
  		--localstatedir=/var \
  		--disable-kvm \
 +		--enable-spice \
 +		--enable-usb-redir \
  		--disable-docs \
  		--disable-guest-agent \
  		--python=$(PYTHON) \

With xen 4.5 can be added with configure:

 ./configure --with-extra-qemuu-configure-args="--enable-spice --enable-usb-redir"

XL Configuration

You can use XL configuration parameters to enable SPICE support and control its advanced functions. Please check man xl.cfg or check out xl.cfg(5).

The following example is for a domU xl cfg for xen 4.4 with spice full features (except qxl):

name='W7'
builder="hvm"
memory=2048
vcpus=2
# The fixed mac address is a workaround for know xl problem (network not working after restore)
vif=['bridge=xenbr0,mac=00:16:3e:41:ae:8f']
# empty cdrom is for use cdrom hotswap from xl 
# raw disk with qdisk as backend produces better performance than blktap2
disk=['/mnt/vm/disks/W7.disk1.xm,raw,hda,rw',',raw,hdb,ro,cdrom']
boot='dc'
device_model_version="qemu-xen"
viridian=1
vnc=0
keymap="it"
on_crash="destroy"
vga="stdvga"
spice=1
spicehost='0.0.0.0'
spiceport=6000
# spicedisable_ticketing enabled is for no spice password, instead use spicepasswd
spicedisable_ticketing=1
#spicepasswd="test"
spicevdagent=1
spice_clipboard_sharing=1
# this will automatically redirect up to 4 usb devices from spice client to domUs
spiceusbredirection=4
# This adds intel hd audio emulated card used for spice audio
soundhw="hda"
localtime=1

Known Problems

  • Linux domUs with recent kernel need pci=nomsi set for kernel boot parameters to ensure that vdagent is working. This is a know problem with virtio devices on Xen which has not yet been solved. All other cases and things works out of box based on my tests. We are not entirely sure which kernel versions are affected, except that kernel >= 3.2 exhibits the problem, while kernel <= 2.6.32 does not. Feel free to update this section if you have more accurate information.

Ongoing work

Work on the following patches to improve SPICE support and integration in Xen is ongoing:

  • qxl vga support (libxl patch complete and seems good. qxl is working on windows domUs but is not working on linux domUs because other changes are needed on xen, xorg/qxl driver and/or qemu) patch v16
  • Basic SPICE support on PV guests (patch is working but needs serious improvements)
  • Add SPICE parameters to xenstore and handle those acquired with qmp (only the qmp part is currently working)
  • Automatic SPICE port selection similar to the support available in VNC (blocked, awaiting reply from qemu community)

The latest work in progress and discussions can be found on xen-devel and any patches (including partial and drafts) can be found on Fabio Fantoni's github repository.