目标:帮你根据自己的需求,在 兼容性 / 性能 / 方便性 / 安全性 之间快速选出最合适的方式,把 Windows 软件或游戏跑在 Linux 上。

目录


一、为什么需要在 Linux 上运行 Windows 程序

典型原因:

  • 某些行业应用只提供 Windows 版本(财务、报表、专有硬件工具)。
  • 游戏:大量只支持 DirectX 的 Windows 游戏。
  • 过渡期:迁移到 Linux 但暂时离不开少数 Win 工具。
  • 自动化 / 批处理:在服务器或容器里跑旧版 CLI 工具。

二、主要技术路线对比速览

路线核心原理优点缺点适用场景
Wine用户态实现 Win32/Win64 API,调用 Linux 内核与 X/Wayland轻量、启动快、资源占用低兼容性不完全,配置细节多办公软件、工具、小型应用
Proton (Steam)Valve 基于 Wine + DXVK/VKD3D 补丁游戏优化、集成好Steam 外独立用需额外配置Steam 游戏
PlayOnLinux / Lutris / Bottles在 Wine 上的图形化管理层多版本 Wine、安装脚本、易管理学习仍要懂 Wine 基础想少折腾的用户
虚拟机 (VirtualBox/VMware)完整 Windows 系统兼容性 100%(驱动除外)资源重、图形性能较差办公、老系统依赖
KVM + GPU 直通硬件虚拟化 + 直通游戏/专业渲染接近原生配置复杂,硬件要求高高性能需求
远程/云桌面服务器跑 Windows,客户端访问本地零负担需网络/延迟,版权成本偶尔使用的专有软件
其它兼容层 (如 hangover, box86/box64)指令/ABI 转换特殊场景生态不成熟ARM 上跑 x86/Win 软件

三、Wine:核心兼容层

1. Wine 工作原理简述

Wine 不是模拟器(“Wine Is Not an Emulator”),它把 Windows API 调用翻译成 POSIX / Linux 调用;对图形用 X11/Wayland + OpenGL/Vulkan,对注册表做文件化实现,对 PE 程序加载做兼容层。优点是性能损耗低(多数应用 010%)。

2. 安装 Wine

不同发行版:

# Debian / Ubuntu / Mint
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install --install-recommends winehq-stable wine32 wine64 winetricks

# 若官方源版本旧,使用 WineHQ 源(略)

# Arch / Manjaro
sudo pacman -S wine wine-mono wine-gecko winetricks

# Fedora
sudo dnf install wine winetricks

# OpenSUSE
sudo zypper install wine winetricks

验证:

wine --version

3. 关键概念:Prefix / 32 位与 64 位

  • WINEPREFIX:一个独立“伪 C 盘”目录,默认 ~/.wine
  • 可以为不同程序建立隔离前缀:
export WINEPREFIX=$HOME/.wine-appA
winecfg
  • 32 位前缀(旧程序更兼容):
WINEARCH=win32 WINEPREFIX=$HOME/.wine-32 winecfg

4. 环境变量与常用命令

变量作用示例
WINEPREFIX指定前缀路径WINEPREFIX=~/.wine-app
WINEARCHwin32 / win64WINEARCH=win32
DXVK_LOG_LEVEL控制 DXVK 日志DXVK_LOG_LEVEL=none
PROTON_USE_WINED3D强制使用 OpenGLPROTON_USE_WINED3D=1

常用操作:

winecfg               # 配置界面
wine notepad          # 测试
wine explorer /desktop=name,1280x800 app.exe  # 虚拟桌面模式
wine uninstaller      # 卸载类似“添加/删除程序”
regedit               # 注册表编辑

5. Winetricks 安装运行库

很多应用需要 Microsoft VC++ 运行库、.NET、DirectX:

winetricks corefonts vcrun2015 dotnet48 dxvk

查询可用组件:

winetricks list-all | grep vcrun

6. 字体 / 输入法 / 中文显示

  • 安装中文字体:sudo apt install fonts-wenquanyi-* 或复制 Windows C:\Windows\Fonts
  • Wine 前缀内字体路径:$WINEPREFIX/drive_c/windows/Fonts
  • 输入法 (fcitx5 / ibus):需要在启动前导出:
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
  • 若出现方框:安装 winetricks allfonts 或手动装 msyh.ttc.

四、游戏场景:Steam Proton & GE-Proton

  • Proton = Valve 维护的 Wine 分支 + DXVK (D3D9/10/11→Vulkan) + VKD3D (D3D12→Vulkan) + 补丁集。
  • 启用:Steam 设置 → Steam Play → “为所有标题启用”。
  • GE-Proton(社区增强)安装:
mkdir -p ~/.steam/root/compatibilitytools.d
cd ~/.steam/root/compatibilitytools.d
# 解压 GE-Proton 发行包到此目录
  • 每个游戏属性里选择特定 Proton 版本,排查兼容性。
  • 查看日志:steam -console 或游戏目录下 steamapps/compatdata/<appid>/pfx

五、图形化工具:PlayOnLinux / Lutris / Bottles

工具特点适合人群
PlayOnLinux老牌,简单脚本入门用户跑办公/轻量软件
Lutris游戏生态强,脚本库大想装各种 Launcher/游戏平台
BottlesUI 现代、自动分类(Gaming/App/Custom)图形化管理派

示例:Lutris 安装 Battle.net、Epic、Origin,自动配置 DXVK、依赖。

