news 2026/9/15 14:19:39

如何在 NixOS 与独立 Nix 上安装 WinApps 与 winapps-launcher?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在 NixOS 与独立 Nix 上安装 WinApps 与 winapps-launcher?

如何在 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 PlasmaGNOMEXFCEWayland目前不支持(见 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、dialoglibnotifynetcatiproute2作为包的运行时依赖打包,并且安装器通过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>替换为你的用户名。二进制缓存(substituterstrusted-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),应用后即可在系统环境中找到winappswinapps-setup

安装后的验证与首次运行

包安装只完成宿主侧组件,真正的初始化仍要跑一次winapps-setup安装向导。验证包本身是否就位:

winapps --help winapps-setup --help

README 给出的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 --system

setup.sh 中waInstall()的实际执行顺序是:检查已有安装 → 加载配置文件 → 检查依赖 → 检查后端状态(Docker/Podman 容器是否在运行,或 libvirt 虚拟机是否开机)→ 检查 RDP 端口 → RDP 连接测试 → 扫描 Windows 中已安装的应用 → 为选定的应用创建.desktop条目与启动脚本。全部通过后终端打印INSTALLATION COMPLETE.;失败时会打印错误类型与排查建议,并按trap机制以非零状态退出。

向导能否跑通取决于两个前置条件:

  1. 配置文件必须存在。在~/.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 运行时自动探测;WAFLAVORdockerpodmanlibvirtmanual之一。由于该文件包含明文密码,README 要求收紧权限:

    chown $(whoami):$(whoami) ~/.config/winapps/winapps.conf chmod 600 ~/.config/winapps/winapps.conf

    缺少配置文件时向导会以「MISSING CONFIGURATION FILE」退出(exit status 4)。

  2. 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",当前用户需属于libvirtdkvm组(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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 14:17:22

Docker国内镜像源2026实测:可用加速地址与完整配置教程

先说明一个现实&#xff1a;Docker 用起来的第一道坎&#xff0c;往往不是 Linux 命令&#xff0c;而是那个仿佛永远在转圈的docker pull。不管是个人电脑上的 Docker Desktop&#xff0c;还是服务器上的 Docker Engine&#xff0c;只要镜像仓库的访问链路一波动&#xff0c;拉…

作者头像 李华
网站建设 2026/9/15 14:17:21

Windows虚拟内存配置与OOM排查:从页面文件到Docker优化实战

电脑弹"内存不足"、开发环境跑着跑着崩溃、Docker 容器被 OOM Kill——这三个问题&#xff0c;十有八九都绕不开 Windows 的虚拟内存配置。但很多人对虚拟内存的理解还停留在"把硬盘空间当内存用"&#xff0c;于是要么干脆禁用&#xff0c;要么拍脑袋设一个…

作者头像 李华
网站建设 2026/9/15 14:15:53

Loop 窗口管理教程:5 个分屏快捷键,让 Mac 多任务快人一步

Loop 窗口管理教程&#xff1a;5 个分屏快捷键&#xff0c;让 Mac 多任务快人一步 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop Loop 是一款 macOS 窗口管理工具&#xff0c;靠快捷键把任意窗口一键吸…

作者头像 李华
网站建设 2026/9/15 14:15:17

向量索引参数调优完全指南:如何平衡召回率与QPS

向量索引参数调优完全指南&#xff1a;如何平衡召回率与QPS 【免费下载链接】zvec A lightweight, lightning-fast, in-process vector database 项目地址: https://gitcode.com/GitHub_Trending/zve/zvec Zvec&#xff08;zvec&#xff09;是一款轻量、极速的进程内向量…

作者头像 李华