OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 067

Arch Linux 的 KVM、GPU 直通与游戏

建立虚拟机与设备直通环境,并区分 Steam、Wine 和 Waydroid 的运行边界。

所在专题Arch Linux ↗
约 15 分钟阅读开始阅读

本文整理自 shorinkiwata/archlinuxinstall,保留原教程的操作深度并进行匿名化与风险校正。安装包名、扩展、驱动和界面可能随滚动更新变化,以下命令均为阅读示例,没有在此任务中执行或验证。

虚拟化与直通的前提#

先确认 CPU 虚拟化、固件 IOMMU 和内核支持。下面的 monolithic libvirtd 示例是一种管理模式;当前 libvirt 也提供模块化 daemon,按实际安装选择,不同时混用服务启动方案。

GPU 直通需要独立、合适的 IOMMU group,宿主还要保留可用显示和输入。只看到 IOMMU 日志不证明设备分组能安全直通。修改 vfio 绑定后核对 lspci -nnk 的驱动绑定,回退时也要重建 initramfs。不要将宿主正在使用的唯一 GPU/USB 控制器盲目绑定给客体。

Waydroid 需要 Wayland 会话、内核 Binder 支持及可用图形路径。ARM 转译和额外镜像脚本属于第三方来源,执行之前审阅代码和许可,尤其是带 sudo 的安装流程。容器中的 Android 应用不是自动获得完整游戏、DRM 和反作弊兼容性。

KVM 虚拟机#

[已解决] KVM Libvirt 中无法访问存储文件,权限被拒绝错误 How to Install KVM on Ubuntu | phoenixNAP KB 如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹 | Linux 中国 - 知乎

  • 安装 qemu,图形界面, TPM
sudo pacman -S qemu-full virt-manager swtpm
  • 开启 libvirtd 系统服务
sudo systemctl enable --now libvirtd
  • 开启 NAT default 网络
sudo virsh net-start default
sudo virsh net-autostart default
  • 添加组权限 需要登出
sudo usermod -a -G libvirt <username> # 仅当当前授权方案使用此组
  • 检查虚拟机存储访问权限
sudo vim /etc/libvirt/qemu.conf
# 把user = "libvirt-qemu"改为user = "用户名"
# 把group = "libvirt-qemu"改为group = "libvirt"
# 取消这两行的注释
  • 重启服务
sudo systemctl restart libvirtd

嵌套虚拟化

先检查当前模块的 nested 参数;加载参数只在模块尚未加载时生效。已有虚拟机运行时不要为了改参数卸载 KVM 模块,持久配置可在安排重启后验证。 intel 的话用 kvm_intel 临时生效

sudo modprobe kvm_amd nested=1

永久生效

sudo vim /etc/modprobe.d/kvm_amd.conf

写入

options kvm_amd nested=1

重新生成

sudo mkinitcpio -P

配置桥接网络

有线接口可加入普通网桥;多数 Wi-Fi station 连接不能直接用同样方式桥接。切换连接会中断网络,先保存当前配置。

  • 启动高级网络配置工具
nm-connection-editor
# 添加虚拟网桥,接口填bridge0或者别的
# 添加网桥连接,选择以太网,选择网络设备
# 保存后将网络连接改为刚才创建的以太网网桥连接

安装 Windows 11 虚拟机

手把手教你给笔记本重装系统(Windows篇)_哔哩哔哩_bilibili 太突然!Win11 LTSC 官方精简版,终于来了 - 知乎

  • 下载 win11 iot LTS iso 镜像
https://go.microsoft.com/fwlink/?linkid=2270353&clcid=0x409&culture=en-us&country=us
  • 下载 virtiowin11 iso
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.271-1/virtio-win-0.1.271.iso
按获得授权的安装介质和当前虚拟机向导安装,选择 UEFI 与所需 TPM 设备。

