
WinApps libvirt 虚拟机里怎么装完 Windows ISO手动加载 VirtIO 驱动并用 OOBE\BYPASSNRO 跳过网络界面【免费下载链接】winappsRun Windows apps such as Microsoft Office/Adobe in Linux (Ubuntu/Fedora) and GNOME/KDE as if they were a part of the native OS, including Nautilus integration. Hard fork of https://github.com/Fmstrat/winapps/项目地址: https://gitcode.com/GitHub_Trending/wina/winappsWinApps 通过在虚拟机里跑 Windows再经 FreeRDP 把 Windows 应用渲染进 GNU/Linux 桌面。这条 libvirt 路线比 Docker/Podman 路线配置更繁琐但灵活度更高例如可以做 GPU passthrough。本文只走装完系统这一段用virt-manager从 Windows 10/11 的 ISO 创建一台名为RDPWindows的虚拟机在安装器里手动加载 VirtIO 驱动让虚拟磁盘可见再用OOBE\BYPASSNRO跳过 OOBE 网络界面。完整步骤以仓库内 docs/libvirt.md 为准适用前提是宿主机为 GNU/Linux文档给出 Debian/Ubuntu、Fedora/RHEL、Arch、Gentoo 的安装命令CPU 支持硬件虚拟化扩展。准备工作宿主机依赖与安装介质确认 CPU 支持硬件虚拟化扩展KVM 需要 CPU 的 VT-x / AMD-V 这类硬件扩展。安装virt-manager包管理器会自动装齐整套依赖sudo apt install virt-manager # Debian/Ubuntu sudo dnf install virt-manager # Fedora/RHELArch 用sudo pacman -S virt-managerGentoo 用sudo emerge app-emulation/virt-manager。把 libvirt 默认 URI 配置为qemu:///system追加到 shell 配置文件如~/.bashrcecho export LIBVIRT_DEFAULT_URIqemu:///system ~/.bashrc注意WinApps 可能不读你的 shell 配置。如果后续安装器检测不到你的虚拟机把它写进/etc/environmentecho LIBVIRT_DEFAULT_URIqemu:///system | sudo tee -a /etc/environment将当前用户加入kvm和libvirt组然后重启系统sudo usermod -a -G kvm $(id -un) sudo usermod -a -G libvirt $(id -un) sudo reboot两个已知例外NixOS 上 libvirt 组名是libvirtd且用户/组管理要走 Nix 配置文件而不是usermodSilverblue、Bazzite、Bluefin、Kinoite、Aurora、UCore 等 rpm-ostree 系发行版存在已知 bug上面的命令可能没把用户加进全部所需组。用groups $USER检查缺失的组把组定义从/usr/lib/group追加进/etc/group以kvm为例其他缺失组替换组名即可再重启grep -E ^kvm: /usr/lib/group | sudo tee -a /etc/group sudo usermod -aG kvm $USER使用 SELinux 的系统若虚拟机镜像存放在默认的/var/lib/libvirt/images目录之外可能还需要调整安全策略。可选如果发行版使用 AppArmor为 libvirt 守护进程禁用它sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/从 Microsoft 官方下载页面获取 Windows 10 或 Windows 11 的安装.ISO镜像。重要运行 RDP 应用要求 Windows 为 Professional、Enterprise 或 Server 版本Home 版本不可用。下载 Windows 虚拟机用的 VirtIO 驱动 ISOhttps://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso这是 Red Hat 编译签名的最新 virtio-win 版本旧版本可在同一目录的 archive-virtio 归档中找。VirtIO 驱动让虚拟机使用专门的磁盘/网络半虚拟化驱动省去昂贵的硬件模拟提升性能和降低开销。这个 ISO 稍后会挂成 CD-ROM安装时靠它加载磁盘驱动。创建名为 RDPWindows 的虚拟机打开virt-manager不同发行版下应用名可能显示为 Virtual Machines 或 Virtual Machine Manager。Edit→Preferences勾选Enable XML editing点Close。后面的步骤要直接改 XML。点按钮新建虚拟机选Local install mediaForward。通过Browse.../Browse Local选择刚下载的 Windows.ISO保持Automatically detect from the installation media / source勾选Forward。配置 CPU 与内存。文档推荐2个 CPU、4096MB内存会配合 VirtIO Memory Ballooning 服务使用即虚拟机最多用 4096MB但只在需要时占用。设置虚拟磁盘的最大尺寸。这只是可增长的上限磁盘按需占用空间。把虚拟机命名为RDPWindows以便 WinApps 识别并勾选Customize configuration before installation。如果~/.config/winapps/winapps.conf里设置了VM_NAME也可以用其他名字。点Finish后在 CPUs 下选择Copy host CPU configuration点Apply。文档提醒安装完 Windows 后这个选项有时会变回未启用装完后要检查并重新启用。切到XML标签页把clock段替换为以下内容——禁用除 hypervclock 外的所有定时器从而大幅降低空闲 CPU 占用——然后点Applyclock offsetlocaltime timer namertc presentno tickpolicycatchup/ timer namepit presentno tickpolicydelay/ timer namehpet presentno/ timer namekvmclock presentno/ timer namehypervclock presentyes/ /clock在hyperv段加入以下配置以启用 Hyper-V enlightenments然后点Apply。它们让 Windows 认为自己运行在 Hyper-V 兼容的 hypervisor 上使 KVM 得以实现半虚拟化接口来提升性能hyperv relaxed stateon/ vapic stateon/ spinlocks stateon retries8191/ vpindex stateon/ synic stateon/ stimer stateon direct stateon/ /stimer reset stateon/ frequencies stateon/ reenlightenment stateon/ tlbflush stateon/ ipi stateon/ /hyperv在devices段内加入以下片段让宿主机之后能通过QEMU Guest Agent与 Windows 通信channel typeunix source modebind/ target typevirtio nameorg.qemu.guest_agent.0/ address typevirtio-serial controller0 bus0 port2/ /channel在 Memory 段把Current allocation设为希望的最小内存值文档推荐1024MB。文档提醒某些应用如 OneDrive下 balloon 驱动可能跟不上若出现 segfault随机重启请关闭内存气球memballoon modelnone/。可选在Boot Options勾选Start virtual machine on host boot up让宿主机启动时自动拉起虚拟机。进入 SATA Disk 1把Disk bus类型设为VirtIO使磁盘访问半虚拟化。进入 NIC把Device model设为virtio以启用半虚拟化网络。文档说明virtio是推荐的常规模型如果你希望在 Windows 安装过程中就能联网例如用微软账号登录可临时把Device model改为e1000e等安装和 VirtIO 驱动配置完成后再切回virtio。点左下角Add Hardware选StorageDevice type选CDROM device选择之前下载的 VirtIO 驱动.ISO点Finish添加。重要如果跳过这一步Windows 安装器将无法识别并列出前面创建的虚拟硬盘。安装时手动加载 VirtIO 驱动点左上角的Begin Installation开始安装 Windows。进行到 Where do you want to install Windows? 时磁盘列表是空的——这是文档描述的预期现象磁盘总线已设为 VirtIO而安装器本身没有对应的驱动必须手动指定。选择Load driver。安装器会询问驱动位置选择VirtIO驱动.ISO挂载所在的光驱。选择与你所装系统版本匹配的驱动通常是w10或w11下的驱动。加载后虚拟硬盘应出现在列表中选中它继续安装。判断标准驱动加载成功的标志就是虚拟磁盘出现在安装器的磁盘列表里可继续选择分区并安装。用 OOBE\BYPASSNRO 跳过网络界面接下来的一道坎是网络选择屏此时网络 VirtIO 驱动还没装虚拟机连不上网而 Windows 11 的 OOBE 默认要求联网。文档给出两种绕过方式。方法 1主路径在 Windows 11 安装过程中被要求选择国家或区域时按Shift F10打开命令提示符输入OOBE\BYPASSNRO并按回车。系统会重启之后在网络屏幕就能选择 I dont have internet。文档强调要尽可能早地在安装流程中执行这条命令。方法 2备用如果安装已经走到更后面、第一条命令失效可按Shift F10打开命令提示符输入start ms-cxh:localonly并按回车安装会直接跳到本地账户创建页。Windows 10 则更简单在网络界面直接点击 I dont have internet。之后选择 Continue with limited setup完成本地账户创建进入 Windows 桌面——ISO 安装阶段到此完成。安装完成后的验证与 WinApps 接入进入桌面后按文档的 Final Configuration Steps 收尾并验证打开 File Explorer进入挂载 virtio-win.iso的光驱运行virtio-win-guest-tools.exe安装所有必要驱动和QEMU Guest Agent保持默认一路Next。在 PowerShell 窗口中运行Get-Service QEMU-GA确认代理已安装。文档示例输出Status Name DisplayName ------ ---- ----------- Running QEMU-GA QEMU Guest Agent在宿主机上测试能否通过QEMU Guest Agent与 Windows 通信virsh qemu-agent-command RDPWindows {execute:guest-get-osinfo} --pretty文档示例输出示例结果字段值以实际系统为准{ return: { name: Microsoft Windows, kernel-release: 26100, version: Microsoft Windows 11, variant: client, pretty-name: Windows 10 Pro, version-id: 11, variant-id: client, kernel-version: 10.0, machine: x86_64, id: mswindows } }从仓库下载 RDPApps.reg、install.bat、TimeSync.ps1、NetProfileCleanup.ps1 四个文件在浏览器中右键Raw按钮选 Save target as。不要下载Container.reg——它只供 Docker/Podman 用户。右键install.bat选 Run as administrator完成后重启 Windows 虚拟机。这些注册表与脚本改动用于启用 RDP Applications、时间同步和网络配置文件清理是 WinApps 在 libvirt 路线下工作的必要步骤。最后一步是安装 WinApps 本体确认~/.config/winapps/winapps.conf中WAFLAVOR已设为libvirt否则 WinApps 会去找 Docker 安装。然后重启虚拟机但不要登录关闭虚拟机查看器在宿主机上运行文档给出的安装命令bash (curl https://raw.githubusercontent.com/winapps-org/winapps/main/setup.sh)到这里Windows 侧的安装与验证全部结束后续就是往虚拟机里装 Microsoft 365、Adobe Creative Cloud 等具体应用了。【免费下载链接】winappsRun Windows apps such as Microsoft Office/Adobe in Linux (Ubuntu/Fedora) and GNOME/KDE as if they were a part of the native OS, including Nautilus integration. Hard fork of https://github.com/Fmstrat/winapps/项目地址: https://gitcode.com/GitHub_Trending/wina/winapps创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考