Winboat:不装虚拟机,直接在 Linux 桌面上启动 Windows 程序
【免费下载链接】winboatRun Windows apps on 🐧 Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat
在 Linux 桌面上双击一个 .xlsx,想直接打开它的 Windows 程序?Winboat 让 Windows 跑在 Docker/Podman 容器里,再用 FreeRDP 的 RemoteApp 协议把应用窗口直接投影到你的 Linux 桌面上——看起来就像原生程序,而不是一个套了壳的虚拟机窗口。
克隆仓库,装完就能用
最短路径:
git clone https://gitcode.com/GitHub_Trending/wi/winboat cd winboat && bun i && bun run build:linux-gs应用启动后,配置向导里先选 Windows 版本(constants.ts 里维护了 Windows 10/11 的 Pro、LTSC、Enterprise 以及自定义镜像),再选语言,剩下下载镜像、起容器、装 Guest Server 这些事交给它。
真正跑起来之后,Windows 侧的活由一份脚本包办:install.bat。它导入注册表配置、建目录、把整个组件包拷进去,骨架就这几行:
set WB_DIR=C:\Program Files\WinBoat if not exist "%WB_DIR%" mkdir "%WB_DIR%" "%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建目录之前还有一步容易被忽略的:把安装目录加进 Defender 排除列表,避免文件刚拷进去就被杀软扫描卡住。
把 exe 挂成系统服务
install.bat 的关键词是 nssm——一个把普通 exe 变成 Windows 系统服务的小工具:
"%NSSM%" install WinBoatGuestServer "%WB_DIR%\server\winboat_guest_server.exe" "%NSSM%" set WinBoatGuestServer Start SERVICE_AUTO_STARTexe 本身不会自己活过重启,挂成服务之后相当于给程序办了张长期身份证:开机自动上岗、崩溃自动拉起、还能在"服务"管理器里直接看到它。脚本里实际注册了两个服务,都以 SYSTEM 身份运行:API 服务WinBoatGuestServer,和一个永不升级自己、专门给前者换版本的更新服务WinBoatGuestServerUpdater。
两个服务,防火墙各留一个口子
Windows 端的 API 服务在 7148 端口听请求(端口号在 Linux 侧的 constants.ts 里写死),更新服务在 7150。Linux 宿主并不直连 Windows,而是通过容器端口映射够到容器里的 7148,映射表里每一项都绑在 127.0.0.1 上,外网根本摸不到;Windows 侧的防火墙也只为 7148 和 7150 各加了一条 TCP 入站规则。
网络面就是这么窄:两个端口,只有本机可达,再加上安装时生成的共享密钥 guest_token——宿主每次请求都要带对钥匙,对不上直接被拒。你在 Linux 桌面上点开一个 Windows 程序,本质就是 Linux 应用对着这个 API 发了一次请求。
按你的环境改三处
- 安装位置由 install.bat 开头的
WB_DIR决定,改一个变量就能把整套组件挪到你习惯的位置,企业环境放到统一管理的目录下也省事。 - Windows 版本在安装向导里选,装完不能换,只能重装;RDPApps.reg 在首次安装时导入,干的主要是关掉远程桌面应用的程序白名单、让键盘布局跟服务端走,目的是 RemoteApp 拉起来顺手。
- Guest Server 的升级不用动手:更新服务收一份新版压缩包,先解压校验,再走停旧服务、换目录、起新服务的流程;新服务健康检查不过就自动回滚到旧版,坏的版本留不下痕迹。
Winboat 适合"Linux 为主,但手里有几款离不开的 Windows 程序"的团队:不用再为每个应用单开一台虚拟机或挂一条 RDP 会话。项目目前还是 beta,踩到坑得有点排错耐心;想继续深挖,可以从 FreeRDP 的窗口合成看起,也可以读读 Linux 侧向 Guest Server 下指令的 exec-helper.ts。
【免费下载链接】winboatRun Windows apps on 🐧 Linux with ✨ seamless integration项目地址: https://gitcode.com/GitHub_Trending/wi/winboat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考