本文整理自 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 游戏
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
- 安装 arm 转移 GitHub - casualsnek/waydroid_script: Python Script to add OpenGapps, Magisk, libhoudini translation library and libndk translation library to waydroid ! 在 x86_64 系统运行仅含 ARM 原生代码的应用时可能需要转译。转译工具是额外的第三方组件,兼容性和许可条件需要核对,不按 CPU 品牌作固定选择。
# 第三方转译安装示例,先审阅项目及依赖;不是 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:PCI passthrough via OVMF。
参考与延伸
- 原教程:shorinkiwata/archlinuxinstall ↗
- ArchWiki:Libvirt ↗
- ArchWiki:PCI passthrough via OVMF ↗
- ArchWiki:Waydroid ↗
- ArchWiki:Steam ↗
- Waydroid 官方安装说明 ↗
根据技术笔记重新整理,示例使用通用名称。
沿专题继续阅读
Arch Linux
- 01Arch Linux 的哲学与安装规划
- 02内核管理、systemd-boot 与 UKI
- 03Pacman Hook、AUR 与构建安全
- 04Btrfs 子卷布局与 Snapper 快照
- 05LUKS2、Secure Boot 与 TPM2 加固
- 06性能选择与日常维护清单
- 07Pacman 常用命令与参数记忆
- 08Pacman 下载慢的诊断与镜像选择
- 09informant:Arch 新闻与 Pacman Hook
- 10Arch Linux 与 Btrfs:手动安装和 archinstall
- 11GNOME 桌面、输入法与快照配置
- 12GNOME 笔记本管理与桌面美化
- 13Arch Linux 的 KVM、GPU 直通与游戏
- 14Arch 桌面的交换空间、内核与排障