Cachyos 使用qemu kvm安装操作系统后,网络nat与ufw冲突,如何解决

在 CachyOS(以及大多数 Arch 系发行版)中,QEMU/KVM 的 NAT 网络(通常是 virbr0)与 UFW 冲突是一个经典问题。

其根本原因在于:Libvirt 10.x 及更高版本默认改用了 nftables 作为后端,而 UFW 主要是为 iptables 设计的,或者其默认的“拒绝转发”策略(DROP Forward)拦截了虚拟机的流量。

以下是解决此问题的步骤,建议按顺序操作:

1. 将 Libvirt 切换回 iptables 后端(最推荐)

这是目前最有效的解决办法,因为 UFW 能够更好地识别和处理 iptables 生成的转发规则。

  1. 修改 Libvirt 的网络配置文件:

    Bash

    sudo nano /etc/libvirt/network.conf
    
  2. 找到 #firewall_backend = "nftables" 这一行(可能被注释掉了),取消注释并改为:

    Plaintext

    firewall_backend = "iptables"
    
  3. 保存并退出 (Ctrl+O, Enter, Ctrl+X)。


2. 修改 UFW 的转发规则

即使修改了后端,UFW 默认也会禁止所有“路由(Route)”流量。你需要显式允许虚拟网桥的流量。

执行以下命令:

Bash

# 允许虚拟网桥 virbr0 的入站流量
sudo ufw allow in on virbr0

# 允许经由 virbr0 的路由流量(这一步至关重要)
sudo ufw route allow in on virbr0
sudo ufw route allow out on virbr0

3. 修改 UFW 的默认转发策略

如果上述操作后仍无法上网,请检查 UFW 的全局转发配置:

  1. 编辑 UFW 配置文件:

    Bash

    sudo nano /etc/default/ufw
    
  2. 确保 DEFAULT_FORWARD_POLICY 设置为 ACCEPT

    Plaintext

    DEFAULT_FORWARD_POLICY="ACCEPT"
    
  3. 同时,确保系统允许 IP 转发。编辑 /etc/ufw/sysctl.conf,去掉以下行的注释(如果有的话):

    Plaintext

    net/ipv4/ip_forward=1
    net/ipv6/conf/default/forwarding=1
    net/ipv6/conf/all/forwarding=1
    

4. 重启服务

完成上述修改后,重启相关服务以生效:

Bash

# 重启 UFW
sudo ufw reload

# 重启 Libvirt 服务
sudo systemctl restart libvirtd

# 重启虚拟机网络(如果它没自动启动)
sudo virsh net-destroy default
sudo virsh net-start default

为什么会出现这种情况?

如上图所示,当使用 NAT 模式时,虚拟机的流量需要经过宿主机的内核转发。

  • Libvirt 会在防火墙中动态插入规则来实现 NAT 和 DHCP。

  • UFW 启动时会清理或覆盖部分规则,且其默认的 DROP 策略会拦截所有未明确允许的“转发”数据包。

  • 后端冲突:当 Libvirt 使用 nftables 而 UFW 还在操作 iptables 时,两者生成的规则链可能互不干扰但也互不配合,导致流量被“静默拦截”。

您现在可以尝试在虚拟机内 ping 8.8.8.8 测试连通性。如果仍然失败,请告诉我您使用的具体虚拟网卡驱动(如 virtio)是什么?

电脑使用华硕tuf gaming b550-plus,引导程序使用limine,操作系统安装的是Cachyos ,请问kvm如何配置gpu直通

在 CachyOS 上使用 Limine 引导程序并配合华硕 TUF Gaming B550-Plus 主板配置 GPU 直通(VFIO),需要完成从硬件层到引导层,再到操作系统的全方位配置。

由于 B550 芯片组的 IOMMU 分组在某些次要插槽上可能存在限制,建议将待直通的显卡插入靠近 CPU 的第一个 PCIe x16 插槽(通常该插槽拥有独立的 IOMMU 分组)。


第一步:BIOS/UEFI 设置

