ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

WinApps 如何用 virt-manager 创建 libvirt 虚拟机:RDPWindows 命名、XML 定制与 QEMU Guest Agent 通道配置

WinApps 如何用 virt-manager 创建 libvirt 虚拟机:RDPWindows 命名、XML 定制与 QEMU Guest Agent 通道配置 WinApps 如何用 virt-manager 创建 libvirt 虚拟机RDPWindows 命名、XML 定制与 QEMU Guest Agent 通道配置【免费下载链接】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 除了使用 Docker/Podman 容器还可以把一台现成的 Windows 虚拟机作为后端通过 RDP 把 Windows 应用投递到 Linux 桌面。选择libvirt后端时安装器会按名称查找名为RDPWindows的虚拟机或在~/.config/winapps/winapps.conf中用VM_NAME指定其他名称因此第一步是搞清楚如何用virt-manager创建这样一台虚拟机并完成 XML 定制与QEMU Guest Agent通道配置。docs/libvirt.md 指出这条路径比 Docker/Podman 配置更繁琐但灵活性更高例如支持 GPU 直通适合高级用户。下文按文档顺序覆盖环境准备、虚拟机创建、XML 修改、Windows 安装、Guest Agent 验证直到最后运行 WinApps 安装脚本。适用环境GNU/Linux 桌面Debian/Ubuntu、Fedora/RHEL、Arch、Gentoo 等文档给出了各发行版的安装命令CPU 必须支持硬件虚拟化扩展Intel VT-x / AMD-V这是KVM运行的前提。准备条件安装 virt-manager 并配置 libvirt 环境确认 CPU 支持硬件虚拟化扩展。KVM是内核态的 type-1 虚拟化层QEMU在其上提供用户态虚拟化libvirt负责编排virt-manager是图形前端四者共同构成文档所描述的虚拟化栈可参考 Virtualisation_Stack.svg。安装virt-manager让包管理器自动带上其余依赖sudo apt install virt-manager # Debian/Ubuntu sudo dnf install virt-manager # Fedora/RHEL sudo pacman -S virt-manager # Arch Linux sudo emerge app-emulation/virt-manager # Gentoo Linux让libvirt使用systemURI。向你的 shell 配置文件如.bashrc、.zshrc追加echo export LIBVIRT_DEFAULT_URIqemu:///system ~/.bashrc文档特别提醒WinApps 可能读不到 shell 配置。如果安装器检测不到虚拟机需要把该变量同时写入系统级/etc/environment此命令会修改系统环境文件需要sudoecho LIBVIRT_DEFAULT_URIqemu:///system | sudo tee -a /etc/environment把当前用户加入kvm和libvirt组。这些usermod命令修改用户组归属之后必须重启主机才生效sudo usermod -a -G kvm $(id -un) # Add the user to the kvm group. sudo usermod -a -G libvirt $(id -un) # Add the user to the libvirt group. sudo reboot # Reboot the system to ensure the user is added to the relevant groups.两个例外情况文档均有说明NixOS 上 libvirt 组名是libvirtd且用户/组管理要走 Nix 配置而非usermod。使用rpm-ostree的发行版Silverblue、Bazzite、Bluefin、Kinoite、Aurora、UCore 等存在已知 bugusermod可能无法把用户加入全部组。如果groups $USER输出中缺少某个组先从/usr/lib/group把该组补进/etc/group再重新执行usermod然后重启。例如缺少kvm组时grep -E ^kvm: /usr/lib/group | sudo tee -a /etc/group sudo usermod -aG kvm $USER如果发行版启用了AppArmor需要为libvirt守护进程禁用它此命令创建一个指向/etc/apparmor.d/disable/的符号链接sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/使用SELinux的系统如果虚拟机镜像存放在默认的/var/lib/libvirt/images之外可能还需要调整安全策略。下载 Windows 10 或 Windows 11 安装.ISO。文档明确标注必须使用 Professional、Enterprise 或 Server 版本Home 版无法运行 RDP 应用。下载 VirtIO 驱动 ISO 备用。这些驱动让虚拟机使用半虚拟化的网络和磁盘设备驱动避免昂贵的硬件模拟文档给出的直链是 Red Hat 编译签名的最新版本。用 virt-manager 创建虚拟机并命名为 RDPWindows打开virt-manager不同发行版中应用名可能显示为 Virtual Machines、Virtual Machine Manager 等。进入Edit→Preferences勾选Enable XML editing点Close。后续所有 XML 定制都依赖这一步。点击按钮创建新虚拟机。选择Local install media点Forward。通过Browse...→Browse Local指定 Windows 10/11.ISO的路径并保持Automatically detect from the installation media / source勾选。分配内存与 CPU。文档推荐2个 CPU、4096MB内存配合VirtIOMemory Ballooning 服务虚拟机最高可占用4096MB但只在需要时实际消耗。设置虚拟磁盘的最大尺寸。该值只是可增长的上限磁盘按需占用空间。把虚拟机命名为RDPWindows并勾选Customize configuration before installation然后点Finish。命名之所以重要安装器默认查找名为RDPWindows的虚拟机。如果你确实要改用其他名称必须同时在~/.config/winapps/winapps.conf中设置VM_NAMEsetup.sh 中VM_NAMERDPWindows的默认值与此一致。在CPUs下选择Copy host CPU configuration点Apply。文档提醒安装完 Windows 后这个选项有时会失效安装完成后要回来检查并重新启用。XML 定制时钟、Hyper-V enlightenments 与 QEMU Guest Agent 通道以下修改都在虚拟机配置界面的XML选项卡中进行每改完一段就点Apply。编辑clock段关闭除hypervclock之外的所有定时器。文档说明这一改动的目的是大幅降低空闲 CPU 占用clock offsetlocaltime timer namertc presentno tickpolicycatchup/ timer namepit presentno tickpolicydelay/ timer namehpet presentno/ timer namekvmclock presentno/ timer namehypervclock presentyes/ /clock在hyperv段加入 Hyper-V enlightenmentshyperv 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文档解释enlightenments 让 Windows 以为自己运行在 Hyper-V 兼容的 hypervisor 上从而允许KVM使用半虚拟化接口提升性能。在devices段内加入下面这段启用QEMU Guest Agent通道让 GNU/Linux 宿主机能与 Windows 通信。这是 WinApps 定位虚拟机、管理其生命周期的关键配置channel typeunix source modebind/ target typevirtio nameorg.qemu.guest_agent.0/ address typevirtio-serial controller0 bus0 port2/ /channel注意address里的port2要与虚拟机中已有的virtio-serial端口不冲突文档示例完整 XML 中该通道就位于 port 2。在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启用半虚拟化网络。文档说明的例外如果安装 Windows 过程中需要联网例如登录 Microsoft 账户可以临时把设备模型改成e1000e安装与 VirtIO 驱动部署完成后再切回virtio。点左下角Add Hardware选StorageDevice type选CDROM device指向之前下载的 VirtIO 驱动.ISO点Finish。文档用 IMPORTANT 标注跳过这一步Windows 安装器将无法识别并列出你刚创建的虚拟硬盘。可选文档还提供了一个可选的 CPU 核心绑定章节先用lscpu -e查看 L1/L2/L3 缓存与核心的对应关系再修改vcpu、cputune和cpu段做 vcpupin。它属于性能优化不影响本文主路径完成需要时直接阅读 docs/libvirt.md 中的 “Assign Specific Physical CPU Cores” 一节同文档末尾还附有一份完整的 Windows 11 虚拟机示例 XML 可供对照。安装 Windows手动加载 VirtIO 驱动并跳过联网点左上角Begin Installation启动虚拟机。到选择安装位置时列表里不会有任何磁盘——因为磁盘是VirtIO总线而驱动尚未加载。点击Load driver。在驱动器列表中选择挂载了 VirtIO 驱动.ISO的那个盘。选择与所选系统匹配的驱动通常是w10或w11。此时虚拟硬盘应出现在列表中可正常选择。处理网络选择界面。此时网卡驱动同样未加载虚拟机无法联网Windows 11在提示选择国家/地区时按Shift F10打开命令提示符输入OOBE\BYPASSNRO并回车系统重启后即可选择 “I dont have internet”。文档强调要尽量早地执行。备选方案如果安装已经推进较远、上一条命令失败按Shift F10后输入start ms-cxh:localonly并回车安装会直接跳到本地账户创建页。Windows 10直接点击 “I dont have internet” 即可。随后选择 “Continue with limited setup” 继续。安装 virtio-win-guest-tools 并验证 QEMU Guest Agent进入桌面后打开File Explorer导航到挂载了 virtio-win.ISO的盘符运行virtio-win-guest-tools.exe安装全部所需驱动以及QEMU Guest Agent保持默认选项一路Next。验证分两步都在文档中给出在 Windows 的 PowerShell 中运行Get-Service QEMU-GA。文档示例输出Status Name DisplayName ------ ---- ----------- Running QEMU-GA QEMU Guest Agent回到 Linux 宿主测试能否通过 QEMU Guest Agent 与 Windows 通信virsh qemu-agent-command RDPWindows {execute:guest-get-osinfo} --pretty若虚拟机名称不是RDPWindows把命令中的名称换成你的实际虚拟机名。文档示例输出如下注意这是文档示例字段值会随你的系统而不同{ 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 } }启用 RDP 应用支持下载三个文件RDPApps.reg、install.bat、TimeSync.ps1、NetProfileCleanup.ps1。文档建议从仓库对应文件页的Raw按钮右键 “Save target as” 保存。文档用 IMPORTANT 标注不要下载 Container.reg该文件仅用于 Docker/Podman 用户参见 oem/Container.reg。右键install.bat选择 “Run as administrator”。它会应用 RDP 相关注册表修改运行前理解其会改动 Windows 系统配置。完成后重启 Windows 虚拟机。配置 WinApps 并运行安装脚本在~/.config/winapps/winapps.conf中确认后端配置。配置文件默认模板中WAFLAVORdocker需要改为libvirt否则安装器会去找 Docker 而不是虚拟机配置文件的完整创建方式见 README.md 的 “Step 3: Create a WinApps Configuration File”VM_NAMERDPWindows WAFLAVORlibvirtVM_NAME仅在虚拟机不叫RDPWindows时才需要修改。重启虚拟机但不要登录 Windows关闭虚拟机查看器窗口。运行 WinApps 安装脚本bash (curl https://raw.githubusercontent.com/winapps-org/winapps/main/setup.sh)该脚本会下载 WinApps 源码并执行安装--system模式需要sudo权限。对于libvirt后端setup.sh 会依次检查当前用户属于libvirt和kvm组否则提示执行usermod并重启名为$VM_NAME的虚拟机存在且处于运行状态关机时提示virsh start RDPWindows暂停时提示virsh resume RDPWindows并检查 Windows 的 RDP 端口 3389 是否可达。在libvirt模式下若未指定RDP_IP脚本通过virsh domiflist取虚拟机 MAC 地址、再从ip neigh中解析出 IP。限制与可选分支内存气球如前所述个别应用会导致 balloon 驱动跟不上并引发随机重启此时按文档把内存气球改为memballoon modelnone/。静态 IP可选用virsh dumpxml RDPWindows | grep mac address取得 MACvirsh net-list查看网络名通常为defaultvirsh net-edit default在dhcp段加入形如host mac... nameRDPWindows ip192.168.122.2/的条目然后virsh net-destroy default再virsh net-start default重启虚拟网络此操作会中断该网络下所有虚拟机的连接注意时机最后重启 Windows。回退共享文件夹可选通过 FreeRDP 连接时家目录会自动共享但经virt-manager查看器访问时不会。文档给出可选方案启用共享内存 添加virtiofsFilesystem 设备 在 Windows 内安装 WinFSP 并用sc.exe创建、启动VirtioFsSvc服务然后重启 Windows。Spice Guest Tools可选如果你打算通过virt-manager查看器访问虚拟机可安装 Spice 来宾工具以获得桌面自适应缩放和剪贴板功能WinApps 本身走 RDP不装也可以。完成以上全部步骤后虚拟机已具备 WinAppslibvirt后端所需的全部条件名称可被识别、Guest Agent 通道已验证可用、RDP 应用支持已启用安装脚本即可完成 Windows 应用扫描与桌面集成。后续要安装 Microsoft 365、Adobe Creative Cloud 等应用时直接按 README.md 的应用安装流程操作即可。【免费下载链接】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),仅供参考
返回列表