Proxmox VE 8 核显直通折腾记:从花屏无声到完美出声

本文摘要Proxmox VE 8 核显直通折腾记:从花屏无声到完美出声折腾了一整天,终于把 PVE 8.4 下 Intel i5-1240P 核显直通搞定了:画面正常、HDMI 声音正常、群晖人脸识别正常。同时郑重提醒:PVE 9 已经不支持核显完美直通了,还在用 PVE 9 的朋友建议尽快降回 PVE 8。 这篇文章把踩过的坑和最终的解决方案完整记录下来,希望能帮后来者少走弯路。(下面接着前面的正文即可...

Proxmox VE 8 核显直通折腾记:从花屏无声到完美出声

折腾了一整天,终于把 PVE 8.4 下 Intel i5-1240P 核显直通搞定了:画面正常、HDMI 声音正常、群晖人脸识别正常。同时郑重提醒:PVE 9 已经不支持核显完美直通了,还在用 PVE 9 的朋友建议尽快降回 PVE 8。 这篇文章把踩过的坑和最终的解决方案完整记录下来,希望能帮后来者少走弯路。

(下面接着前面的正文即可,这一整篇可以直接复制到博客发布。)

一、问题背景

设备配置:

  • CPU:Intel i5-1240P(12 核 16 线程,Alder Lake-P,Iris Xe 核显)
  • 系统:Proxmox VE 8.4
  • 目标:核显直通给 Windows 10 和群晖,实现画面输出 + HDMI 声音 + 人脸识别加速

在 PVE 8.4 上配置核显直通后,出现的症状:

  • 虚拟机启动花屏,要重启第二次才正常
  • 画面正常但没有声音,喇叭显示红叉
  • 报错 legacy IGD assignment requires VGA mode to be 'none'
  • 驱动安装报错,设备管理器显示 Code 43

二、根本原因:QEMU 9.2 移除了 Legacy 模式支持

这是整个问题的核心原因。

  • PVE 8.3.5 及更早:自带 QEMU 9.1.x,支持 legacy-igd=1,核显直通正常
  • PVE 8.4:自带 QEMU 9.2.0,移除了 Legacy 模式支持,legacy-igd=1 失效
  • PVE 9:自带 QEMU 11.x,问题更严重,直接报错说不支持 12 代核显 Legacy 模式

用命令确认你的 QEMU 版本:

kvm --version

如果显示 9.2.0 或更高,那你的核显直通大概率会失败。

三、解决方案:降级 QEMU 到 9.1.2-3

1. 添加 PVE 8.3 的软件源

echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-8.3.list
apt update

2. 降级 QEMU

apt install pve-qemu-kvm=9.1.2-3

3. 锁定版本(关键!)

apt-mark hold pve-qemu-kvm

这一步非常重要,否则系统升级时会把 QEMU 升回 9.2.0,直通立即失效。

4. 验证

kvm --version
apt-mark showhold

kvm --version 应显示 9.1.2,apt-mark showhold 应包含 pve-qemu-kvm。

四、完整直通配置

1. GRUB 参数

编辑 /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"

然后执行:

update-grub

2. VFIO 模块

编辑 /etc/modules,加入:

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

3. 屏蔽宿主机驱动

编辑 /etc/modprobe.d/pve-blacklist.conf:

blacklist i915
blacklist xe
blacklist snd_hda_intel
options vfio_iommu_type1 allow_unsafe_interrupts=1

4. 绑定 vfio-pci

先查核显和声卡的 PCI ID:

lspci -nn | grep -E "VGA|Audio"

我的输出是 8086:46a6(核显)和 8086:51c8(声卡),创建 /etc/modprobe.d/vfio.conf:

options vfio-pci ids=8086:46a6,8086:51c8

5. 更新并重启

update-initramfs -u -k all
reboot

6. 验证绑定成功

lspci -nnk -s 00:02.0
lspci -nnk -s 00:1f.3

两个都应显示 Kernel driver in use: vfio-pci。

五、虚拟机配置

关键是使用老高为 1240P 制作的二合一 ROM(1240P_vbios.rom),只挂在核显上,声卡纯直通。

agent: 1
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on
bios: ovmf
boot: order=scsi0
cores: 12
cpu: host
efidisk0: local:102/vm-102-disk-0.qcow2,efitype=4m,pre-enrolled-keys=1,size=528K
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=1240P_vbios.rom
hostpci1: 0000:00:1f.3
ide0: local:iso/virtio-win.iso,media=cdrom,size=856810K
machine: pc-i440fx-8.0
memory: 16384
name: Win10-AIO
net0: virtio=BC:24:11:28:E2:60,bridge=vmbr0
numa: 0
onboot: 1
ostype: l26
scsi0: local:102/vm-102-disk-1.qcow2,cache=writethrough,iothread=1,size=120G,ssd=1
scsihw: virtio-scsi-single
sockets: 1
vga: none

关键点:

  • machine: pc-i440fx-8.0 —— 必须是 i440fx,不能用 Q35
  • hostpci0 带 legacy-igd=1 —— 启用 Legacy 直通模式
  • hostpci1 不带 romfile —— 二合一 ROM 已经包含声卡所需的 GOP
  • vga: none —— 必须,否则报 legacy IGD assignment requires VGA mode to be 'none'
  • ostype: l26 —— 设为 Linux 提高直通稳定性

六、ROM 文件说明

  • 放在 /usr/share/kvm/ 目录
  • 12 代移动端推荐使用 1240P 专用二合一 ROM,不要用通用的 gen12_igd.rom + gen12_gop.rom(通用版有 88 个 GOP 互相干扰,会导致花屏和无声)
  • 如果没有专用 ROM,可以从自己机器的 BIOS 里提取 IntelGopDriver.efi,用 EfiRom 生成

七、HDMI 声音问题

直通后可能一开始没声音,这是正常现象。HDMI 音频的初始化需要虚拟机启动、核显驱动加载、电视握手三者时序对齐。

解决方法:多重启几次虚拟机。一旦初始化成功,声音就会稳定出现,之后不用再管。

八、群晖核显直通

群晖直通核显用于 Photos 人脸识别,配置和 Windows 类似,但需要:

  1. 群晖虚拟机 hostpci0 加 ,legacy-igd=1
  2. 显示设为 none
  3. 进入群晖 SSH 验证:ls /dev/dri,出现 card0 和 renderD128 即成功

九、重要提醒

  1. 备份“三大件”:

    • ROM 文件(1240P_vbios.rom)
    • 虚拟机配置(102.conf)
    • QEMU 降级包(pve-qemu-kvm_9.1.2-3_amd64.deb)
  2. 不要用 PVE 界面的“停止”按钮关机,会恢复不过来,用 qm shutdown 优雅关机
  3. 不要开 Windows 的休眠、睡眠,直通模式下容易出问题
  4. 不要再升级 QEMU,任何尝试升级都可能让直通重新失效
  5. 内核升级要谨慎:升级后重启 PVE 可能影响直通,出问题就回退旧内核

十、总结

核显直通问题的核心就是一句话:

PVE 8.4 自带的 QEMU 9.2 移除了 Legacy 模式支持,必须降级到 9.1.2-3 并锁定。

排查顺序:

  1. kvm --version 看 QEMU 版本
  2. 如果是 9.2+,降级 QEMU 到 9.1.2-3
  3. apt-mark hold pve-qemu-kvm 锁定
  4. 使用匹配 CPU 型号的专用 ROM
  5. 多重启几次等 HDMI 音频初始化

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~