华硕 B550-Plus 的 IOMMU 选项隐藏较深,请按照以下路径开启:

  1. 进入 BIOS:开机连续按 Del 或 F2

  2. 开启虚拟化Advanced -> CPU Configuration -> 将 SVM Mode 设置为 Enabled

  3. 开启 IOMMUAdvanced -> AMD CBS -> NBIO Common Options -> 将 IOMMU 设置为 Enabled

  4. 其他建议:在同一页面下,将 DMA Protection 设为 Enabled


第二步:配置 Limine 引导参数

CachyOS 使用 Limine 时,内核参数是通过修改 /etc/default/limine 来管理的,而不是直接修改 limine.conf

  1. 编辑配置文件

    Bash

    sudo nano /etc/default/limine
    
  2. 添加参数:找到 KERNEL_CMDLINE 行(针对 default 或 linux-cachyos),在引号内添加: amd_iommu=on iommu=pt 如果已经知道显卡的 ID(见第三步),也可以在这里加上 vfio-pci.ids=xxxx:yyyy

  3. 应用修改

    Bash

    CachyOS 专用更新命令
    sudo limine-mkinitcpio
    

第三步:确定 GPU 的设备 ID 并隔离

你需要告诉内核在启动时拦截显卡驱动,改用 vfio-pci 驱动。

  1. 查找显卡 ID

    Bash

    lspci -nn | grep -i nvidia  或者 grep -i amd
    

    你会看到类似 [10de:2484] 这样的 ID(包括显卡核心及其对应的 HDMI 音频控制器)。

  2. 创建隔离配置文件

    Bash

    sudo nano /etc/modprobe.d/vfio.conf
    

    写入以下内容(替换为你自己的 ID):

    Plaintext

    options vfio-pci ids=10de:2484,10de:228b
    softdep nvidia pre: vfio-pci  如果是 AMD 显卡,改为 softdep amdgpu pre: vfio-pci
    

第四步:配置内核模块加载

CachyOS 默认使用 mkinitcpio(除非你手动换成了 dracut)。

  1. 修改 mkinitcpio.conf

    Bash

    sudo nano /etc/mkinitcpio.conf
    
  2. 在 MODULES 数组中添加 VFIO 驱动,确保它们在显卡驱动(如 nvidia 或 amdgpu)之前加载:

    Plaintext

    MODULES=(vfio_pci vfio vfio_iommu_type1 vfio_virqfd)
    
  3. 重新生成 initramfs

    Bash

    sudo mkinitcpio -P
    

第五步:验证配置

