如何在 NixOS 与独立 Nix 上安装 WinApps 与 winapps-launcher?
【免费下载链接】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
WinApps 通过在 Docker、Podman 或 libvirt 虚拟机中运行 Windows,用 FreeRDP 把 Windows 应用渲染为 Linux 桌面上的原生窗口,从而在 GNOME、KDE Plasma 或 XFCE 下运行 Microsoft Office、Adobe 等 Windows 应用。在 Nix 环境中,它不通过setup.sh远程安装脚本,而是以 Flake 包的形式提供:安装后winapps命令和winapps-setup安装器直接可用,可选的winapps-launcher提供托盘菜单用于启停虚拟机和启动应用。
本文覆盖三条安装路径:独立 Nix(nix profile install)、NixOS 使用 Flakes、NixOS 不使用 Flakes,并说明安装完成后的验证方式与winapps-setup向导的前置条件。
适用前提(来自项目文档与包定义):
- 桌面环境为
KDE Plasma、GNOME或XFCE;Wayland目前不支持(见 packages/winapps/default.nix 中meta.description)。 - 示例配置面向
x86_64-linux。 - 安装前必须先按常规安装指南的 Step 1 准备好一台 Windows 虚拟机:用 Docker 或 Podman 的参考 docs/docker.md,用 libvirt 的参考 docs/libvirt.md。Nix 包只分发宿主侧的
winapps脚本与winapps-setup安装器,Windows 虚拟机本身需要你自己创建并保持开机。
用独立 Nix 安装:nix profile install
首先确认 Flakes 与nix命令已启用,在~/.config/nix/nix.conf中写入:
experimental-features = nix-command flakes然后安装winapps包:
nix profile install github:winapps-org/winapps#winapps可选的托盘启动器单独安装:
nix profile install github:winapps-org/winapps#winapps-launcher # optional这两个包由 flake.nix 定义,winapps对应 packages/winapps/default.nix,winapps-launcher对应 packages/winapps-launcher/default.nix 并依赖winapps包。Nix 构建会把 FreeRDP、dialog、libnotify、netcat、iproute2作为包的运行时依赖打包,并且安装器通过wrapProgram把这些依赖加入PATH,因此常规安装指南 Step 2 里为 Debian/Fedora 等发行版准备的依赖安装命令在 Nix 上不需要执行。但WAFLAVOR对应的后端工具(Docker、Podman 或 libvirt)仍需自行安装,这一点与常规安装相同。
在 NixOS 中使用 Flakes
把 winapps 加为 Flakes 输入,并把两个包放入environment.systemPackages。README 给出的flake.nix片段(hostname等占位处需替换为你自己的主机名与用户名):
# flake.nix { description = "My configuration"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; winapps = { url = "github:winapps-org/winapps"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs@{ nixpkgs, winapps, ... }: { nixosConfigurations.hostname = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; specialArgs = { inherit inputs system; }; modules = [ ./configuration.nix ( { pkgs, system ? pkgs.system, ... }: { environment.systemPackages = [ winapps.packages."${system}".winapps winapps.packages."${system}".winapps-launcher # optional ]; # set up binary cache (optional) nix.settings = { substituters = [ "https://winapps.cachix.org/" ]; trusted-public-keys = [ "winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=" ]; trusted-users = [ "<your username>" ]; # replace with your username }; } ) ]; }; }; }其中hostname、<your username>是需要替换的占位:主机名替换为你的nixosConfigurations键名,<your username>替换为你的用户名。二进制缓存(substituters与trusted-public-keys)是文档标注的可选配置,用于从 winapps 的缓存拉取预构建产物而非本地编译;不配置时nixos-rebuild会在本机构建这两个包。
在 NixOS 中不使用 Flakes
不使用 Flakes 时,文档给出基于 flake-compat 的方案(仓库根目录的 default.nix 即为该入口)。configuration.nix片段如下,同样包含可选的二进制缓存设置:
# configuration.nix { pkgs, system ? pkgs.system, ... }: { # set up binary cache (optional) nix.settings = { substituters = [ "https://winapps.cachix.org/" ]; trusted-public-keys = [ "winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=" ]; trusted-users = [ "<your username>" ]; # replace with your username }; environment.systemPackages = let winapps = (import (builtins.fetchTarball "https://github.com/winapps-org/winapps/archive/main.tar.gz")) .packages."${system}"; in [ winapps.winapps winapps.winapps-launcher # optional ]; }修改 NixOS 配置后按你系统的常规方式应用(如nixos-rebuild switch),应用后即可在系统环境中找到winapps与winapps-setup。
安装后的验证与首次运行
包安装只完成宿主侧组件,真正的初始化仍要跑一次winapps-setup安装向导。验证包本身是否就位:
winapps --help winapps-setup --helpREADME 给出的winapps-setup --help用法(文档示例,选项语义以该输出为准):
Usage: --user # Install WinApps and selected applications in /home/$(whoami) --system # Install WinApps and selected applications in /usr --user --setupAllOfficiallySupportedApps # Install WinApps and all officially supported applications in /home/$(whoami) --system --setupAllOfficiallySupportedApps # Install WinApps and all officially supported applications in /usr --user --uninstall # Uninstall everything in /home/$(whoami) --system --uninstall # Uninstall everything in /usr --user --add-apps # Add new applications to existing installation in /home/$(whoami) --system --add-apps # Add new applications to existing installation in /usr --help # Display this usage message.运行安装向导(不带参数时是交互式的;带参数时可跳过部分询问):
winapps-setup --user # 或 winapps-setup --systemsetup.sh 中waInstall()的实际执行顺序是:检查已有安装 → 加载配置文件 → 检查依赖 → 检查后端状态(Docker/Podman 容器是否在运行,或 libvirt 虚拟机是否开机)→ 检查 RDP 端口 → RDP 连接测试 → 扫描 Windows 中已安装的应用 → 为选定的应用创建.desktop条目与启动脚本。全部通过后终端打印INSTALLATION COMPLETE.;失败时会打印错误类型与排查建议,并按trap机制以非零状态退出。
向导能否跑通取决于两个前置条件:
配置文件必须存在。在
~/.config/winapps/winapps.conf中按 README「Step 3」写入配置,最小必填项:RDP_USER="MyWindowsUser" RDP_PASS="MyWindowsPassword" RDP_IP="127.0.0.1" RDP_PORT="3389" WAFLAVOR="docker"其中
RDP_USER/RDP_PASS必须对应完整的 Windows 账户(PIN 登录组合对 RDP 无效);RDP_IP对 Docker/Podman 用127.0.0.1,libvirt 留空则由 WinApps 运行时自动探测;WAFLAVOR取docker、podman、libvirt、manual之一。由于该文件包含明文密码,README 要求收紧权限:chown $(whoami):$(whoami) ~/.config/winapps/winapps.conf chmod 600 ~/.config/winapps/winapps.conf缺少配置文件时向导会以「MISSING CONFIGURATION FILE」退出(exit status 4)。
Windows 虚拟机必须保持开机。README 明确说明:安装器会检查后端状态,若 Windows 未开机,setup 会直接退出并提示先启动 VM(Docker/Podman 用
docker compose --file ~/.config/winapps/compose.yaml start,libvirt 用virsh start <VM_NAME>)。
安装完成后,Linux 应用菜单中出现选定的 Windows 应用条目,说明.desktop文件与启动脚本已生成(--user安装位于~/.local/下,--system安装位于/usr下)。此后在 Windows 中新装了应用时,重新运行winapps-setup --user --add-apps即可重新检测并追加。
关于winapps-launcher:Nix 包会把它装为winapps-launcher命令,并通过desktopItems生成名为「WinApps」的应用菜单项(类别Utility,图标winapps.svg)。启动它后,系统托盘菜单中列出已安装的 Windows 应用与完整 RDP 会话入口,可以 start、stop、pause、reboot 或 hibernate Windows 虚拟机。
限制与 Nix 特有的细节
- Nix 包对 libvirt 分组检查做了适配:packages/winapps/setup.patch 把安装器中 libvirt 组名检查从
libvirt改为libvirtd,与 NixOS 上的分组命名一致;如果你的WAFLAVOR="libvirt",当前用户需属于libvirtd与kvm组(setup.sh 报错时会给出sudo usermod -a -G ...建议并提示重启后生效)。 - Wayland 不支持,需使用上述 X11 桌面环境(包元数据中的明确声明)。
- 卸载语义:
winapps-setup --uninstall会移除.desktop条目、bash 启动脚本与~/.local/share/winapps数据,但保留~/.config/winapps配置;包本身则用nix profile remove(独立 Nix)或从environment.systemPackages移除后重建(NixOS)来卸载。 - RDP 证书问题:若向导在 RDP 连接测试阶段报
REMOTE DESKTOP PROTOCOL FAILURE,且 FreeRDP 日志中出现证书名不匹配警告,需删除~/.config/freerdp/server/下形如<Windows-VM-IPv4-Address>_<RDP-Port>.pem的过期证书后重试(README Step 4 的调试步骤,Nix 环境同样适用)。
下一步按你的后端类型回到 docs/docker.md 或 docs/libvirt.md 核对虚拟机侧配置,或在 Windows 中装好 Office/Adobe 应用后运行winapps-setup --user --add-apps将它们加入应用菜单。
【免费下载链接】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),仅供参考