PVE 上用 SPICE:统一连接 Debian、Arch 和 Windows 11 桌面

前面在 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 的场景,这套配置还是很值得做一次的。

相关推荐
数字新视界1 小时前
2026机房动环监控选型指南:场景规模需求、市场发展占有率和竞争梯队报告解析
大数据·运维·网络·人工智能·嵌入式硬件·机房动环监控·机房环境安全
咯哦哦哦哦1 小时前
配置VNC sever 6.11.0版本 linux(激活码)
linux·运维·服务器
guo_wen_qiang1 小时前
jenkins流水线参数化配置
运维·docker·容器·jenkins·持续部署
学逆向的1 小时前
win32消息类型
windows·网络安全·mfc·api·win32
꯭自꯭闭꯭2 小时前
DM主备集群以及读写分离集群搭建
linux·运维·数据库
TeamDev2 小时前
JxBrowser 9.5.2 版本发布啦!
java·前端·windows·chromium·混合应用·jxbrowser·浏览器控件
IT大白鼠2 小时前
彭大帅的AI运维助手——自然语言管理 Linux 集群与网络设备——第 5 篇 · 多模态与虚拟化AI 能「看」图:多模态与虚拟化管理
linux·运维·人工智能
阿狗童鞋2 小时前
Nginx反向代理与负载均衡实战指南
运维·nginx·负载均衡
IT大白鼠3 小时前
彭大帅的AI运维助手——自然语言管理 Linux 集群与网络设备——第 2 篇 · 安全守规矩的 AI:分级安全管控是灵魂
linux·运维·人工智能