kernalix7/winpodx

GitHub: kernalix7/winpodx

WinPodX 在 Linux 上以容器方式运行 Windows,通过 FreeRDP RemoteApp 将 Windows 应用呈现为原生 Linux 窗口,实现无缝跨平台使用体验。

Stars: 1237 | Forks: 56

WinPodX ### 点击应用,Word 就会打开。就这么简单。

为每个 Windows 应用提供原生 Linux 窗口 —— 真实的图标,真实的 WM_CLASS
支持固定到任务栏。基于 FreeRDP RemoteApp + dockur/windows。零配置。

# 最新稳定版(默认)

curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash



# 最新 main 分支版本(开发版;可能不稳定)

curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash -s -- --main



# 卸载(保留 Windows 虚拟机数据;传入 --purge 可彻底清除所有内容)



  WinPodX in action — Windows apps as native Linux windows on KDE




Windows 的“关于”/“任务管理器”/“PowerShell”各自运行在独立的 Linux 窗口中,旁边是 WinPodX 仪表板(实时显示 Pod / 内存 / CPU 仪表,以及工作区磁贴)。

[![Beta](https://img.shields.io/badge/status-beta-orange?style=for-the-badge)](#status-beta)

[![Latest](https://img.shields.io/github/v/release/kernalix7/winpodx?include_prereleases&style=for-the-badge&label=latest&color=2962FF)](https://github.com/kernalix7/winpodx/releases)

[![license](https://img.shields.io/github/license/kernalix7/winpodx?style=flat-square&color=blue)](LICENSE)

[![python](https://img.shields.io/badge/python-3.9%2B-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/)

[![tests](https://img.shields.io/badge/tests-1800%2B-2EA44F?style=flat-square)](#testing)

[![CI](https://img.shields.io/github/actions/workflow/status/kernalix7/winpodx/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/kernalix7/winpodx/actions/workflows/ci.yml)

[![stars](https://img.shields.io/github/stars/kernalix7/winpodx?style=flat-square&color=FFD93D&logo=github&logoColor=white)](https://github.com/kernalix7/winpodx/stargazers)

[![downloads](https://img.shields.io/github/downloads/kernalix7/winpodx/total?style=flat-square&color=2EA44F)](https://github.com/kernalix7/winpodx/releases)

###### 支持平台

[![openSUSE](https://img.shields.io/badge/openSUSE-73BA25?style=flat-square&logo=opensuse&logoColor=white)](https://www.opensuse.org/)

[![Fedora](https://img.shields.io/badge/Fedora-294172?style=flat-square&logo=fedora&logoColor=white)](https://fedoraproject.org/)

[![Fedora Atomic Desktops](https://img.shields.io/badge/Fedora%20Atomic-294172?style=flat-square&logo=fedora&logoColor=white)](https://fedoraproject.org/atomic-desktops/)

[![Debian](https://img.shields.io/badge/Debian-A81D33?style=flat-square&logo=debian&logoColor=white)](https://www.debian.org/)

[![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=flat-square&logo=ubuntu&logoColor=white)](https://ubuntu.com/)

[![RHEL family](https://img.shields.io/badge/RHEL%20%2F%20Alma%20%2F%20Rocky-EE0000?style=flat-square&logo=redhat&logoColor=white)](https://www.redhat.com/)

[![Arch](https://img.shields.io/badge/Arch-1793D1?style=flat-square&logo=archlinux&logoColor=white)](https://archlinux.org/)

[![NixOS](https://img.shields.io/badge/NixOS-5277C3?style=flat-square&logo=nixos&logoColor=white)](docs/INSTALL.md#nix)

[![AppImage](https://img.shields.io/badge/AppImage-any%20distro-6F42C1?style=flat-square&logo=appimage&logoColor=white)](docs/INSTALL.md)

**English**  ·  [한국어](docs/README.ko.md)  ·  [安装](docs/INSTALL.md)  ·  [使用](docs/USAGE.md)  ·  [功能](docs/FEATURES.md)  ·  [架构](docs/ARCHITECTURE.md)  ·  [对比](docs/COMPARISON.md)

**告别全屏 RDP。** 每个 Windows 应用都会变成带有真实图标的原生 Linux 窗口 —— 支持固定、Alt-Tab 切换、双向文件关联。仅在你确实需要完整的 Windows 桌面时,才下拉进入(`winpodx app run desktop`)。 WinPodX 在后台运行 Windows 容器(通过 [dockur/windows](https://github.com/dockur/windows) 实现),并利用 FreeRDP RemoteApp 将 Windows 应用作为原生 Linux 应用呈现;同时,客户机内部一个经过 bearer 认证的 HTTP 代理负责处理宿主机到客户机的命令通道,且不会闪烁弹出 PowerShell 窗口。反方向(即 Linux 应用出现在 Windows 的“打开方式...”菜单中)则由宿主机端的监听器处理,它负责接收并处理由客户机内部基于特定标识的 Rust 垫片所写入的 JSON 请求。**几乎零外部 Python 依赖**(在 Python 3.11+ 上仅需标准库;在 3.9/3.10 上仅有一个纯 Python 编写的 `tomli` 后备支持)。 ## 最低要求 **在安装之前**,请确保你的机器确实支持虚拟化。WinPodX 在由 KVM 支持的容器中运行 Windows;如果缺少以下三项条件,安装过程虽然会顺利完成,但 Windows 将永远无法启动。 | 要求 | 如何检查 | 解决办法 | |---|---|---| | **在 BIOS / UEFI 中启用了 Intel VT-x 或 AMD-V** | `lscpu \| grep -i virtualization` 显示 `VT-x` 或 `AMD-V` | 重启 → 进入固件设置 → 启用“Intel Virtualization Technology” / “SVM Mode” / “VT-x”。在许多笔记本电脑上默认是关闭的。 | | **已加载 kvm 内核模块** | `lsmod \| grep kvm` 列出 `kvm_intel` 或 `kvm_amd` | `sudo modprobe kvm_intel` (Intel) 或 `sudo modprobe kvm_amd` (AMD)。一旦 BIOS 允许,下次重启时会自动加载。 | | **你的用户位于 `kvm` 组中** | `id -nG \| tr ' ' '\n' \| grep kvm` 返回 `kvm` | `sudo usermod -aG kvm $USER`,然后注销并重新登录。 | 硬件要求:支持虚拟化扩展的 x86_64 或 aarch64 CPU,8 GB+ 内存(推荐 12 GB+),约 30 GB 可用磁盘空间用于存放 Windows 镜像。如果在软件包安装步骤后 `/dev/kvm` 丢失,`install.sh` 会因相同的诊断结果而中止 —— 大多数“安装正常但 Windows 从未启动”的 Bug 报告都可以追溯到上述表格中的某一项。 ## 快速安装 一键命令(适用于任何受支持的 Linux 发行版): ``` curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash ``` 或者通过原生包管理器: ``` # openSUSE Tumbleweed / Leap / Slowroll sudo zypper addrepo https://download.opensuse.org/repositories/home:/Kernalix7/openSUSE_Tumbleweed/home:Kernalix7.repo sudo zypper install winpodx # Fedora 42 / 43 / 44 (dnf5 — Fedora 41+) sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/Kernalix7/Fedora_43/home:Kernalix7.repo sudo dnf install winpodx # Debian / Ubuntu — 从最新的 release 获取匹配的 .deb sudo apt install ./winpodx__all_debian13.deb # AlmaLinux / Rocky / RHEL 9 / 10 — 从最新的 release 获取匹配的 .rpm sudo dnf install ./winpodx--0.noarch.el10.rpm # Arch yay -S winpodx # Nix nix run github:kernalix7/winpodx # AppImage (与发行版无关,单文件) # 从最新的 GitHub release 下载 winpodx--x86_64.AppImage chmod +x winpodx-*-x86_64.AppImage ./winpodx-*-x86_64.AppImage setup ``` 有关离线 / 内网隔离环境的构建、源码安装、版本固定以及卸载说明,请参阅 [docs/INSTALL.md](docs/INSTALL.md)。 ## 首次设置 如果你使用了 `curl install.sh` 一键命令,设置过程已经运行完毕,Windows 虚拟机正在启动 —— 请直接跳转到[启动](#launch)。对于所有其他安装途径(包管理器、AppImage、源码、pip),在首次启动应用之前请运行一次设置: ``` # 自动设置 -- 检测主机默认值,无提示 winpodx setup # 交互式向导 -- 选择 backend、核心数、RAM、edition、语言、时区、debloat 预设 winpodx setup --customize ``` 设置程序会写入 `~/.config/winpodx/winpodx.toml` 和 `compose.yaml`,注册 GUI 启动器,并确认宿主机已具备 FreeRDP + Podman / Docker + KVM。如果缺少其中任何一项,输出末尾会显示针对特定发行版的安装命令(例如在 Debian / Ubuntu 上为 `sudo apt install xfreerdp3 podman podman-compose`,在 Fedora 上为 `sudo dnf install ...`)—— 请运行该命令并重新执行 `winpodx setup`。 随后,首次启动应用时会配置 pod,拉取 dockur 镜像,执行 Windows ISO 下载 + Sysprep + OEM 应用的流程,并在大约 5-10 分钟内达到可用的 RDP 会话状态。`winpodx pod wait-ready --logs` 会实时跟踪容器的进度,让你可以观察每个阶段: ``` winpodx app run desktop # First launch -- ~5-10 min, subsequent launches near-instant winpodx pod wait-ready --logs # Optional: watch first-boot progress live ``` 之后随时可以运行 `winpodx doctor` 重新检查宿主机状态,并在出现配置漂移时给出下一步的修复命令: ``` winpodx doctor # Read-only -- prints what would need fixing winpodx guest apply-fixes # Re-applies guest-side runtime fixes (RDP timeouts, NIC power-save, etc.) ``` ## 启动 ``` winpodx app run word # Launch Word winpodx app run word ~/doc.docx # Open a file winpodx app run desktop # Full Windows desktop winpodx launch # Quick app launcher (Start-menu style picker) ``` 或者直接点击你的应用菜单中的应用图标。`winpodx launch` 会打开一个可搜索的 Windows 应用选择器 —— 将其绑定到桌面环境的自定义快捷方式(KDE:*系统设置 → 快捷方式 → 自定义*;GNOME:*设置 → 键盘 → 自定义快捷方式*),即可作为全局热键使用。有关完整的 CLI、Qt6 GUI、健康检查和配置信息,请参阅 [docs/USAGE.md](docs/USAGE.md)。 ## 核心功能
**裸机伪装(规避虚拟机检测)** — 0.7.0 版本新增 · 默认关闭,可选择开启 - 使得对于拒绝在检测到的 hypervisor 下运行的软件而言,Windows 客户机看起来就像是一台**物理机** —— 解决 Nvidia GPU 直通出现的“代码 43”错误、安装启动时的虚拟机检查,以及对虚拟机环境存在敌意的安装程序 - `pod.disguise_level balanced | max`:**balanced**(平衡)会隐藏 CPUID 的 hypervisor 位和 KVM 特征签名,并镜像宿主机的真实 SMBIOS/DMI 信息;**max**(“强化”)则增加了一个本地构建的、经过补丁处理的 QEMU 镜像(`winpodx disguise build-image`),该镜像会重写 ACPI / 磁盘 / 传感器 / USB 指纹特征,并移除 virtio + Red-Hat 的 PCI 标记(保留对 USB3 的支持) - 从宿主机提取的特征字符串仅会保留在**本地镜像中**(绝对不会提交到 git);且永远不会读取序列号 / UUID / 资产标签 - **通过 al-khaser 0.82 验证** —— 可通过 `winpodx config set pod.disguise_level max` 或 GUI 设置中的“Bare-metal”选择器来启用 - [了解详情 →](docs/FEATURES.md#bare-metal-disguise-vm-detection-avoidance)
**反向打开** - 默认情况下,Linux 应用会出现在 Windows 客户机右键点击的“打开方式...”菜单中 - 在简短菜单和长列表的“选择其他应用”对话框中,均能显示正确的各个应用图标 - 选择某个应用后,会将文件打开请求往返传递给宿主机的 `xdg-open` - 根据 freedesktop 标准,自动发现宿主机端的 Linux 应用及其 MIME 关联 - 通过 `winpodx host-open` CLI 或 GUI 设置面板进行管理 - [了解详情 →](docs/FEATURES.md#reverse-open-linux-apps-in-windows-open-with) **无缝应用窗口** - RemoteApp (RAIL) 将每个 Windows 应用渲染为原生 Linux 窗口 —— 无需完整的桌面环境 - 通过 `WM_CLASS` 匹配实现各应用独立的任务栏图标(`/wm-class:` + `StartupWMClass`) - 双向文件关联:在你的文件管理器中双击 `.docx` → 会直接打开 Word - 多会话 RDP:内置的 [rdprrap](https://github.com/kernalix7/rdprrap) 自动启用多达 10 个独立会话 - 多显示器 RAIL (0.6.0):当远程应用窗口被拖动到第二个显示器时,仍能保持有效的输入响应 —— 默认开启(`cfg.rdp.multimon`,默认值为 `span`) - 在无人值守安装过程中会自动设置 RAIL 的前置条件
**零配置启动** - 首次点击应用时会自动配置好一切:配置文件、容器、桌面快捷方式 - 首次启动时的自动发现功能会扫描正在运行的 Windows 客户机,并使用其真实图标注册所有已安装的应用(支持注册表 App Paths、开始菜单、UWP/MSIX、Chocolatey、Scoop) - 随时可以通过 `winpodx app refresh` 或 GUI 的“刷新”按钮进行手动重新扫描 - 多后端支持:Podman(默认)、Docker、手动 RDP(libvirt 后端在 0.6.0 版本中已被弃用 —— 若要使用你自己的 libvirt 域,请保持在 ≤0.5.x 版本或使用手动后端) **外设与共享** - **剪贴板**:双向复制粘贴(文本 + 图像)—— 默认开启 - **声音**:RDP 音频流传输(`/sound:sys:alsa`)—— 默认开启 - **打印机**:将 Linux 打印机共享给 Windows —— 默认开启 - **主目录**:共享为 `\\tsclient\home` - **USB 驱动器**:通过 FileSystemWatcher 自动映射到驱动器号(E:、F:、...);对于会话开始后插入的驱动器,其子文件夹也能正常工作;USB 桌面快捷方式(`\\tsclient\media`)始终有效,在未挂载任何设备时会打开一个空文件夹,而不是报错 - **宿主机 USB / PCI 设备直通** (0.6.0):将真实的宿主机设备传入 Windows 客户机 —— 提供 `winpodx device list / attach / detach ` 命令、一个 GUI 的“设备”选项卡(双栏的宿主机↔客户机迁移器),以及一个系统托盘 USB 切换器。USB 支持热插拔(`cfg.pod.usb_live`,默认开启);PCI 设备会在启动时加入,需要重启客户机并加上 `--force` /话框确认
**自动化与安全性** - 自动挂起 / 恢复:容器在空闲时暂停,在下次启动时恢复 - 登录时自动启动 Pod (v0.5.9,可选择开启):`winpodx autostart on` 会安装一个系统托盘自启动项,使得 Pod 在登录时自动启动/恢复 —— 默认关闭(`autostart off|status`,或通过 GUI 设置中的复选框控制) - UNRESPONSIVE(无响应) → 恢复 (v0.5.5):在出现 `RUNNING → UNRESPONSIVE` 状态时会检测到 RDP 客户机卡顿,并通过客户机内部的 TermService 循环实现自愈,无需执行 `pod restart` - 宿主机自适应的 Windows-on-KVM 调优配置文件 (v0.5.5):包含 `+invtsc`、`platform_tick` 等,受宿主机功能限制 —— `tuning_profile = auto|safe|off` - 密码自动轮换:20 字符的加密密码,7 天轮换周期,支持原子化回滚 - 智能缩放:自动适配 GNOME、KDE、Sway、Hyprland、Cinnamon、xrdb 的 DPI 设置 - Windows 瘦身:默认禁用遥测、广告、Cortana 和搜索索引 - FreeRDP `extra_flags` 白名单(通过正则表达式验证),作为用户输入的安全边界 - 时间同步:在宿主机休眠/唤醒后强制重新同步 Windows 时钟 **运维与弹性** - 多语言界面 (v0.5.9):系统托盘 / GUI / CLI 已完全翻译为 7 种语言(英语 / 韩语 / 中文 / 日语 / 德语 / 法语 / 意大利语),根据 `$LANG` 自动检测 —— 可通过 `winpodx language ` 或 GUI 设置 → “WinPodX UI language”进行覆盖 - Windows 磁盘自动扩容 (v0.5.9):C: 盘在空闲且超过容量阈值时会自动扩容,受限于宿主机可用空间 —— 也可以按需扩容(`winpodx install grow-disk [SIZE]`,`winpodx install disk-usage`,GUI 工具 → 扩容磁盘) - 客户机同步 (v0.5.9):在宿主机升级后,将更新后的 agent / urlacl / rdprrap / 修复程序推送到正在运行的客户机中 —— 每次 Pod 启动时自动运行一次,或者使用 `winpodx guest sync [--force]` - 离线 / 内网隔离环境安装(`--source` + `--image-tar`) - 一键卸载(除非使用 `--purge`,否则保留 Windows 虚拟机数据) - 通过 `winpodx doctor` 进行健康检查(检查依赖项 / pod / RDP / agent / 磁盘 / 往返连通性 / 密码时效;支持 `--json` 输出供机器读取,`--quick` 执行低开销的子集检查,`--fix` 实现针对常见发现结果的幂等自动修复) - 重新设计的 Qt6 GUI (0.6.0):左侧采用“开始菜单”风格的导航侧边栏 + 新的**仪表板**主页(包含实时的 Pod / 内存 / CPU 环形仪表盘、磁盘使用情况、自动恢复状态卡片、已固定/最近使用的工作区磁贴,以及反向打开开关);应用启动器现在是“所有应用”页面,旁边是设备 / 设置 / 工具 / 终端 / 信息页面 —— 此外还有更轻量化的系统托盘。内置 SVG 图标集、响应式重排,以及兼具命令栏功能的强大搜索框 - 倾向于使用标准库的 Python(在 3.11+ 上无 pip 依赖;在 3.9 / 3.10 上仅有一个 `tomli` 后备支持)
要深入了解,包括多会话 RDP 的内部原理、应用配置模式以及反向打开的架构,请参阅 [docs/FEATURES.md](docs/FEATURES.md)。 ## 文档 | 文档 | 内容涵盖 | |----------|---------------| | [INSTALL.md](docs/INSTALL.md) | 所有安装途径 —— 一键脚本、包管理器、AppImage、离线、Nix、源码 | | [USAGE.md](docs/USAGE.md) | CLI 参考、Qt6 GUI 指南、健康检查、配置文件 | | [FEATURES.md](docs/FEATURES.md) | 反向打开、多会话 RDP、外设、应用配置、自动发现 | | [ARCHITECTURE.md](docs/ARCHITECTURE.md) | 工作原理(图表)、技术栈、源码树、数据流 | | [COMPARISON.md](docs/COMPARISON.md) | WinPodX 对比 winapps / LinOffice / winboat,以及 WinPodX 对比 Wine | | [CHANGELOG.md](CHANGELOG.md) | 完整的版本历史 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 开发环境配置与工作流程 | | [SECURITY.md](SECURITY.md) | 安全漏洞披露流程 | ## 支持的发行版 | 发行版 | 包管理器 | 状态 | |--------|-----------------|--------| | openSUSE Tumbleweed / Leap 15.6 / Leap 16.0 / Slowroll | zypper | 已测试 | | Fedora 42 / 43 / 44 / Rawhide | dnf | 受支持 | | Fedora Silverblue / Kinoite / Sericea / Bluefin / Bazzite (42 / 43 / 44) | rpm-ostree (OBS, `--apply-live`) | 受支持 | | Debian 12 / 13, Ubuntu 24.04 / 25.04 / 25.10 / 26.04 | apt | 受支持 | | AlmaLinux / Rocky / RHEL 9 / 10 | dnf | 受支持 | | Arch / Manjaro | pacman + `yay -S winpodx` | 受支持 | | NixOS(以及任何发行版上的 Nix) | nix flake | 受支持 | 每次推送标签(`v*.*.*`)都会自动发布到所有渠道 —— 维护者详情请参阅 [packaging/](packaging/)。 ## 测试 ``` # 从 repo 根目录(无需安装) export PYTHONPATH="$PWD/src" python3 -m pytest tests/ # 1800+ tests ruff check src/ tests/ # Lint ruff format --check src/ tests/ ``` ## 安全性 有关安全问题,请遵循 [SECURITY.md](SECURITY.md) 中的流程。 ## 许可证 [MIT](LICENSE) — Kim DaeHyun (kernalix7@kodenet.io)
标签:FreeRDP, 可视化界面, 容器, 系统工具, 虚拟化, 请求拦截, 远程桌面, 逆向工具