前面在 PVE 上陆续安装了 Debian 13.7 GNOME、Arch Linux KDE 和 Windows 11。平时通过 PVE Web 页面里的 noVNC Console 操作虽然方便,但作为长期桌面使用,体验还是比较基础。
这次给三台桌面虚拟机统一配置了一遍 SPICE。
最后的实际效果比预想中好:
-
Debian 13.7 GNOME:剪贴板、动态分辨率、音频全部正常
-
Arch Linux KDE:剪贴板、音频正常,动态分辨率在 KDE Wayland 下表现一般
-
Windows 11:剪贴板、动态分辨率、音频全部正常
而且最终配置其实并不复杂。

一、为什么还要用 SPICE?
PVE 自带的 noVNC 最大优点就是方便:
浏览器
↓
PVE Web
↓
Console
↓
noVNC
不需要在客户端安装什么东西,装系统、排障时尤其方便。
但如果虚拟机本身就是桌面系统,SPICE 的体验会更完整,例如:
Host 和 VM 双向剪贴板
窗口大小变化
↓
Guest 分辨率自动调整
VM 音频
↓
通过 SPICE
↓
Host 扬声器 / 耳机
因此我现在的使用方式是:
noVNC
↓
安装系统 / 应急 / 排障
SPICE
↓
日常桌面操作
两者并不冲突。
二、Ubuntu 主力机安装 SPICE 客户端
我的主力机是 Ubuntu,因此先安装:
sudo apt install virt-viewer
其中真正负责打开 SPICE 会话的是:
remote-viewer
以后在 PVE 中点击:
VM
→ Console
→ SPICE
浏览器会下载一个临时连接文件。
我的 Chrome 下载出来的文件甚至没有 .vv 后缀,而是类似:
BLt5ZGP5
这没有关系。
直接点击 Run,或者:
remote-viewer ~/Downloads/BLt5ZGP5
一样可以正常连接。
这个文件包含临时 SPICE ticket,本身就是一次性连接配置,所以我最后也没有再折腾所谓"永久 SPICE 配置文件"。
实际使用时:
PVE Web
→ Console
→ SPICE
→ Open / Run
已经足够简单。
三、Debian 13.7 GNOME 配置 SPICE
先在 Debian VM 内更新系统,并安装:
sudo apt update
sudo apt upgrade
sudo apt install spice-vdagent
spice-vdagent 是 Linux Guest 里的 SPICE Agent,主要负责鼠标、剪贴板和显示集成等功能。Debian 13 Trixie 官方仓库直接提供这个软件包。
安装完成后关闭 VM。
进入:
Debian VM
→ Hardware
→ Display
→ Edit
将虚拟显卡改为:
SPICE
再添加音频设备:
Debian VM
→ Hardware
→ Add
→ Audio Device
配置:
Device: ich9-intel-hda
Backend: SPICE
然后启动 Debian,通过:
Console
→ SPICE
→ Open
连接。
四、测试 Debian 的 SPICE 功能
1. 剪贴板
先测试:
Ubuntu Host
↓ Copy
Debian VM
再反向测试:
Debian VM
↓ Copy
Ubuntu Host
中英文文本都可以正常双向复制。
2. 动态分辨率
Debian 13.7 GNOME 默认运行的是:
echo $XDG_SESSION_TYPE
结果:
wayland
原本还有点担心 Wayland 下 SPICE 的兼容性,实际测试却完全正常。
打开:
gnome-control-center display
查看当前分辨率。
然后拖动 remote-viewer 窗口改变大小,再观察 Display 设置,可以看到 Guest 分辨率也跟着改变。
也就是说:
remote-viewer 窗口变大
↓
Debian 自动改变显示分辨率
GNOME Wayland 下实际表现很好。
3. 音频
安装 ALSA 测试工具:
sudo apt install alsa-utils
运行:
speaker-test -c 2 -t wav
可以从 Ubuntu 主力机的扬声器听到左右声道测试音。
声音路径大致是:
Debian
↓
虚拟 Intel HDA
↓
SPICE
↓
remote-viewer
↓
Ubuntu 音频系统
↓
扬声器 / 耳机
到这里 Debian 的 SPICE 就算完整配置好了。

五、Arch Linux KDE
Arch 的配置基本相同。
VM 内安装:
sudo pacman -Syu
sudo pacman -S spice-vdagent
sudo pacman -S alsa-utils
Arch 官方 Extra 仓库同样直接提供 spice-vdagent。
然后关闭 VM,在 PVE 中修改:
Hardware
→ Display
→ SPICE
添加:
Hardware
→ Add
→ Audio Device
设置:
Device: ich9-intel-hda
Backend: SPICE
启动之后同样通过:
Console
→ SPICE
进入。
六、Arch KDE 的实际表现
这台 Arch 使用 KDE Plasma,当前同样是 Wayland:
echo $XDG_SESSION_TYPE
结果:
wayland
剪贴板测试正常:
Ubuntu ↔ Arch
音频也正常:
speaker-test -c 2 -t wav
唯一和 Debian GNOME 不太一样的是动态分辨率。
可以使用:
kscreen-doctor -o
检查 KDE 当前显示配置。
我的实际测试中,无论怎样缩放 remote-viewer 窗口,Guest 基本一直维持:
1024×768
也就是说:
Debian GNOME Wayland
→ 自动动态分辨率正常
Arch KDE Wayland
→ SPICE 可用
→ 剪贴板正常
→ 音频正常
→ 自动 resize 表现一般
ArchWiki 也特别提到,GNOME 之外的桌面环境对 SPICE 窗口 resize 的自动响应可能需要额外处理,而传统的 x-resize 方案主要针对 X11。
这里我没有继续折腾。
为了一个自动调整分辨率功能,再去切换 X11、添加驱动或者安装额外脚本,对我的用途来说没有必要。
固定一个合适的分辨率使用即可。

