Until recently the best way to connect to your KVM Virtual Machines was to install NoMachine's NX Server on each VM and run the NX Client over SSH. NX offers excellent keyboard, mouse and screen performance over slow connections and remains one of the best ways to access a remote system - virtual or otherwise.Since 2008 Redhat, Inc. has been implementing a protocol called SPICE - the Simple Protocol for Independent Computing Environments. SPICE was originally developed by a company called Qumranet. Redhat purchased Qumranet in 2008 and open-sourced the SPICE protocol in 2009.
Thanks to the efforts of many volunteers it is now possible to install SPICE on K/Ubuntu 11.10. In this document I mention the dramatically improved video playback performance and the stereo audio playback over LAN but these are only some of the features of SPICE. You might want to take a look at the SPICE web site to find out more about it.
The necessary binaries are being compiled for Ubuntu by Boris Derzhavets. Of course Mr. Derzhavets is relying on the efforts of other volunteers and I would like to thank them all. I would also like to thank the folks at Redhat for all their work in the Open Source community.
Take the following steps to install and use SPICE with your KVM VM's:
- At the time of this writing (December 30th, 2011,) the main K/Ubuntu 11.10 repositories do not include the SPICE packages compiled by Boris Derzhavets. Until that happens you can add the repositories of Mr. Derzhavets to your software sources to pull his binaries into your system. Hopefully this step will not be necessary for much longer.
- Modify your VM's to use the SPICE-specific virtual hardware.
- Install any necessary drivers on the VM's so that they can make use of the new virtual hardware.
- Install the SPICE client on your network workstations so that you can remote-desktop using SPICE to your upgraded VM's.
Once this is done you will be able to enjoy high-performance video and audio playback between your workstation and your Virtual Machine over your office network. The performance is not absolutely perfect but it is a major improvement over VNC, RDP and NX.
Let's get started:
Pulling SPICE support into K/Ubuntu 11.10
Please note that the steps listed here are strictly for K/Ubuntu 11.10. K/Ubuntu will most likely incorporate SPICE support in the K/Ubuntu Proposed repository before Q-4 of 2012.
If you are reading this after mid-2012 it is likely that you already have SPICE support in your system. If you are using a version of K/Ubuntu prior to 11.10 you will want to read carefully Mr. Derzhavets's notes to determine which packages to pull from his various repo's. The following notes have only been tested on K/Ubuntu 11.10.
Start by adding two private repositories maintained by Mr. Boris Derzhavets to your software sources.
Detailed notes from Mr. Derzhavets about the packages in these repos are available at https://wiki.ubuntu.com/spice.
Here are some of the ways you can add Software Sources in K/Ubuntu:
- In the new Muon Package Manager click on the Settings menu, then select Configurure Software Sources.
- In Synaptic click on the Settings menu and select Repositories.
- From the main KUbuntu Application Launcher (sometimes called the Start button,) click on the Settings menu and select Software Sources.
Once you have found the Software Sources dialog click on the Other Sources tab. Now press the ADD button at the bottom left of the dialog to add another software source. This will bring-up the Add Source dialog as shown in the image on the right. Copy and paste the following text into the APT Line box of that dialog:
deb http://ppa.launchpad.net/bderzhavets/spice-7/ubuntu oneiric main
Click the Add Source button and you will be returned to the Other
Sources tab of the Software Sources dialog.
Once again, click on the ADD button at the bottom left of the dialog so that you can add the second PPA:
deb http://ppa.launchpad.net/bderzhavets/qemu-git/ubuntu oneiric main
Click the ADD Source button to complete the add operation and click
the close button on the Software Sources dialog. Next, click the
Reload button (or equivalent for your package manager,) to reload all
the package lists from the various repositories.
At this point you will probably get an error message related to missing keys. This is because GPG does not yet know about the signing key that was used by Mr. Derzhavets when he packaged his binaries. You can double-click on the key signature in the error message window. This will cause the signature to be highlighted as in the image on the right. You can then right-click over the highlighted text to bring-up the speed menu. Select Copy to copy the signature to the clipboard. Next, open a shell and type the following command:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5CC1785DC05C1EB5
Don't forget to substitute the key signature that you copied for the key signature shown above (in case they are different.) The apt-key utility will attempt to pull a copy of Mr. Derzhavets public key from a key server. This will allow the package manager to verify the signatures on the binaries packaged by Mr. Derzhavets.
At this point it should be possible to start pulling the SPICE compatible binaries into your system. Use your favorite package manager to install the desired packages. (The command line below uses the apt-get command but any package manager will do.) Note that the following list is from my main workstation and might include some packages that are not strictly necessary:
$ sudo apt-get install libcelt051 libspice-client libspice-server libspicegtk3-client qemu-common qemu-kvm spice spice-vdagent spice-gtk3-client
If you run into any package problems you can un-install the problem packages and then re-install the desired package. I ran into a problem with a loadable object module that was being provided by two different packages. The easy way to solve the problem was to un-install the two packages that contained copies of the same file. Then I installed the desired package again without any difficulty.
Hopefully by the time you read this the packages will have been moved into the proposed repository and any package issues will have been resolved.
Restart KVM and Virt-Manager
At this point the desired software is on the workstation filesystem but the previous copies of the software are still loaded in the system. To correct this problem:
- Exit the Virt Manager
- Open a shell.
- Stop and restart the libvirt-bin and qemu-kvm services. There
are two different ways to do this. I prefer the service command but,
if you don't have it installed, you will want to just call the
init scripts manually:
- Using the service command:
$ sudo service libvirt-bin stop
$ sudo service qemu-kvm stop
$ sudo service qemu-kvm start
$ sudo service libvirt-bin start
- Or, if you have not installed the service command, you can
accomplish the same using the init scripts:
$ sudo /etc/init.d/libvirt-bin stop
$ sudo /etc/init.d/qemu-kvm stop
$ sudo /etc/init.d/qemu-kvm start
$ sudo /etc/init.d/libvirt-bin start
- Using the service command:
- Finally: restart the virt-manager.
The first time that I ran through the above procedure I discovered that I had missed a few details and got some error messages. Thankfully the messages were informative enough that I was able to quickly work through them. Hopefully you will have a similar experience and the above process will proceed smoothly for you, too. Of course if you are reading this after mid-2012 there is a very real chance that the desired software will be included in the proposed software repository and you won't have to think about the packages at all.
Downloading any necessary drivers
Most likely you already have the drivers you will need for any modern Linux based Virtual Machine. The QXL video driver package is already part of the XORG collection in both the Fedora and Ubuntu repositories. As such one might hope to find it in other distributions of Linux. Drivers for the AC97 audio device have been available in Linux for quite some time.
In practice this means that you will probably be able to boot your modern Linux Virtual Machines and get the correct drivers installed and running with little or no effort. If your Virtual Machine is running an older version of Linux you will probably want to continue to connect using VNC and/or NX. On the other hand you might find, as I did, that the basic VGA or VESA video devices work fairly well with the SPICE backend.
Windows Virtual Machines will detect the QXL video device. When you first boot the VM the Found New Hardware Wizard will appear. There is no doubt that video performance will improve dramatically if you direct the wizard to install the Windows QXL Virtual Device Drivers.
As such if you expect to try using SPICE on a Windows VM you will first want to visit the SPICE project web site and download the most recent driver files. Copy them to a convenient Samba share or create an ISO file that you can connect to the VM's as a CD-ROM.
The desired files can be found on the download page of the SPICE web site:
Look for the Windows Binaries about three-quarters of the way down the page. Remember to unpack the files and save them to a network-accessible samba share or use a program like K3b to copy them into an ISO file that can be connected as a CD-ROM to a VM.
Modifying a VM's Hardware Configuration
In the past I configured my KVM Virtual Machines to use a virtual video card called VMVGA. I then used VNC to display the image that was written to the virtual VMVGA device. I also found that the ES1370 virtual sound device gave me good results through the pulse audio setup on my workstation.
When I started trying to get SPICE to work I found it best to change the virtual hardware. The VMVGA device does work with SPICE but the results are dramatically better with the SPICE-specific QXL device. Also I found that there was no sound over SPICE unless I switched to the AC97 virtual sound device. In fact the sound might work with other virtual hardware - I don't know yet if the virtual AC97 device is somehow tied to the current SPICE software.
For sure it is always necessary to remove the VNC (or SDL) display backend and install the new SPICE backend.
If you are using the Virt Manager as shown in the images here you will find that editing your virtual hardware setup involves only a few seconds of effort.
- Open the Virtual Machine in the Virt Manager and select the Details View as shown in the image to the right.
- Click on the Video item in the left panel of the Details
View. Select the SPICE compatible virtual video device which is called
QXL. This is the device that your VM will see when you boot it. Don't
worry - the QXL device is VESA compatible. If your VM is running a
relatively modern operating system it will boot and you will be able
to install the QXL drivers.
- Now that we have enabled the QXL virtual device we need to set the
backend to use the SPICE protocol. Click on the DISPLAY item in the
left panel of the Details view. You will see the currently configured
backend. Most likely this will be VNC but it might also be SDL.
In either case click the [Remove]
button to delete this backend. (Scroll down the page to continue.)
- Now click on the [Add Hardware] button
to add the SPICE protocol Display backend. Select the Graphics item
in the left panel. Set the Type of Graphics Backend to SPICE
If you are on a private network and plan on accessing this Virtual Display over your network you might want to check the Listen on all public network interfaces option. Set the port numbers as desired or check the Automatically Allocated option to let the system allocate the next available port at run time. Click Finish to save your changes.
Your Display Spice / Spice Server backend should look something like the image on the left when you are done.
At this point you have selected the QXL virtual video card and the SPICE display backend for your Virtual Machine.
Next we will work on the Sound configuration. Please scroll down the page to see the next step.
- Next: Click on the Sound device in the left panel of the Detail View for your Virtual Machine. It is possible that the device you have currently selected will work fine. For me, on my workstation, I was only able to get sound out of my VM's when I selected the AC97 device. This may not be an issue for you. You can change the setting to AC97 or leave it alone. If the sound doesn't work properly for you it's easy to change again later.
At this point the first step, configuring your VM to use SPICE, is
complete. Next you will boot your VM and install any required virtual
device drivers. Finally you will install the Spice client and
remote-desktop into your VM's using the SPICE protocol.
Booting a Windows VM
For those who skim quickly through these documents I mention again that your modern Linux VM's will probably boot and run very nicely with little or no effort on your part. This should be true, at least, for your Fedora and Ubuntu derived distributions. It may also be true of other distros as the open source code provided by Redhat is readily available.
Windows VM's, on the other hand, will boot and detect the new hardware but not find the required drivers for that hardware. The Found New Hardware Wizard will appear and you will want to direct it to the Virtual Device Drivers that you previously downloaded. See the start of this document for details on where to find the drivers. Be prepared to find the drivers. One way is to copy them to a samba share on your network. Another is to copy them into an ISO file and connect that ISO file as a CD-ROM on the VM.
At this point you can boot the VM and log into an Administrator
account. After a short delay the Found New Hardware Wizard will
appear. The first page of the Wizard will ask if you want to use
Windows Update to find the desired drivers. Select the No, not this
time option. Click the Next button to move to the next page.
The second page will ask you where it should look for the
necessary driver files. Select Install from a List or Specific
Location (Advanced) so that you can specify where you want the
Wizard to look for the drivers.
The third page of the Wizard allows you to specify the locations that
the Wizard will search to find the QXL video drivers. Choose the
appropriate options and browse as needed to find the appropriate
files for your version of Windows and your architecture. The snapshot
to the right of this text was taken on a 32-bit Windows XP VM with
the drivers on a NAS share.
Windows will warn you that the driver you are installing has not been
certified by Microsoft. In practice it is true that buggy drivers are
the cause of many troubles. I hope that you will install these
drivers and take the time to report any problems that you trace back
to them. Over time they will, no doubt, develop into the
high-performance and high-reliability software that we all need.
In my case I found the installation process was relatively quick and painless.
According to this Redhat Guide from December of 2009 the Found New Hardware Wizard might appear again. This time it will be asking for your help to find and install VDI Port Drivers. I did not get this on my Windows VM's so I'm guessing that the VDI Port Drivers are now included with the QXL drivers.
One last item to install is the Spice Agent. The SPICE for Newbies [pdf] document describes the agent as "an optional component for enhancing user experience and performing guest-oriented tasks. For example, the agent injects mouse position and state to the guest when using client mouse mode. In addition, it is used for configuration of the guest display settings. Future features include copying and pasting objects from/to the guest. The Windows agent consistss of a system service and a user process."
You can download the agent software from the same download page on which you found the Windows drivers. See Install the SPICE agent in this Redhat Guide for details on how to do this.
Connecting to your VM via SPICE
Finally we can get to the last step in this process: Connecting to the VM through a SPICE client.
There are two clients to choose from: The Redhat GTK+ client (called spicy, note the missing 'e',) and the more basic Spice Client (called spicec.) I have played with both of them and prefer the many features of the Redhat client - but it is slower than the more simple Spice Client.
The first thing to do is to install one or both of the clients.
NOTE: At the time of this writing (December 30th, 2011,) there are two spice client packages containing spicec, the simple spice client. One of them is called spice and the other is called spice-client. Do not install the second one as it depends on a package that conflicts with a codec package. Install only the spice package to avoid this conflict.
If you are installing one or both SPICE clients on a different
workstion you can follow again the notes in the section Pulling
SPICE support into K/Ubuntu 11.10 above. You can also download a
SPICE client for Windows from the SPICE web site. Of course the Redhat
repositories contain SPICE clients for the Fedora distributions of
If you configured your VM to automatically assign an available port number you will need to find out what number was assigned. Simply boot the VM and check the port number in Virt-Manager's Detail View for the VM. See the sample image to the right of this text. The port number is the highlighted text in the configuration for the Display backend for the VM.
At this point you can try the two clients. Each client wants a host
name and port number. Clearly the Redhat client has more features but,
in my personal case, I was using SPICE mostly because I wanted to watch
Netflix at night. For this use-case the more basic Spice Client
demonstrates better performance.
If you check your Pulse Audio volume control after connecting with your VM you may not see the Spice Client as one of the sound sources. This is because the client will not connect to the pulse subsystem until a sound is sent from the VM. On Windows VM's you can click on the volume control in the task bar to cause the VM to emit a ding sound. After that you should see a Spice Audio source as at the bottom of the image to the right of this text. If you do not hear any sound you can shutdown your VM and try a different virtual sound device.
Questions or Comments?
If you have any questions or comments about this FAQ please take a
moment to email me at sam [at] azertech [dot] net. I look forward to
hearing from you!