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 生成的转发规则。
修改 Libvirt 的网络配置文件:
Bash
sudo nano /etc/libvirt/network.conf找到
#firewall_backend = "nftables"这一行(可能被注释掉了),取消注释并改为:Plaintext
firewall_backend = "iptables"保存并退出 (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 的全局转发配置:
编辑 UFW 配置文件:
Bash
sudo nano /etc/default/ufw确保
DEFAULT_FORWARD_POLICY设置为ACCEPT:Plaintext
DEFAULT_FORWARD_POLICY="ACCEPT"同时,确保系统允许 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 选项隐藏较深,请按照以下路径开启:
进入 BIOS:开机连续按
Del或F2。开启虚拟化:
Advanced->CPU Configuration-> 将 SVM Mode 设置为Enabled。开启 IOMMU:
Advanced->AMD CBS->NBIO Common Options-> 将 IOMMU 设置为Enabled。其他建议:在同一页面下,将 DMA Protection 设为
Enabled。
第二步:配置 Limine 引导参数
CachyOS 使用 Limine 时,内核参数是通过修改 /etc/default/limine 来管理的,而不是直接修改 limine.conf。
编辑配置文件:
Bash
sudo nano /etc/default/limine添加参数:找到
KERNEL_CMDLINE行(针对default或linux-cachyos),在引号内添加:amd_iommu=on iommu=pt如果已经知道显卡的 ID(见第三步),也可以在这里加上vfio-pci.ids=xxxx:yyyy。应用修改:
Bash
CachyOS 专用更新命令 sudo limine-mkinitcpio
第三步:确定 GPU 的设备 ID 并隔离
你需要告诉内核在启动时拦截显卡驱动,改用 vfio-pci 驱动。
查找显卡 ID:
Bash
lspci -nn | grep -i nvidia 或者 grep -i amd你会看到类似
[10de:2484]这样的 ID(包括显卡核心及其对应的 HDMI 音频控制器)。创建隔离配置文件:
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)。
修改 mkinitcpio.conf:
Bash
sudo nano /etc/mkinitcpio.conf在 MODULES 数组中添加 VFIO 驱动,确保它们在显卡驱动(如 nvidia 或 amdgpu)之前加载:
Plaintext
MODULES=(vfio_pci vfio vfio_iommu_type1 vfio_virqfd)重新生成 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 时,必须强制开启核显,否则显卡直通后宿主机会黑屏:
强制开启核显:
Advanced->NB Configuration-> IGFX Multi-Monitor 设为Enabled。设置首选显卡:Primary Video Device 设为
IGFX Video(确保 Linux 默认从主板接口输出)。开启虚拟化:
SVM Mode->Enabled。开启 IOMMU:
IOMMU->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 (如果你不想手动切显示器)
宿主机安装:
sudo pacman -S looking-glass。共享内存配置: 创建文件
/etc/tmpfiles.d/10-looking-glass.conf:Plaintext
f /dev/shm/looking-glass 0660 user kvm -(将 user 替换为你的用户名)。
虚拟机设置:在
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 的重要检查
物理接线:
将显示器的一根线连在 主板接口(给 CachyOS/5700G 核显用)。
将显示器的另一根线连在 RX 9070 GRE(给虚拟机用,或者插一个 HDMI 欺骗器)。
BIOS 确认:
- 必须在 BIOS 里将 Primary Video Device 设为 IGFX(核显),否则启动时独显会被宿主机驱动抢占,导致直通失败。
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)
这是最关键的一步,确保核显和独显能够和谐共存。
SVM Mode:
Enabled(开启 CPU 虚拟化)。IOMMU:
Enabled(不要选 Auto)。IGFX Multi-Monitor:
Enabled(强制开启核显,否则直通后宿主机会没画面)。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 内核参数
编辑 GRUB 配置文件:
Bash
sudo nano /etc/default/grub找到
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"更新 GRUB 配置:
Bash
sudo grub-mkconfig -o /boot/grub/grub.cfg
第四步:配置内核模块 (mkinitcpio)
为了确保系统启动时,VFIO 驱动比 AMD 开源驱动更早抢占独显:
编辑配置文件:
Bash
sudo nano /etc/mkinitcpio.conf修改
MODULES数组,顺序非常重要:Plaintext
MODULES=(vfio_pci vfio vfio_iommu_type1 vfio_virqfd amdgpu)确保
vfio开头的都在amdgpu之前。重新生成 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,这样你就不需要切换显示器信号源了。
创建内存文件权限:
Bash
sudo nano /etc/tmpfiles.d/10-looking-glass.conf写入:
Plaintext
f /dev/shm/looking-glass 0660 你的用户名 kvm -安装客户端:
Bash
sudo pacman -S looking-glass
第七步:重启并验证
重启电脑后,检查独显是否已被 VFIO 驱动接管:
Bash
lspci -nnk -d 1002: 后面接你的显卡部分ID
如果看到 Kernel driver in use: vfio-pci,恭喜你,直通成功了!
虚拟机创建小贴士 (Virt-Manager):
固件: 必须选
UEFI(OVMF)。芯片组: 建议选
Q35。添加硬件: 选
PCI Host Device,分别加入你的显卡和音频。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 这种较新的显卡,建议在重启前确认以下几点,以确保直通万无一失:
检查驱动绑定情况: 重启电脑后,运行以下命令查看显卡当前使用的驱动:
Bash
lspci -nnk -d 1002:理想状态:RX 9070 GRE 的
Kernel driver in use应该是vfio-pci。核显状态:5700G (Cezanne) 的
Kernel driver in use应该是amdgpu。
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 编辑功能
在开始之前,确保你可以直接在图形界面修改代码:
打开 Virt-Manager(虚拟机管理器)。
点击菜单栏的 编辑 (Edit) -> 首选项 (Preferences)。
在 常规 (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)能显著提升游戏帧数。
在物理机 BIOS 中:确保
Above 4G Decoding和Re-size BAR Support已开启。在虚拟机 XML 中: 找到显卡的 PCI 设备部分(
<hostdev>),在<source>之后添加内存地址对齐优化(通常 libvirt 10.x 会自动处理,但手动确保使用 Q35 机器类型和 UEFI 固件是前提)。
第四步:使用 Looking Glass 获取原生体验
既然你使用的是单显示器 + 5700G 核显方案,现在可以正式配置 Looking Glass 客户端了:
虚拟机内:
安装 Looking Glass Host 软件。
安装 IVSHMEM 驱动(从 VirtIO-win 镜像中提取)。
Linux 宿主机(CachyOS)执行:
Bash
运行 Looking Glass 客户端 looking-glass-client提示:按
Scroll Lock键可以释放/锁定鼠标到虚拟机窗口中。
总结
完成这些 XML 修改后,大部分游戏(如《赛博朋克 2077》、《艾尔登法环》等)将无法识别出它们运行在 VM 中。
注意:部分极其严格的反作弊(如 Valorant 的 Vanguard)可能仍会通过扫描物理硬件 ID 发现端倪。如果您的目标是玩这类游戏,我们可能还需要进一步配置“硬件序列号伪装(SMBIOS)”。
**您目前准备在虚拟机里运行哪款游戏?我可以帮您确认该游戏是否有特殊的需求。