显示协议、VirtIO 显卡和 OpenGL 加速要结合宿主及客体驱动支持;不要把 virtio 3D 对 Windows 的能力视为保证,也不以 GPU 品牌作绝对判断。需要高性能 Windows 图形时可研究 GPU 直通。

  • 跳过联网 确保机器没有连接到网络,按下 shift+f10 ,鼠标点选窗口,输入
oobe\bypassnro # 历史版本的可选 OOBE 操作,当前 Windows 版本可能已移除
确认开启共享内存
打开文件管理器,复制要共享的文件夹的路径
在虚拟机管理器内添加共享文件夹,粘贴刚才复制的路径,取个名字
虚拟机内win11安装winFSP
https://winfsp.dev/rel/
搜索service(服务),启用VirtIO-FS Service,设置为自动

显卡直通

PCI passthrough via OVMF - ArchWiki

  • 确认 iommu 是否开启,有输出说明开启
sudo dmesg | grep -e DMAR -e IOMMU
  • 获取显卡的硬件 id,如果是显卡所在 group 的所有设备的 id 都记下。如果 group 里有 cpu 的话去看 wiki。
for d in /sys/kernel/iommu_groups/*/devices/*; do
    n=${d#*/iommu_groups/*}; n=${n%%/*}
    printf 'IOMMU Group %s ' "$n"
    lspci -nns "${d##*/}"
done
  • 隔离 GPU
sudo vim /etc/modprobe.d/vfio.conf

写入如下内容

options vfio-pci ids=EXAMPLE_GPU_ID,EXAMPLE_AUDIO_ID
  • 让 vfio-pci 抢先加载
sudo vim /etc/mkinitcpio.conf

MODULES=()里面写入 vfio_pci vfio vfio_iommu_type1

MODULES=(... vfio_pci vfio vfio_iommu_type1  ...)

HOOKS=() 里面写入 modconf

HOOKS=(... modconf ...)
  • 重新生成
sudo mkinitcpio -P

重启电脑 安装 ovmf

sudo pacman -S edk2-ovmf

编辑配置文件

sudo vim /etc/libvirt/qemu.conf
# 在 virt-manager 中选择 edk2-ovmf 提供的 UEFI 固件
# 不复制旧发行版 OVMF 文件路径;为每台客体保留独立 NVRAM VARS

重启服务

sudo systemctl restart libvirtd

virt-manager 的虚拟机页面内添加设备,PCI Host Device 里找到要直通的显卡。 然后 USB hostDevice 里面把鼠标键盘也直通进去。

  • 取消显卡直通
sudo vim /etc/modprobe.d/vfio.conf

注释掉里面的内容

sudo mkinitcpio -P
重启

在 linux 上玩游戏#

这一节不仅适用于 windows 的游戏程序,还适用于 windows 的软件。 首选用 steam 玩游戏,steam 没有的游戏通过 lutris 管理,使用 proton 或者 wine 运行。安卓手游用 waydroid 运行。如果都不行,用配置了显卡直通的 win11 虚拟机玩

玩 steam 游戏

Steam - ArchWiki

sudo pacman -S steam

在设置→兼容性里面选择默认兼容性工具即可运行大部分无反作弊的游戏

玩安卓手游

waydroid

Install Instructions | Waydroid Waydroid - Arch Linux 中文维基 Android 使用 Linux 内核,但图形、Binder、架构和硬件集成仍会限制兼容性与性能。waydroid 是 linux 上的安卓容器,相当于一个完整的安卓系统。

  • 安装
sudo pacman -S waydroid

可选:从 archlinuxcn 安装 waydroid-image(要求添加 cn 仓库,按照流程,在本文档的 yay 安装部分已经添加)

sudo pacman -S waydroid-image
# 带谷歌play的
sudo pacman -S waydroid-image-gapps
  • 初始化
sudo waydroid init
# 带谷歌的
sudo waydroid init -s GAPPS
  • 启动服务
