在 Linux 上运行 Windows 应用:Winboat 4 个关键组件与 5 步安装指南
【免费下载链接】winboatRun Windows apps on 🐧 Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat
在 Linux 桌面上双击应用列表里的“计算器”,一个 Windows 计算器窗口弹出来,你能把它拖到任意位置——而你的 Linux 主机甚至感觉不到虚拟机的存在。WinBoat 就像一艘趴在水面下的潜艇:Windows 整个跑在 Docker 容器里,只有应用窗口探出水面,出现在你的 Linux 桌面上。
🧩 原理拆解:组成 WinBoat 的 4 个关键组件
它的运行逻辑很直接:Windows 作为虚拟机跑在 Docker/Podman 容器内,Linux 端界面通过一组固定端口与客端通信。看懂下面 4 个组件,就懂了整套东西。
服务注册脚本 install.bat
install.bat 在 Windows 客端首次启动后自动执行:用 nssm.exe 把WinBoatGuestServer和WinBoatGuestServerUpdater两个程序注册为系统服务,并用 netsh 放行入站端口。为什么要注册成服务而不是普通进程?服务以 SYSTEM 身份运行、崩溃自动拉起,Linux 端随时都有 API 可调。
"%NSSM%" install WinBoatGuestServer "%WB_DIR%\server\winboat_guest_server.exe" "%NSSM%" set WinBoatGuestServer Start SERVICE_AUTO_START netsh advfirewall firewall add rule name="Allow WinBoat API 7148" dir=in action=allow protocol=TCP localport=7148客端 API winboat_guest_server
main.go 是一个监听:7148的 HTTP 服务,暴露/apps、/metrics、/health、/rdp/status四个端点。Linux 没法直接摸到虚拟机里的进程,WinBoat 就把 PowerShell 脚本(如 apps.ps1)包成 REST 接口,Windows 里装了什么应用,以 JSON 形式端给界面渲染。
端口映射 constants.ts
constants.ts 定义了宿主机与客端的全部端口对应关系,且全部只映射到127.0.0.1——容器里的 Windows 不会把端口直接暴露到局域网。宿主机一侧占用的是 WinBoat 预留的 47270–47279 区段。
export const GUEST_API_PORT = 7148; export const HOST_API_PORT = 47271; // API:宿主机 47271 -> 客端 7148 export const HOST_RDP_PORT = 47273; // RDP:宿主机 47273 -> 客端 3389更新入口 updater
updater 监听:7150,接收不超过 100 MiB 的 ZIP 包来替换WinBoatGuestServer,失败自动回滚。它校验请求必须来自回环地址、且头里带着安装时生成的共享密钥guest_token(见 auth.go)。updater 自身是“永不被更新”的独立服务——主服务出了坏版本,也总有通道修它。
🛠️ 动手实操:从零到跑起 Windows 应用的 5 个步骤
第 1 步:核对前提条件。BIOS/UEFI 开启 KVM;内存至少 4 GB、CPU 至少 2 核、磁盘留 32 GB;装 Docker(Docker Desktop 不受支持)或 Podman 4.x 及对应 compose 工具;FreeRDP 需 3.x 版本且带声音支持。
第 2 步:装好主程序。可直接取 AppImage/.deb/.rpm 包;也可以从源码构建:
git clone https://gitcode.com/GitHub_Trending/wi/winboat cd winboat && bun i bun run build:linux-gs做完后你应该看到:dist目录下出现 AppImage 和linux-unpacked/winboat可执行文件。
第 3 步:向导里选版本。版本列表来自 constants.ts 的WINDOWS_VERSIONS:Windows 11 Pro / LTSC 2024 / Enterprise、Windows 10 Pro / LTSC 2021 / Enterprise,或自定义 ISO;同时设置内存(最低 2 GB、建议 4 GB)、核心数与磁盘(≥32 GB)。做完后你应该看到:进度条依次经过“Creating Compose File → Starting Container → Installing Windows”。
第 4 步:等客端服务起来。Windows 开机后 install.bat 自动执行,注册两个服务并放行 7148/7150。做完后你应该看到:主界面应用列表不再是空的——这份列表正是从客端/apps端点拉取的。
第 5 步:启动 Windows 应用。双击任一应用,FreeRDP 通过127.0.0.1:47273连到客端建立 RemoteApp 会话,窗口被合成为 Linux 原生窗口。做完后你应该看到:程序没有 RDP 外框,可以和 Chrome、VS Code 一起摆在同一工作区。
🔧 进阶定制:3 处可以改的地方
- install.bat:改
WB_DIR=C:\Program Files\WinBoat为其他路径 → Windows 内整个客端安装目录跟着移动,Defender 排除规则也随同变量变化。 - RDPApps.reg:含 4 条注册表调整,
fDisabledAllowList=1让所有应用都能经 RemoteApp 启动,IgnoreRemoteKeyboardLayout=1让会话使用服务端键盘布局 → 决定能拉起哪些程序、会话内键盘布局如何。 - constants.ts:把
HOST_API_PORT等(47270–47279 区段)改成其他空闲端口 → 只影响宿主机侧监听端口,客端仍是 7148,用于解决与本机其他服务的端口冲突。
一句话总结
Winboat 适合需要偶尔跑特定 Windows 软件、又不想装双系统的 Linux 用户;项目处于 beta,会遇到一些坑。细节请以仓库内 README 为准。
【免费下载链接】winboatRun Windows apps on 🐧 Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考