Why is VNC No Longer Sufficient for Professional Needs?
KVM users are likely no stranger to the “extreme lag” when using VNC: the cursor moves first while the screen follows later, and audio is almost non-existent. VNC essentially works by taking screenshots and sending them continuously over the network. This method is fine for the command line (CLI), but if you need to scroll through web pages or watch 720p videos, VNC quickly becomes a laggy nightmare.
Windows RDP is quite good but runs at the operating system level. You have to wait for the machine to finish booting and have a network connection before you can use it. When you need to intervene in the BIOS or fix errors during boot (kernel panic), RDP is completely useless.
That’s where SPICE (Simple Protocol for Independent Computing Environments) shines. It’s not just a simple display protocol. It’s an entire ecosystem that helps virtual machines communicate with workstation hardware extremely intelligently.
SPICE Protocol: The “Lifesaver” for Remote Virtual Machine Experience
Smart Operating Mechanism
VNC sends pixels, while SPICE sends graphics commands. When you move a window, instead of sending a heavy image block, SPICE only sends the command: “Move this rectangle from coordinate A to B”. According to actual tests in a 1Gbps LAN, SPICE latency is usually under 30ms, while VNC can reach 100-150ms.
I am currently running a Proxmox Homelab cluster with about 12 virtual machines. Previously, using the default web console (VNC) to code on Ubuntu Desktop was very annoying due to keyboard lag. Since switching to SPICE, the typing and mouse movement feel 95% as responsive as a physical machine.
Practical Pros and Cons
- Pros:
- Extremely low latency, supports 2D hardware acceleration (thanks to the QXL card).
- Two-way audio: Listen to music and use a mic for meetings through the VM seamlessly.
- USB Passthrough: Plug a USB into your laptop at a coffee shop, and the VM on your home server detects it immediately.
- Automatically scale resolution based on the Remote Viewer window size.
- Smooth file and text copy-paste between physical machine and virtual machine without intermediaries.
- Cons:
- Requires installing the
spice-guest-toolsdriver for maximum performance. - Must use a specific client software (Virt-viewer) rather than directly in a browser.
- Requires installing the
Guide to Deploying SPICE for KVM Virtual Machines
To get started, we need to configure both the Server side (KVM Host) and the Client side (your workstation).
1. Edit Server Configuration
If you manage virtual machines via virsh, open the VM’s XML file:
virsh edit <vm_name>
Find and update the <graphics> and <video> tags as follows:
<devices>
<!-- Change graphics type to SPICE -->
<graphics type='spice' autoport='yes' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
<image compression='off'/>
</graphics>
<!-- Use QXL model for display optimization -->
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
</video>
<!-- Communication channel for copy-paste feature -->
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
</channel>
</devices>
Save the file and restart the VM. The line listen='0.0.0.0' allows you to connect from any machine within the local network.
2. Install Guest Tools (Crucial Step)
Many users still experience lag after setup because they are missing this driver.
On Windows: Go to the spice-space.org homepage and download spice-guest-tools.exe to install. It will automatically recognize the QXL graphics card and enable the copy-paste feature.
On Linux (Ubuntu/Debian): Run the following command inside the virtual machine:
sudo apt update && sudo apt install spice-vdagent qemu-guest-agent -y
3. Client-Side Configuration (Your Machine)
Download the Virt-viewer software to your workstation to connect:
- Windows: Download the .msi version from the Virt-viewer homepage.
- Linux: Install using the command
sudo apt install virt-viewer.
Open Remote Viewer and enter the address: spice://<KVM_HOST_IP>:5900. Usually, the first VM uses port 5900, the second 5901, and so on.
Pro Tip: Using USB Passthrough over the Network
This is the most “worth every penny” feature. Have a software USB Key or specific peripherals? Just plug it into your laptop, and the remote VM on the server will recognize it as if it were plugged directly into a physical port.
To enable this feature, add the following lines inside the <devices> tag of the XML file:
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='1'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
Once connected, go to the File -> USB Device Selection menu and check the device you want to connect. The virtual machine will recognize the device immediately.
Should You Choose SPICE or Another Solution?
Based on my experience, here is the selection formula:
- Pure CLI usage: Use SSH. It is the fastest, lightest, and most secure.
- Heavy graphics/Gaming: Use GPU Passthrough combined with Moonlight/Sunshine to leverage dedicated card power.
- Daily work, app testing, web browsing: SPICE Protocol is the #1 choice due to its stability and comprehensive support for everything from audio to copy-paste.
Setting up SPICE might take a bit more time than VNC due to the XML editing step. However, the smoothness of mouse movement and the ability to drag and drop files directly will make you feel the effort is entirely worth it.