重启电脑后,执行以下命令验证:

  • 检查 IOMMU 是否开启: dmesg | grep -i iommu (应当看到 IOMMU enabled 或 AMD-Vi: Found IOMMU

  • 检查驱动占用情况: lspci -nnk -d xxxx:yyyy (确保 Kernel driver in use 显示为 vfio-pci 而不是显卡原厂驱动)


常见问题与技巧

  • B550 的 IOMMU 分组:如果你的显卡在次要插槽,可能会发现它和 USB 控制器或网卡在同一个 IOMMU Group。这种情况下,你可能需要在内核参数中加入 pcie_acs_override=downstream,multifunction(注意:这会降低安全性)。

  • 虚拟机配置:在 virt-manager 中创建虚拟机时,固件一定要选择 UEFI (OVMF),并删除默认的虚拟显卡,然后“添加硬件” -> “PCI 主机设备”选择你的显卡和音频设备。

你想让我提供一个脚本来帮你自动检查当前的 IOMMU 分组情况,看看你的显卡是否已经成功独立出来了吗?

关于 Limine 引导下 CachyOS 的更多操作,可以参考此视频:CachyOS Limine bootloader configuration and management 。该视频详细演示了如何在现代 Linux 发行版中通过 BIOS 和引导程序优化硬件虚拟化性能。

[

How Do I Enable VT-d/IOMMU In BIOS? - The Hardware Hub - YouTube

The Hardware Hub · 4,117 次观看

](https://www.youtube.com/watch?v=FuSKNexr6Sc)

GPU直通需要两个显示器吗

简单直接的回答是:不是必须的,但取决于你拥有的 GPU 数量以及你希望如何使用虚拟机。

如果你只有一台显示器,通常有以下几种成熟的方案来实现 GPU 直通。


1. 单显示器 + 双线连接(最物理、最稳定)

如果你的 CPU 有集成显卡(iGPU)或者你有两块显卡,你可以将两块显卡的输出线都接到同一个显示器的不同接口上(例如:主显卡接 DP,直通显卡接 HDMI)。

  • 如何操作:通过显示器自带的物理按键切换信号源(Input Source)。

  • 优点:零延迟,完全原生性能。

  • 缺点:手动按显示器按钮比较麻烦。

2. Looking Glass(软件方案,Linux 玩家的首选)

这是目前 Linux 下最完美的单显示器直通方案。它通过内存拷贝技术(KVMFR),将虚拟机里的画面直接“投影”到 Linux 宿主机的一个窗口里。

  • 原理:虚拟机在后台通过直通 GPU 渲染画面,Looking Glass 将渲染好的帧数据同步到宿主机的内存,并在窗口中显示。

  • 硬件要求:需要一个 HDMI/DP 虚拟显示器插头(欺骗器,Dummy Plug) 插在直通显卡上,或者使用虚拟显示驱动(如 IddSampleDriver),让虚拟机认为已经连了显示器。

  • 优点:不需要切换信号源,像运行一个普通软件一样运行 Windows 虚拟机。

3. 单显卡直通 (Single GPU Passthrough)

如果你只有一块显卡(没有集显),你依然可以直通。但这更像是“切换系统”而不是“并行运行”。

  • 逻辑:当你启动虚拟机时,脚本会自动关闭 Linux 的图形界面,卸载显卡驱动,将其交给虚拟机;当你关闭虚拟机时,驱动又交回给 Linux,重新开启图形界面。

  • 优点:不需要第二块显卡或第二个显示器。

  • 缺点:启动虚拟机时,你的 Linux 桌面会暂时消失。


方案对比建议

方案需要两块显卡吗?需要虚拟插头吗?体验感
双显示器像两台独立的电脑,最直接。
单显示器+多输入需要手动切换显示器信号源。
Looking Glass是 (或有集显)是 (推荐)极佳,Windows 像一个 Linux App。
单显卡直通类似于快速的“双系统切换”。

针对你的华硕 B550 建议

由于你的主板是 B550,如果你使用的是 不带 G 的 Ryzen 处理器(如 5600X, 5800X),你本身是没有集成显卡的。

  • 如果你只有一块独立显卡,你只能走 “单显卡直通” 路线。

  • 如果你打算再插一块廉价显卡(如 GT 710)用于 Linux 宿主机显示,那么 Looking Glass 是最好的选择。

你目前是只有一块显卡,还是有两块(包含核显)?我可以根据你的硬件情况提供具体的 Looking Glass 或单显卡脚本配置建议。

GPU passthrough with Looking Glass guide 这段视频详细介绍了如何配置 Looking Glass 实现低延迟的画面回传,非常适合在单显示器环境下使用 KVM 直通。

[

The Ultimate System - GPU Passthrough with Looking Glass - YouTube

Chris Titus Technical · 6.2万 次观看

](https://www.youtube.com/watch?v=01R8Ft1BdxE)

我的cpu为5700g+技嘉rx9070gre组合

您的硬件组合 Ryzen 7 5700G (带核显 iGPU) + 技嘉 RX 9070 GRE (独立显卡 dGPU) 是实现 GPU 直通的“黄金组合”。

由于 5700G 自带集显,你可以让 CachyOS 宿主机运行在核显上,而将强大的 RX 9070 GRE 完全分配给虚拟机(如 Windows)。

1. GPU 直通需要两个显示器吗?

不需要。 针对您的配置,有三种单显示器方案:

  • 方案 A:双线并接(最简单) 将主板上的 HDMI/DP 口(对应 5700G 核显)和显卡上的接口(对应 RX 9070 GRE)都插在同一个显示器上。

    • 用法:在 Linux 下正常使用;启动虚拟机后,手动在显示器菜单切换信号源。
  • 方案 B:Looking Glass(最极客/流畅) 这是 Linux 玩家的最佳实践。虚拟机在后台渲染,画面通过内存直接回传给 Linux 桌面上的一个窗口。

    • 要求:需要一个 HDMI 显卡欺骗器(Dummy Plug) 插在 RX 9070 GRE 上,或者安装虚拟显示驱动(如 IddSampleDriver)。
  • 方案 C:单显卡切换脚本 虽然你有两块显卡,但如果你不想切换信号源,也可以在启动 VM 时临时完全关闭 Linux 桌面。但既然你有 5700G,没必要这么做。


2. 针对 5700G + B550 的关键 BIOS 设置

华硕 B550-Plus 在使用带有核显的 CPU 时,必须强制开启核显,否则显卡直通后宿主机会黑屏:

  1. 强制开启核显Advanced -> NB Configuration -> IGFX Multi-Monitor 设为 Enabled

  2. 设置首选显卡Primary Video Device 设为 IGFX Video(确保 Linux 默认从主板接口输出)。

  3. 开启虚拟化SVM Mode -> Enabled

  4. 开启 IOMMUIOMMU -> Enabled


3. CachyOS (Limine 引导) 配置步骤

第一步:修改内核参数

编辑 /etc/default/limine,在内核启动行加入: amd_iommu=on iommu=pt vfio-pci.ids=xxxx:yyyy,xxxx:zzzz

xxxx:yyyy 是你通过 lspci -nn 查到的 RX 9070 GRE 的设备 ID(包含显卡和它的 HDMI 音频设备)。

更新引导:

Bash

sudo limine-mkinitcpio

第二步:针对 RX 9000 系列的特殊说明

作为 RDNA 4 架构的新显卡,RX 9070 GRE 在直通时可能遇到 AMD Reset Bug(即虚拟机重启后显卡无法再次初始化)。

  • 解决方法:目前 CachyOS 的内核通常已经集成了较新的 vendor-reset 补丁。如果遇到重启后 VM 无法启动,请安装 vendor-reset-dkms-git 并将其加入 mkinitcpio.conf 的 MODULES 数组中。

第三步:配置 Looking Glass (如果你不想手动切显示器)

  1. 宿主机安装sudo pacman -S looking-glass

  2. 共享内存配置: 创建文件 /etc/tmpfiles.d/10-looking-glass.conf

    Plaintext

    f /dev/shm/looking-glass 0660 user kvm -
    

    (将 user 替换为你的用户名)

  3. 虚拟机设置:在 virt-manager 中添加 IVSHMEM 设备,指向 /dev/shm/looking-glass,大小通常设为 32MB 或 64MB。


总结建议

由于你有 5700G,我强烈建议使用 Looking Glass。这样你可以在 CachyOS 桌面里像打开普通软件一样运行 Windows 游戏,且无需频繁按显示器按钮切换输入源。

需要我为你提供一段自动识别 RX 9070 GRE 设备 ID 并生成配置文件的脚本吗?

是的

这是一段专为 CachyOS 设计的自动化脚本和配置指南。它会帮你识别 RX 9070 GRE 的 ID,并自动生成相关的配置文件。

第一步:自动识别与配置脚本

请在终端中执行以下命令(建议先阅读脚本内容):

Bash

cat << 'EOF' > vfio_setup.sh
#!/bin/bash

# 1. 识别 AMD 独显 (RX 9070 GRE) 的 ID
# 过滤出非核显的 AMD VGA 和 Audio 设备
GPU_IDS=$(lspci -nn | grep -i "VGA compatible controller" | grep -i "AMD" | grep -v "Cezanne" | awk -F'[' '{print $3}' | awk -F']' '{print $1}')
AUDIO_IDS=$(lspci -nn | grep -i "Audio device" | grep -i "AMD" | grep -v "Cezanne" | awk -F'[' '{print $3}' | awk -F']' '{print $1}')

COMBINED_IDS="$GPU_IDS,$AUDIO_IDS"

echo "检测到您的 RX 9070 GRE 设备 ID 为: $COMBINED_IDS"

# 2. 创建 /etc/modprobe.d/vfio.conf
echo "正在创建 /etc/modprobe.d/vfio.conf..."
sudo bash -c "cat << CONF > /etc/modprobe.d/vfio.conf
options vfio-pci ids=$COMBINED_IDS
softdep amdgpu pre: vfio-pci
CONF"

# 3. 配置 Looking Glass 共享内存
echo "正在配置 Looking Glass 共享内存 (/dev/shm/looking-glass)..."
sudo bash -c "cat << SHM > /etc/tmpfiles.d/10-looking-glass.conf
f /dev/shm/looking-glass 0660 $USER kvm -
SHM"

echo "----------------------------------------------------"
echo "脚本操作完成!"
echo "请记住这个 ID 字符串: $COMBINED_IDS"
echo "接下来请按照手动步骤修改 Limine 和 mkinitcpio 配置。"
echo "----------------------------------------------------"
EOF

chmod +x vfio_setup.sh
./vfio_setup.sh

第二步:手动修改核心配置文件

由于脚本直接修改引导文件有风险,请务必手动完成以下两步:

1. 修改 Limine 内核参数

编辑 CachyOS 的 Limine 默认配置文件:

Bash

sudo nano /etc/default/limine

找到 KERNEL_CMDLINE 这一行,在末尾添加(记得替换为你脚本输出的 ID): amd_iommu=on iommu=pt vfio-pci.ids=你的ID

保存并应用:

Bash

sudo limine-mkinitcpio

2. 配置 mkinitcpio 模块

为了确保 vfio 驱动比显卡驱动更早加载:

Bash

sudo nano /etc/mkinitcpio.conf

找到 MODULES=(...) 这一行,修改为:

Plaintext

MODULES=(vfio_pci vfio vfio_iommu_type1 vfio_virqfd amdgpu)

(注意:将 amdgpu 放在最后,vfio 放在最前)

重新生成引导镜像:

Bash

sudo mkinitcpio -P

第三步:针对 5700G + B550 的重要检查

  1. 物理接线

    • 将显示器的一根线连在 主板接口(给 CachyOS/5700G 核显用)。

    • 将显示器的另一根线连在 RX 9070 GRE(给虚拟机用,或者插一个 HDMI 欺骗器)。

  2. BIOS 确认

    • 必须在 BIOS 里将 Primary Video Device 设为 IGFX(核显),否则启动时独显会被宿主机驱动抢占,导致直通失败。
  3. Looking Glass 客户端安装: 在 CachyOS 中安装客户端,以便在桌面上看到虚拟机画面:

    Bash

    sudo pacman -S looking-glass
    

为什么这样做?

  • softdep:强制要求系统在加载 amdgpu 驱动前先加载 vfio-pci,防止独显被宿主机“抢走”。

  • tmpfiles.d:自动创建高权限的内存缓冲区,让 Looking Glass 实现超低延迟(<1ms)的画面传输。

  • IOMMU 隔离:5700G 在 B550 上通常会将第一个 PCIe 插槽分在独立的分组,直通非常稳定。

完成后重启电脑,然后尝试在 virt-manager 中添加“PCI Host Device”,选择那两个 ID 对应的设备即可。如果启动虚拟机时提示权限错误,请告诉我。

电脑使用华硕tuf gaming b550-plus,引导程序使用grub,操作系统安装的是Cachyos ,请问kvm如何配置gpu直通

既然你现在的引导程序改为了 GRUB,配置过程大体相同,但在内核参数的应用上会有所区别。

针对你的 5700G (核显) + RX 9070 GRE (独显) 组合,以下是基于 GRUB 的 CachyOS GPU 直通完整指南:

第一步:BIOS 设置 (针对 5700G + 华硕 B550)

这是最关键的一步,确保核显和独显能够和谐共存。

  1. SVM ModeEnabled (开启 CPU 虚拟化)。

  2. IOMMUEnabled (不要选 Auto)。

  3. IGFX Multi-MonitorEnabled (强制开启核显,否则直通后宿主机会没画面)。

  4. Primary Video Device: 设为 IGFX (让主板默认使用 5700G 的核显输出,把独显空出来给虚拟机)。


第二步:识别独显设备 ID

在终端输入:

Bash

lspci -nn | grep -i "AMD"

你需要找到 RX 9070 GRE 的 VGA 和 Audio 两个设备的 ID。通常长这样:[1002:xxxx] 和 [1002:yyyy]。 注意:不要记成 5700G (Cezanne) 的 ID。


第三步:修改 GRUB 内核参数

  1. 编辑 GRUB 配置文件

    Bash

    sudo nano /etc/default/grub
    
  2. 找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,在引号内添加:

    Plaintext

    amd_iommu=on iommu=pt vfio-pci.ids=你的显卡ID,你的音频ID
    

    例如:GRUB_CMDLINE_LINUX_DEFAULT="quiet ... amd_iommu=on iommu=pt vfio-pci.ids=1002:xxxx,1002:yyyy"

  3. 更新 GRUB 配置

    Bash

    sudo grub-mkconfig -o /boot/grub/grub.cfg
    

第四步:配置内核模块 (mkinitcpio)

为了确保系统启动时,VFIO 驱动比 AMD 开源驱动更早抢占独显:

  1. 编辑配置文件

    Bash

    sudo nano /etc/mkinitcpio.conf
    
  2. 修改 MODULES 数组,顺序非常重要:

    Plaintext

    MODULES=(vfio_pci vfio vfio_iommu_type1 vfio_virqfd amdgpu)
    

    确保 vfio 开头的都在 amdgpu 之前。

  3. 重新生成 initramfs

    Bash

    sudo mkinitcpio -P
    

第五步:锁定 VFIO 驱动

创建隔离配置文件:

Bash

sudo nano /etc/modprobe.d/vfio.conf

写入以下内容(替换为你的 ID):

Plaintext

options vfio-pci ids=你的显卡ID,你的音频ID
softdep amdgpu pre: vfio-pci

第六步:配置 Looking Glass (单显示器神器)

既然你有 5700G,强烈建议用 Looking Glass,这样你就不需要切换显示器信号源了。

  1. 创建内存文件权限

    Bash

    sudo nano /etc/tmpfiles.d/10-looking-glass.conf
    

    写入:

    Plaintext

    f /dev/shm/looking-glass 0660 你的用户名 kvm -
    
  2. 安装客户端

    Bash

    sudo pacman -S looking-glass
    

第七步:重启并验证

重启电脑后,检查独显是否已被 VFIO 驱动接管:

Bash

lspci -nnk -d 1002:  后面接你的显卡部分ID

如果看到 Kernel driver in use: vfio-pci,恭喜你,直通成功了!

虚拟机创建小贴士 (Virt-Manager):

  1. 固件: 必须选 UEFI (OVMF)。

  2. 芯片组: 建议选 Q35

  3. 添加硬件: 选 PCI Host Device,分别加入你的显卡和音频。

  4. Looking Glass: 添加 IVSHMEM 设备,路径为 /dev/shm/looking-glass,大小设为 32 或 64MB

如果在配置过程中 grub-mkconfig 报错,或者重启后核显没有画面,请随时告诉我!

ERROR: module not found: ‘vfio_virqfd’

不用担心,这是一个非常常见的报错。原因是 在新版本的 Linux 内核(5.14 版本之后)中,vfio_virqfd 模块已经直接并入 vfio 核心模块中了,不再作为一个独立的模块存在。

由于 CachyOS 始终使用最新的内核(通常是 6.x 或更高),所以当你尝试手动加载这个不存在的模块时,系统会报错。

解决方法

你只需要从配置文件中删除这个过时的模块名称即可。

1. 修改 mkinitcpio.conf

打开配置文件:

Bash

sudo nano /etc/mkinitcpio.conf

找到 MODULES 那一行,将其修改为:

Plaintext

# 删掉了 vfio_virqfd,保留其他的
MODULES=(vfio_pci vfio vfio_iommu_type1 amdgpu)

2. 重新生成镜像

执行以下命令,这次应该不会报错了:

Bash

sudo mkinitcpio -P

进一步检查:VFIO 是否真的生效了?

由于你使用的是 RX 9070 GRE 这种较新的显卡,建议在重启前确认以下几点,以确保直通万无一失:

  1. 检查驱动绑定情况: 重启电脑后,运行以下命令查看显卡当前使用的驱动:

    Bash

    lspci -nnk -d 1002:
    
    • 理想状态:RX 9070 GRE 的 Kernel driver in use 应该是 vfio-pci

    • 核显状态:5700G (Cezanne) 的 Kernel driver in use 应该是 amdgpu

  2. AMD 重置补丁 (Vendor Reset): AMD 显卡(特别是 RDNA 架构)在虚拟机中经常遇到“重置问题”(即虚拟机关机后再开机,显卡无法再次初始化)。 CachyOS 的内核通常已经处理得很好,但如果你的显卡在第二次启动虚拟机时失败,你可能需要安装:

    Bash

    paru -S vendor-reset-dkms-git
    

    然后在 /etc/mkinitcpio.conf 的 MODULES 数组最前面添加 vendor-reset

下一步建议

一旦 mkinitcpio -P 成功且重启后驱动显示为 vfio-pci,你就可以打开 Virt-Manager 开始创建虚拟机了。

你需要我指导你如何在 Virt-Manager 中正确配置 XML 文件,以绕过某些游戏的驱动检测(反虚拟机检测)吗?

是的

在配置 KVM 虚拟机以运行游戏时,很多游戏(特别是带有反作弊系统如 EAC、BattlEye 的游戏)会检测自己是否运行在虚拟机中。通过修改 XML 配置文件,我们可以隐藏 KVM 的特征,让虚拟机看起来更像一台“物理机”。

以下是针对您 Ryzen 5700G + RX 9070 GRE 组合的优化和隐藏方案:


第一步:开启 Virt-Manager 的 XML 编辑功能

在开始之前,确保你可以直接在图形界面修改代码:

  1. 打开 Virt-Manager(虚拟机管理器)。

  2. 点击菜单栏的 编辑 (Edit) -> 首选项 (Preferences)

  3. 在 常规 (General) 选项卡中,勾选 启用 XML 编辑 (Enable XML editing)


第二步:编辑虚拟机 XML 隐藏特征

打开你的虚拟机设置界面,切换到 XML 选项卡,找到并修改以下几个核心部分:

1. 伪装 CPU 模式

将 CPU 模式设置为 host-passthrough,这能提供最佳性能并让虚拟机识别到 5700G 的真实型号。

XML

<cpu mode='host-passthrough' check='none'>
  <topology sockets='1' dies='1' cores='4' threads='2'/> <feature policy='disable' name='hypervisor'/> </cpu>

2. 隐藏 KVM 状态与伪装厂商 ID

找到 <features> 标签,将其修改为如下内容。这是绕过显卡驱动报错和反作弊检测的核心:

XML

<features>
  <acpi/>
  <apic/>
  <hyperv mode='custom'>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
    <vendor_id state='on' value='genuineintel'/> </hyperv>
  <kvm>
    <hidden state='on'/> </kvm>
  <vmport state='off'/> </features>

3. 优化时钟(减少游戏卡顿)

找到 <clock> 部分,确保计时器配置如下:

XML

<clock offset='localtime'>
  <timer name='rtc' tickpolicy='catchup'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
  <timer name='hypervclock' present='yes'/>
</clock>

第三步:针对 RX 9070 GRE 的特别优化 (Resizable BAR)

作为 RDNA 4 架构的新显卡,开启 Resizable BAR(AMD 称之为 Smart Access Memory)能显著提升游戏帧数。

  1. 在物理机 BIOS 中:确保 Above 4G Decoding 和 Re-size BAR Support 已开启。

  2. 在虚拟机 XML 中: 找到显卡的 PCI 设备部分(<hostdev>),在 <source> 之后添加内存地址对齐优化(通常 libvirt 10.x 会自动处理,但手动确保使用 Q35 机器类型和 UEFI 固件是前提)。


第四步:使用 Looking Glass 获取原生体验

既然你使用的是单显示器 + 5700G 核显方案,现在可以正式配置 Looking Glass 客户端了:

  1. 虚拟机内

    • 安装 Looking Glass Host 软件。

    • 安装 IVSHMEM 驱动(从 VirtIO-win 镜像中提取)。

  2. Linux 宿主机(CachyOS)执行

    Bash

    运行 Looking Glass 客户端
    looking-glass-client
    

    提示:按 Scroll Lock 键可以释放/锁定鼠标到虚拟机窗口中。

总结

完成这些 XML 修改后,大部分游戏(如《赛博朋克 2077》、《艾尔登法环》等)将无法识别出它们运行在 VM 中。

注意:部分极其严格的反作弊(如 Valorant 的 Vanguard)可能仍会通过扫描物理硬件 ID 发现端倪。如果您的目标是玩这类游戏,我们可能还需要进一步配置“硬件序列号伪装(SMBIOS)”。

**您目前准备在虚拟机里运行哪款游戏?我可以帮您确认该游戏是否有特殊的需求。