sudo systemctl enable --now waydroid-container.service
# 第三方转译安装示例,先审阅项目及依赖;不是 Waydroid 必需步骤
sudo pacman -S lzip
git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script
python3 -m venv venv
venv/bin/pip install -r requirements.txt
sudo venv/bin/python3 main.py
按照窗口的指引进行安装
  • 开启
waydroid session start

然后应该就能在桌面看到一大堆图标了

  • 安装软件
waydroid app install /path/to/example.apk
  • 软件默认是全屏打开,可以设置窗口化打开软件

卸载 waydroid

waydroid session stop
sudo systemctl disable --now waydroid-container.service
sudo pacman -Rns waydroid #如果下载了waydroid-image的话需要一并删除
# 可选清理:这些目录含应用数据,确认已备份且路径正确后才删除
# sudo rm -rf -- /var/lib/waydroid
# rm -rf -- ~/.local/share/waydroid
# 逐个检查并删除对应 desktop 入口,避免未经检查的通配符

wine/proton 兼容层运行

wine 是在 linux 下运行 windows 程序的兼容层,proton 是 steam 的母公司 v 社基于 wine 开发的专门用来玩游戏的兼容层。原理是把 window 程序发出的请求翻译成 linux 系统下的等效请求。通常使用最新的 wine 或者 proton 版本即可。

lutris

Download Lutris lutris 是一个专为玩游戏设计的工具,可以很方便地管理需要用 wine 或者 proton 兼容层运行的软件。Lutris 可管理独立游戏及运行器;与 Steam 的非 Steam 游戏入口有不同集成功能。

  • 安装
sudo pacman -S lutris
  • 第一次打开会自动下载各种需要的组件
  • 卸载
sudo pacman -Rns lutris
# 可选清理会删除设置、运行器与本地游戏管理数据,先备份并逐项检查
# rm -rf -- ~/.config/lutris ~/.cache/lutris ~/.local/share/lutris
# 在 ~/.local/share/applications/ 中只删除已确认属于 Lutris 的入口

steam 下载 proton 之后可以在 lutris 里面设置 wine 版本为 proton

用显卡直通玩游戏

显卡直通让客体直接使用专用 GPU,但兼容性仍受驱动、复位、IOMMU、反作弊和许可要求影响。不要保证所有游戏都会运行,测试时保留宿主可用的显示与输入设备。

官方核对入口#

ArchWiki:Libvirt。

ArchWiki:PCI passthrough via OVMF。

ArchWiki:Waydroid。

ArchWiki:Steam。

Waydroid 官方安装说明。

参考与延伸

  1. 原教程:shorinkiwata/archlinuxinstall ↗
  2. ArchWiki:Libvirt ↗
  3. ArchWiki:PCI passthrough via OVMF ↗
  4. ArchWiki:Waydroid ↗
  5. ArchWiki:Steam ↗
  6. Waydroid 官方安装说明 ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

Arch Linux

  1. 01Arch Linux 的哲学与安装规划
  2. 02内核管理、systemd-boot 与 UKI
  3. 03Pacman Hook、AUR 与构建安全
  4. 04Btrfs 子卷布局与 Snapper 快照
  5. 05LUKS2、Secure Boot 与 TPM2 加固
  6. 06性能选择与日常维护清单
  7. 07Pacman 常用命令与参数记忆
  8. 08Pacman 下载慢的诊断与镜像选择
  9. 09informant:Arch 新闻与 Pacman Hook
  10. 10Arch Linux 与 Btrfs:手动安装和 archinstall
  11. 11GNOME 桌面、输入法与快照配置
  12. 12GNOME 笔记本管理与桌面美化
  13. 13Arch Linux 的 KVM、GPU 直通与游戏
  14. 14Arch 桌面的交换空间、内核与排障
CONTINUE READING / 下一篇Arch 桌面的交换空间、内核与排障

保留压缩交换、内核切换、系统清理及桌面常见问题的完整操作细节。