七、Windows 11 配置反而最简单
我的 Windows 11 VM 之前安装系统时就已经安装过:
virtio-win-guest-tools.exe
因此这次 Guest 里面什么都不用额外安装。
virtio-win-guest-tools 本身包含 VirtIO 驱动以及 SPICE Guest Agent、SPICE/QXL 相关驱动。
直接关闭 Windows VM。
修改:
Windows 11 VM
→ Hardware
→ Display
→ SPICE
然后:
Hardware
→ Add
→ Audio Device
设置:
Device: ich9-intel-hda
Backend: SPICE
开机以后:
Console
→ SPICE
直接就可以用了。
八、Windows 11 的实际效果
设备管理器中显示显卡为:
Red Hat QXL Controller
实际测试三项全部正常。
剪贴板
Ubuntu ↔ Windows 11
双向复制正常。
动态分辨率
拖动 remote-viewer 窗口:
窗口大小改变
↓
Windows Display Resolution 自动变化
体验甚至比 Arch KDE 更完整。
音频
进入:
Settings
→ System
→ Sound
播放测试音,可以直接从 Ubuntu 主力机输出。
所以 Windows 11 最后的表现是:
✓ SPICE 显示
✓ 双向剪贴板
✓ 动态分辨率
✓ 音频

九、三套系统实际对比
| Guest | 桌面 | 剪贴板 | 动态分辨率 | 音频 |
|---|---|---|---|---|
| Debian 13.7 | GNOME Wayland | ✅ | ✅ | ✅ |
| Arch Linux | KDE Wayland | ✅ | △ | ✅ |
| Windows 11 | Windows Desktop | ✅ | ✅ | ✅ |
这里比较有意思的是:
Wayland 本身并不意味着 SPICE 动态分辨率一定不能用。
至少在我的环境中:
Debian GNOME + Wayland
自动 resize 完全正常。
真正表现不同的是:
GNOME Wayland
vs
KDE Wayland
Arch KDE 下窗口 resize 没有自动同步,但这并不影响 SPICE 的其它主要功能。
十、为什么没有做"永久 SPICE 快捷方式"
一开始我也觉得:
每次都从 PVE 下载一个临时连接文件,好像有点麻烦,能不能直接做一个永久 SPICE 快捷方式?
实际研究之后发现,这件事情反而容易把原本非常简单的方案搞复杂。
因为 PVE 的 SPICE .vv 文件中包含临时 ticket。
如果希望自动生成,就要进一步处理:
PVE API
用户
权限
Token / Session
脚本
本地凭据
临时 ticket
最终为了省掉:
Console → SPICE → Open
这两三次点击,却增加了一整套额外维护逻辑。
于是最后全部撤掉。
现在保持最原生的:
PVE Web
↓
Console
↓
SPICE
↓
临时连接文件
↓
remote-viewer
反而最干净。

虚拟化环境里的管理工具,我越来越倾向于一个原则:
能用平台原生能力简单解决的问题,就不要为了自动化而额外制造一层系统。
十一、最终配置
现在这台 PVE 上的三个桌面系统,远程访问方式基本确定下来:
PVE
│
┌──────────┴──────────┐
│ │
noVNC SPICE
│ │
安装 / 应急 / 排障 日常桌面使用
│
┌─────────────┼─────────────┐
│ │ │
Debian 13.7 Arch Windows 11
GNOME KDE Plasma

Windows 11 另外还有:
RDP
因此 Windows 日常使用还是可以优先 RDP,而 SPICE 作为 PVE 层面的控制台和备用入口。
Linux 桌面则可以直接把 SPICE 当作主要的 GUI 连接方式。
十二、总结
PVE 自带 noVNC 已经能解决"如何看到 VM 屏幕"的问题,而 SPICE 更像是把这个控制台进一步变成了一个真正可用的远程桌面:
剪贴板
+
动态分辨率
+
鼠标集成
+
音频
这次三套系统的实际测试结果也比较令人满意:
Debian GNOME Wayland
→ 几乎全部功能完整可用
Arch KDE Wayland
→ 除自动动态分辨率外基本正常
Windows 11 + QXL
→ 全部正常
而配置本身并不复杂。
Host 安装一次:
sudo apt install virt-viewer
Linux Guest 安装:
spice-vdagent
Windows 安装:
virtio-win-guest-tools
PVE 统一配置:
Display:
SPICE
Audio:
ich9-intel-hda
Backend: SPICE
就基本完成了。
对于在 PVE 上长期保留 Debian、Arch、Windows 等桌面 VM 的场景,这套配置还是很值得做一次的。