ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Bottles 指南:在 Linux 上运行 Windows 软件与游戏的完整构建与架构解读

Bottles 指南:在 Linux 上运行 Windows 软件与游戏的完整构建与架构解读 桌面应用【免费下载链接】BottlesRun Windows software and games on Linux项目地址https://gitcode.com/gh_mirrors/bo/Bottles点击查看免费下载Bottles 是一个面向 Linux 桌面的开源应用其核心使命是Run Windows Software on Linux——通过 Wine 与 Proton 等技术让 Windows 应用与游戏在 Linux 上获得原生的运行体验。本文以仓库 README.md 为基础系统讲解 Bottles 的安装方式、三种本地构建路径开发 Flatpak、发布 Flatpak、Meson 直构并结合仓库源码剖析其背后的组件化架构、瓶Bottle配置模型与运行器管理机制帮助你从会用进阶到会搭、懂原理。项目概览Bottle 是什么Bottles 将每个 Windows 应用环境抽象为一个独立的瓶Bottle本质上是对 Wine 前缀wineprefix的现代化管理封装。相比直接操作wine命令行Bottles 提供了一套完整的图形界面GTK4 前端与命令行工具CLI自动处理运行器Runner、图形组件DXVK、VKD3D、NVAPI、依赖与安装器Installer等繁杂环节。从仓库结构可以清晰看到它的双层设计详见 bottles/backend/ 与 bottles/frontend/backend核心逻辑层包含managers/瓶、组件、依赖、安装器、库、版本控制、Steam/Epic/Ubisoft 集成等管理模块、wine/Wine 命令封装如 reg、wineboot、winecfg、msiexec、explorer 等 30 余个工具模块、models/配置与结果数据模型、umu/UMU 启动器集成与dlls/DXVK 等 DLL 组件。frontendGTK4 图形界面与 CLIfrontend/cli/cli.py提供命令行入口frontend/bottles.py与frontend/main.py构成 GUI 入口。当前仓库版本号为 67.4见 VERSIONcpak.json中同步声明了version: 67.4并描述为Run and manage your Windows applications on Linux with Wine and Proton。安装方式Bottles 官方支持两种主流分发渠道Flathub以 Flatpak 形式分发应用 ID 为com.usebottles.bottles是官方推荐的首选渠道沙箱环境与权限模型均由 Flatpak 清单定义。cpak仓库根目录提供了 cpak.json 清单可用于 cpak 容器化分发该清单声明了/usr/bin/bottles与/usr/bin/bottles-cli两个二进制入口以及桌面项com.usebottles.bottles.desktop。值得注意的是cpak.json中关于权限与环境的细节它们揭示了 Bottles 运行时的关键依赖网络network: true、Wayland socket、PulseAudio socket 默认开启deviceAll: true允许访问全部设备GPU 等硬件直通文件系统仅向~/.local/share/bottles与~/.local/share/icons开放读写环境变量中注入了 MangoHud、OBSVkCapture、gamescope 等 Vulkan 扩展的搜索路径/usr/lib/extensions/vulkan/...这正是 Bottles 能在 Flatpak 沙箱内调用这些图形增强工具的通道。这一设计在源码中有对应印证bottles/backend/globals.py通过check_flatpak_extension()检测gamemoderun、gamescope、mangohud、obs-vkcapture等外部工具并探测 vkBasalt、LSFG-VK帧生成等 Vulkan 层的可用性运行期再据实启用对应功能。从源码构建 Bottles⚠️ 官方在 README 中明确警告在测试实验性构建前务必备份全部数据。Bottles 主要面向 Flatpak 环境构建仓库内提供三种路径开发版 Flatpak、发布版 Flatpak以及 Meson 直构需在 Flatpak 开发环境中进行。开发版 FlatpakDevelopment Flatpak面向日常开发迭代使用仓库内的开发清单build-aux/com.usebottles.bottles.Devel.json应用 ID 为com.usebottles.bottles.Devel。步骤从 Flathub 安装org.flatpak.Builder克隆仓库或你自己的 forkhttps://github.com/bottlesdevs/Bottles.git在仓库根目录执行flatpak run org.flatpak.Builder --install --install-deps-fromflathub --default-branchmaster --force-clean build-dir build-aux/com.usebottles.bottles.Devel.json必要时加--user参数以用户态安装运行flatpak run com.usebottles.bottles.Devel启动开发版。发布版 FlatpakRelease Flatpak稳定版的权威清单由 Flathub 仓库独立维护com.usebottles.bottles清单它定义了每次发布所使用的 Bottles 源码、依赖、运行时与权限。本地构建发布版需单独克隆 Flathub 清单仓库git clone https://github.com/flathub/com.usebottles.bottles.git cd com.usebottles.bottles flatpak run org.flatpak.Builder \ --user \ --install \ --install-deps-fromflathub \ --default-branchlocal \ --force-clean \ build-dir \ com.usebottles.bottles.yml构建完成后通过flatpak run com.usebottles.bottles//local启动。这里有两个值得注意的行为local分支与 Flathub 分支共用同一个应用 ID 和数据目录~/.local/share/bottles两个构建的改动会相互影响若要构建历史版本先用git log -- com.usebottles.bottles.src.yaml找到对应的 Flathub 提交并 checkout再执行构建命令。Meson 直构由于 Bottles 官方只以 Flatpak 形式分发仓库仅提供在 Flatpak 环境内直接构建的路径下载并安装最新构建包bottles-x86_64.zip解压后执行flatpak install bottles.flatpak必要时加--user在仓库根目录运行flatpak run -d --filesystem$PWD --commandbash com.usebottles.bottles.Devel ./build-aux/install.sh该脚本会将 Bottles 构建并安装到仓库内的build/目录通过./build/bin/bottles启动。官方同时说明由于 GNOME Builder 的限制目前无法直接用 Builder 构建 Bottles相关讨论见GNOME/gnome-builder#2061上述方式是最佳替代方案。此外meson_options.txt中的profile选项default/development可用于控制构建配置的侧重点。深入源码Bottles 的核心架构瓶配置模型一切围绕 BottleConfig每个 Bottle 的配置以 YAML 形式存储由 bottles/backend/models/config.py 中的BottleConfig数据类建模并通过dump()/load()实现原子化读写先写临时文件再os.replace避免配置损坏。配置的关键字段包括Name、Arch默认win64、Windows默认win10、Runner运行器名称支持sys-*系统前缀EnvironmentSteam或Custom决定是否启用 Steam 环境集成ParametersBottleParams图形与运行参数集合SandboxBottleSandboxParams沙箱共享策略网络、声音、输入、USB 等DLL_Overrides、Registry_Rules、Environment_Variables、Installed_Dependencies、External_Programs等。其中BottleParams几乎涵盖 Linux 游戏生态的所有增强工具开关从源码可完整列出参数默认值说明d7vk/dxvk/dxvk_nvapi/vkd3d/latencyflexfalseDLL 组件开关DXVK 等mangohud/mangohud_display_on_game_startfalse/trueMangoHud 性能监控obsvkc/vkbasalt/lsfg_vkfalseOBS 录制、画面增强、帧生成gamemode/gamescopefalse性能模式与合成器封装gamescope_*宽高、FPS、缩放、无边框等0/falsegamescope 详细配置syncwine同步机制frame_rate_limit/fsr/fsr_sharpening_strength0/false/8帧率限制与 FSR 超分custom_dpi/renderer96/gl渲染与 DPIvirtual_desktop/virtual_desktop_resfalse/1280x720虚拟桌面wayland/hdr/pulseaudio_latencyfalse显示与音频选项use_runtime/use_eac_runtime/use_be_runtimefalse/true/trueBottles Runtime 与反作弊运行时winebridge/sandboxfalseWineBridge 集成与沙箱versioning_*false版本控制压缩、自动快照、排除规则vmtouch/adaptive_launchfalse缓存预热与自适应启动Manager 核心与组件生态bottles/backend/managers/manager.py中的Manager类是Bottles 的核心一切从这里开始源码 docstring 原话。它以单例模式存在初始化时会检查并创建 bottles 目录结构根据网络连接状态加载组件目录离线时使用本地缓存见ConnectionUtils与force-offline设置依次初始化各子管理器RepositoryManager、VersioningManager、ComponentManager、InstallerManager、DependencyManager、ImportManager、SteamManager以及游玩时间追踪器Playtime Tracker数据写入process_metrics.sqlite若配置了自定义 Bottles 路径CustomBottlesPath会校验其可写性并对文档门户portal路径降级回默认路径。Manager持有的组件列表清晰体现了 Bottles 的模块化思路runnersWine/Proton 运行器、DXVK、VKD3D、NVAPI、D7VK、LatencyFleX 各成体系分别对应 bottles/backend/dlls/ 下的dxvk.py、vkd3d.py、nvapi.py、d7vk.py、latencyflex.py。数据路径规划见 bottles/backend/globals.py 的Paths类默认位于~/.local/share/bottles/runners/ Wine/Proton 运行器 bottles/ 瓶Bottle配置与数据 dxvk/ vkd3d/ nvapi/ d7vk/ latencyflex/ 图形组件 templates/ 瓶模板 runtimes/ Bottles Runtime winebridge/ WineBridge 集成 library.yml 应用库 process_metrics.sqlite 游玩时间统计TrdyPaths则记录了可迁移的第三方管理器路径~/.wine、Lutris 的~/Games、PlayOnLinux 的~/.PlayOnLinux/wineprefix、Bottles v1 的~/.Bottles为导入旧环境提供依据。运行器管理Runner 与 Wine 工具链bottles/backend/runner.py中的Runner类专门负责运行器Wine/Proton相关操作与瓶配置、DLL 组件管理解耦。其核心方法runner_update()展示了切换运行器的完整流程校验运行器路径存在sys-*系统运行器除外终止 wineserverwineboot.kill(force_if_stalledTrue)更新瓶配置中的Runner字段执行前缀更新wineboot.update()并重建用户 profile 链接按Parameters中开启的项重新初始化 DLL 组件DXVK 等overrides_onlyTrue重建覆盖项与注册表键根据是否为 Proton 运行器自动启停use_steam_runtime——官方 Proton 运行器依赖 Steam Runtime 提供大量库而 Soda、Wine-GE 等社区运行器则无需源码注释对此有明确说明。在更底层bottles/backend/wine/ 提供了 30 余个 Wine 工具模块覆盖reg注册表、regedit、wineboot前缀初始化/更新、winecfg配置、msiexecMSI 安装、uninstaller、explorer、wineserver、winepath、winedbg、start启动程序等每个模块都是对对应 Wine 命令的 Python 封装构成瓶内操作的基础执行层。瓶的生命周期与导入Manager.create_bottle()见 manager.py负责新瓶的创建前端入口位于 frontend/views/new_bottle_dialog.pycreate_bottle()。ImportManager则支持将既有 Wine 前缀、Lutris/PlayOnLinux/Bottles v1 环境导入为瓶。此外Steam、Epic Games Store、Ubisoft Connect 均有独立管理器bottles/backend/managers/ 下的steam.py、epicgamesstore.py、ubisoftconnect.py可以桥接各平台安装的 Windows 游戏。贡献与工程规范README 明确指向 CONTRIBUTING.md 作为贡献指南并补充了两条工程约束行为准则项目遵循 GNOME Code of Conduct适用于仓库、社交媒体、聊天群与论坛等所有 Bottles 社区空间。生成式 AI 使用声明维护者会在代码注释/文档、样板代码、issue 归类等场景使用 AI 辅助但架构、复杂逻辑、安全与沙箱模型、用户体验等核心工作始终由维护者人工设计与编写每一行生成代码在合并前都必须经维护者人工审查。自 2026 年 9 月 10 日起AI 辅助贡献需在提交信息中注明feat: add support for X Assisted-by: tool:model-version AI-Scope: what the AI generated in this commit, and the prompt used (or a short summary of it)单行、重命名、格式化等琐碎补全无需标注不符合该格式的 Pull Request 将被关闭。编码代理coding agents在改动文件、创建提交或发起 PR 前还必须遵循仓库的 AGENTS.md。结语从安装到构建从配置模型到运行器管理Bottles 展示了一个成熟的Linux 上跑 Windows 软件工程化方案它以瓶为隔离单元、以 Manager 为中枢、以组件生态为能力来源把 Wine 世界的复杂性收敛为可配置、可版本化、可迁移的现代体验。对开发者而言bottles/backend/ 与 bottles/frontend/ 的代码组织本身就是一个值得研读的 GTK4 Python 桌面应用范例对普通用户而言Flathub 一行安装即可开箱使用而本文的构建路径则为深度定制与二次开发铺平了道路。赞分享桌面应用【免费下载链接】BottlesRun Windows software and games on Linux项目地址https://gitcode.com/gh_mirrors/bo/Bottles点击查看免费下载相关推荐Bottles终极指南 - 如何在Linux上完美运行Windows软件和游戏Bottles终极指南 如何在Linux上完美运行Windows软件和游戏 想要在Linux系统上畅玩Windows游戏或使用专业软件吗Bottles为你提桌面应用Bottles在Linux上完美运行Windows软件的完整指南Bottles在Linux上完美运行Windows软件的完整指南 你是否曾经在Linux系统上遇到这样的困扰需要运行某个Windows专用软件却束手无策或桌面应用Bottles在Linux上运行Windows软件的完全指南Bottles在Linux上运行Windows软件的完全指南 你是否曾经在Linux系统上想要运行某个Windows专属的应用程序或游戏却因为兼容性问题而束桌面应用上一篇猫抓 Cat-Catch 浏览器资源嗅探扩展完整指南免费嗅探网页视频、3 步合并下载 M3U8下一篇iOS崩溃定位终极指南使用DSYMTools快速解决线上崩溃问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表