六、虚拟化方案:VirtualBox / VMware / KVM(QEMU)

方案优点缺点适合
VirtualBox简单、跨平台3D 性能差轻量办公
VMware Workstation驱动成熟专有软件、收费稳定需求
KVM + virt-manager原生性能、内核支持新手上手曲线长期使用
GPU 直通 (VFIO)游戏/渲染接近原生硬件需 IOMMU 分组好高性能场景

GPU 直通核心步骤(极简示意):

  1. BIOS 开启 VT-d / AMD-Vi。
  2. lspci -nn 找 GPU ID。
  3. 内核参数添加 intel_iommu=on iommu=pt
  4. 绑定 VFIO:echo '0000:01:00.0' > /sys/bus/pci/drivers/vfio-pci/bind
  5. 在 QEMU XML 指定直通设备。

七、容器 / 轻量隔离与新兴项目

  • 一些人用 Docker 包装 Wine,便于分发:镜像体积大 + GPU/音频处理麻烦,适合 CI 批量打包 / 生成器。
  • Box86 / Box64:在 ARM SBC(如树莓派)上通过指令翻译 + Wine 运行 x86 Windows 程序,性能和兼容性仍在发展。
  • Proton outside Steam:通过 protontricksprotonup 把 Proton 当作普通 Wine。适合专注游戏环境。

八、性能优化要点

场景优化点
DirectX 9/10/11使用 DXVK(Vulkan 后端)
DirectX 12确保最新 vkd3d-proton
多核 CPU设置 taskset / 调整调度器 / 启用游戏模式 (gamemoderun)
I/O 频繁把前缀放 SSD,上游文件系统用 noatime
中文字体卡顿精简多余字体,避免 Fontconfig 过载
防撕裂启用 compositor 或使用 vblank_mode=0 做基准测试

示例:

gamemoderun DXVK_LOG_LEVEL=none WINEPREFIX=~/.wine-game wine Game.exe

九、安全与风险控制

  • 来历不明的 EXE 仍可能包含恶意逻辑;Wine 不是沙箱。
  • 关键前缀隔离:不同程序不同 WINEPREFIX。
  • 禁止访问主目录:配合 Firejail / Bubblewrap:
firejail --private=~/.wine-app/drive_c wine app.exe
  • 不要把 root 权限交给 Wine 程序。

十、常见疑难与排查

问题现象排查思路
程序打不开无输出或闪退WINEDEBUG=+seh,+tid 查看回溯
缺少 DLL弹窗提示用 winetricks 安装相应 vcrun / d3dx
乱码菜单中文方块安装字体 + locale 设置 LANG=zh_CN.UTF-8
输入法失效无法中文输入检查环境变量 + fcitx5-diagnose
游戏黑屏仅声音切换 Proton 版本 / 禁用 Esync/Fsync
帧数低卡顿检查 Vulkan 驱动、升级 Mesa、启用 DXVK
DirectX 12 报错“unsupported”更新显卡驱动 + 最新 vkd3d-proton

调试日志示例:

WINEDEBUG=+seh,+loaddll,+msi WINEPREFIX=~/.wine-app wine setup.exe &> log.txt

十一、方案选择决策树

需要完整 Windows 系统功能 / 驱动? ── 是 ──> 虚拟机 / KVM / GPU 直通
│
否
│
主要是 Steam 游戏? ── 是 ──> Proton / GE-Proton
│
否
│
程序很简单(办公/工具) ──> 直接 Wine / Bottles
│
复杂依赖 + 多版本 DLL ──> Lutris / 多前缀策略
│
需要 ARM 上跑 x86? ──> Box86 + Wine (实验)

十二、FAQ 速答

Q: Wine 会不会拖慢系统? 只在运行程序时占用资源,本身常驻极少。

Q: 为什么要多个前缀? 隔离依赖,防止 A 程序覆盖 B 程序的 DLL / 注册表。

Q: 游戏闪退但无日志? 可能缺运行库 / GPU 驱动问题;加大 WINEDEBUG 分析。

Q: 能直接调用 Windows 驱动吗? 几乎不行(内核态驱动不支持)。

Q: .NET 程序更推荐方式? 尝试 dotnet 原生(跨平台)或 Winetricks 安装对应 dotnetXX

Q: 企业环境要合规? 优先虚拟机(隔离、补丁、AD 集成),Wine 仅用于低风险工具。

十三、参考与延伸阅读

  • WineHQ 官方:https://www.winehq.org/
  • AppDB 兼容性数据库:https://appdb.winehq.org/
  • Proton DB(游戏兼容性):https://www.protondb.com/
  • Lutris 脚本库:https://lutris.net/
  • Bottles 项目:https://usebottles.com/
  • DXVK:https://github.com/doitsujin/dxvk
  • VKD3D-Proton:https://github.com/HansKristian-Work/vkd3d-proton
  • Arch Wiki(极佳资料):Wine / Proton / KVM GPU Passthrough 页面

快速清单(TL;DR)

需求推荐起步
办公软件Wine + 独立前缀 + winetricks 基础运行库
网络游戏 (非 Steam)Lutris + DXVK + GE-Proton (可选)
Steam 游戏直接启用 Proton,失败再换 GE-Proton
高性能 3A / 原生体验KVM GPU Passthrough
老旧 Windows 工具32 位前缀 + vcrun + corefonts
ARM 上尝试box64 + Wine (实验性质)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