上一站: linux-生存日记(二-开始吧!)
虽然其实上一章还没写完,但冥最近沉迷终末地,正好作为一个不错的契机来先完成这一篇以及SP1的生存日记
在Linux上运行Windows程序是非常常见的需求,包括不少办公软件、设计工具、游戏 等。虽然Linux生态系统日益丰富,但仍有不少Windows专用的软件并没有提供Linux支持。 不过幸运的是,Linux上依旧有不少方法可以让我们运行Windows程序,下面是几种常见的方案。如果无需了解背景知识,可以直接跳到Bottles部分开始阅读。
Wine
Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,macOS 及 BSD 等)上运行 Windows 应用的兼容层。Wine 不是像虚拟机或者模拟器一样模仿内部的 Windows 逻辑,而是將 Windows API 调用翻译成为动态的 POSIX 调用,免除了性能和其他一些行为的内存占用,让你能够干净地集合 Windows 应用到你的桌面。
Wine也是如今几乎所有除虚拟机外在Linux上运行Windows程序的解决方案的基础。它支持各种应用程序和游戏,虽然并非所有程序都能完美运行,但随着时间的推移,兼容性不断提升。
鉴于直接使用Wine的复杂性,在这里冥仅将其作为背景知识介绍,如需深入了解可以前往他们的官网
Proton
如果主要是为了玩游戏,那请直接向 Valve 致敬。
Steam 内置的 Proton 是基于 Wine 的改进版,专门为游戏做了海量的优化(特别是 DXVK 将 DirectX 转换成 Vulkan)。它被深度集成在 Steam 客户端中,作为 “Steam Play” 功能的核心,让 Linux 用户能够“开箱即用”地运行绝大多数专门为 Windows 开发的游戏,而无需关心复杂的底层配置。
Valve建议大多数用户应该使用Steam客户端自带的Proton,但Valve也提供了Proton的源代码,让独立使用Proton的各种衍生版成为了可能。
如果想知道想玩的游戏在 Linux 下的运行状况,可以去 ProtonDB 查查兼容性报告,那里汇聚了大量玩家的测试反馈。
Bottles
对于日常场景,冥在这里强烈推荐使用 Bottles 来运行Windows程序。它提供了一个现代化的图形界面来管理 Wine 前缀(Prefix)。每一个“瓶子”都是一个独立的 Windows 环境,互不干扰,非常适合用来测试或者隔离运行不同的软件,在bottles里可以自由的选择不同的Wine/Proton版本来运行不同的软件,同时,社区也提供了大量预设配置,方便一键安装常用依赖,另外,如果Bottles提供的运行器不能满足需求,也可以较为方便的使用第三方运行器。(详见Linux 生存日记(SP1/我要玩终末地)
Bottles 官方最推荐的安装方式是使用 Flatpak,这样可以保证环境的一致性,也不用担心弄乱系统依赖。
要使用它,首先得确保系统上已经配置好了 Flatpak 和 Flathub。大家可以去 Flathub Setup 找到针对所有发行版的详细教程。为了方便各位,暗雨冥这里整理了几个常见发行版的一键作业:
Ubuntu / Debian
sudo apt install flatpakflatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepoFedora / CentOS / RHEL
sudo dnf install flatpakflatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepoArch Linux
sudo pacman -S flatpakflatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepoopenSUSE
sudo zypper install flatpakflatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo环境准备好之后,安装 Bottles 就只需要一行命令了:
flatpak install flathub com.usebottles.bottles在 Bottles 里,可以实现:
- 新建瓶子:选择环境类型(游戏、软件、自定义)。
- 安装依赖:在“依赖”选项卡里一键安装 .NET, Visual C++ Redistributables 等常用组件。
- 运行程序:直接运行 exe,或者把快捷方式添加到系统菜单。
对于大部分 Windows 软件,Bottles 往往能提供相当不错的体验。 同时,Bottles支持管理Steam的Proton前缀,可以方便的在Bottles里使用不同版本的Wine/Proton来运行Steam游戏。
虚拟机:最后的防线
如果 Wine 和 Proton 都无法满足需求,或者需要运行带有反作弊系统(如某些网游)以及极度依赖专用驱动的软件,那么虚拟机是更稳妥的选择,关于这部分内容,暂不在本篇展开,仅列举常见解决方案。
- VirtualBox:简单易用,适合新手。
- KVM/QEMU + Virt-Manager:Linux 原生虚拟化方案,性能极强,几乎只有 CPU 损耗,但配置稍显复杂。
在虚拟机里跑一个完整的 Windows,虽然资源开销大,但兼容性几乎是 100%(不涉及硬件的情况下)的。
总结
至此,就是目前在Linux上运行Windows程序的几种主流方法,但以终末地为例,Bottles中提供的runner并不能成功运行,这一部分内容请移步Linux 生存日记(SP1/我要玩终末地)
部分信息可能已经过时


