《Marvel's Guardians of the Galaxy》Proton 启动无窗口问题修复记录
平台:Linux (X11) + Steam + Proton
结果:使用官方 Proton 10.0-4 后游戏正常出画面
文章目录
- [《Marvel's Guardians of the Galaxy》Proton 启动无窗口问题修复记录](#《Marvel's Guardians of the Galaxy》Proton 启动无窗口问题修复记录)
-
- [一 问题现象](#一 问题现象)
- [二 排查过程](#二 排查过程)
-
- [第 1 步:确认进程状态](#第 1 步:确认进程状态)
- [第 2 步:检查进程到底加载进度](#第 2 步:检查进程到底加载进度)
- [第 3 步:检查 DXVK 日志(PROTON_LOG)](#第 3 步:检查 DXVK 日志(PROTON_LOG))
- [第 4 步:排除常见嫌疑](#第 4 步:排除常见嫌疑)
- [第 5 步:换官方 Proton 10.0-4](#第 5 步:换官方 Proton 10.0-4)
- [三 问题分析(根因总结)](#三 问题分析(根因总结))
- [四 解决方案](#四 解决方案)
-
- [方案 A(推荐):Steam 里换兼容层](#方案 A(推荐):Steam 里换兼容层)
- [方案 B:命令行直接启动(调试用)](#方案 B:命令行直接启动(调试用))
- [五 避坑清单(避免方法)](#五 避坑清单(避免方法))
摘要 :本文记录《Marvel's Guardians of the Galaxy》在 Linux + Steam + Proton 环境下启动后无窗口、Steam 一直显示"运行中"的完整排查与修复过程。通过
ps发现进程呈Zsl僵尸态、/proc/<pid>/maps中缺少 d3d12/dxgi、DXVK 日志始终无Game: gotg.exe段落,逐步排除 wineserver 残留、fsync 死锁、Proton Experimental 等嫌疑,最终确认根因是 GE-Proton10-34 与 Goldberg + EMP + xalia 三件套组合不兼容 ,换用官方 Proton 10.0-4 后游戏正常出画面。文末附命令行调试启动方法与避坑清单。
一 问题现象
- 在 Steam 中以"添加非 Steam 游戏"方式启动《Marvel's Guardians of the Galaxy》(银河护卫队,Steam AppID 1088850),Steam 显示"正在运行",但:
- 桌面上没有任何游戏窗口,连黑屏/启动器都没有;
- Steam 状态一直显示"运行中",永不退出;
- CPU 占用极低(约 0.5%),GPU 占用为 0(
nvidia-smi里看不到游戏进程)。
环境信息
| 项目 | 值 |
|---|---|
| 发行版内核 | 6.17.0-19-generic, X11 会话 |
| 显卡 | NVIDIA RTX 3090,驱动 570.211.1,Vulkan 1.4.303 |
| 内存 | 64GB(不缺内存,排除 OOM) |
| 游戏版本 | Changelist 2984448(2023-05-05,bin/gotg.exe,492MB) |
| 游戏来源 | Goldberg + EMP 离线模拟版(steam_api64.ini 中 Offline=1,含 EMP.dll / xalia.exe) |
| 首次测试的兼容层 | GE-Proton10-34(SteamLinuxRuntime_sniper 容器内) |
游戏目录结构(判断安装完整性的依据)
bash
Marvel's Guardians of the Galaxy/
├── bin/gotg.exe ← 真正的主程序,不在根目录!
├── bin/steam_api64.ini ← Goldberg 配置(AppId=1088850, Offline=1)
├── bin/EMP.dll ← Epic 在线服务 DRM 层
├── runtime/ ← 游戏资源包(.pc_resourcelib 等)
├── DLCDigitalDeluxePC/ DLCFirstParty/ DLCPreOrder/ ← 三个 DLC
├── EXTRAS/ ← 原声带等周边,与运行无关
├── installscript.vdf ← 仅定义卸载时清理(对启动无影响)
└── version.txt ← Changelist:2984448
二 排查过程
第 1 步:确认进程状态
bash
ps -o pid,stat,etime,pcpu,comm -C gotg.exe
# PID STAT ELAPSED %CPU COMMAND
# 835980 Zsl 08:31 7.6 gotg.exe
- 关键线索:进程状态是
Zsl------Z= 僵尸(主线程已退出),l= 多线程(还有 3 个子线程活着)。游戏主线程启动后很快就退出了,但残留 3 个工作线程和 wineserver 一起吊着,Steam 因此认为游戏"还在运行"。
第 2 步:检查进程到底加载进度
bash
# 找到活着的子线程(主线程 835980 是 Z,看它的 S 线程 835981)
grep -oE "/[A-Za-z0-9_.-]+\.dll" /proc/835981/maps | sort -u
- 结果(共 58 个 DLL):
- ✅ 已加载:
EMP.dll、bink2w64.dll、steam_api64.dll、libScePad.dll、各种 CRT/系统 DLL - ❌ 完全没有 :
d3d12.dll、dxgi.dll、vkd3d相关 ------ 图形栈一个都没碰
- ✅ 已加载:
结论:游戏卡死在"DRM/平台初始化完成之后、DX12 图形初始化之前"这个阶段,主线程直接退场。
第 3 步:检查 DXVK 日志(PROTON_LOG)
bash
PROTON_LOG=1 STEAM_COMPAT_CLIENT_INSTALL_PATH=... STEAM_COMPAT_DATA_PATH=... \
GE-Proton10-34/proton run gotg.exe
- 日志里只有 xalia.exe(Square Enix 启动器组件)的 DXVK 初始化:
bash
info: Game: xalia.exe
info: DXVK: v2.7.1-509-g1676dcaf342a9b1
info: Found device: NVIDIA GeForce RTX 3090 (NVIDIA 570.211.1)
warn: OpenVR: Failed to initialize OpenVR ← 正常,没接VR
warn: OpenXR: Unable to get required ... size ← 正常,没接VR
0 注意:日志里始终没有 Game: gotg.exe 的段落 ,主程序从未走到 DXVK 初始化。Vulkan/驱动本身没问题(xalia 能枚举到两张 3090)。
第 4 步:排除常见嫌疑
| 尝试 | 结果 |
|---|---|
| 杀干净残留 wineserver 后全新前缀重试 | 依旧僵尸 |
PROTON_NO_FSYNC=1 PROTON_NO_ESYNC=1(怀疑 fsync 死锁) |
依旧僵尸 |
| 换 Proton Experimental (11.0-100) + 全新前缀 | 依旧僵尸 |
| 直接用 GE 的 wine 二进制裸跑(绕过 proton 脚本) | 报 fsync_init: Server is running with WINEFSYNC but this process is not(混用 wineserver 导致,非根因) |
| 检查 Goldberg 配置 / EMP.ini | 配置正常,Old GPU Support = 0(3090 支持 DX12.0,无需改) |
第 5 步:换官方 Proton 10.0-4
bash
mkdir -p /tmp/gotg-pfx4 # ⚠️ 前缀目录必须先建好,否则 proton 脚本报 pfx.lock FileNotFoundError
cd "/mnt/stu/game/Marvel's Guardians of the Galaxy/bin" # 必须在 bin/ 下启动
STEAM_COMPAT_CLIENT_INSTALL_PATH="$HOME/.local/share/Steam" \
STEAM_COMPAT_DATA_PATH="/tmp/gotg-pfx4" \
"$HOME/.local/share/Steam/steamapps/common/Proton 10.0/proton" run gotg.exe
- 约 1 分钟后:
bash
ps -o pid,stat,pcpu,rss,comm -C gotg.exe
# 850223 Ssl 24.3 945172 gotg.exe ← S 正常睡眠,945MB 内存,CPU 24%
xdotool search --name "Guardians Of The Galaxy"
# Window 484442115 Geometry: 790x445 ← 窗口出现了!
- 游戏窗口正常出现,可进主菜单。根因确认:GE-Proton10-34 与本游戏(Goldberg+EMP+xalia 组合)不兼容,官方 Proton 10.0 无此问题。
三 问题分析(根因总结)
- 直接原因 :gotg.exe 的主线程在完成 DRM 层(EMP.dll / Goldberg steam_api64.dll)初始化后、DX12 图形初始化前异常退出,残留 3 个工作线程等待在 wineserver 上,形成
Zsl僵尸态。Steam 等待进程组退出,于是永远显示"运行中"。 - 深层原因 :GE-Proton10-34(2026-03 构建)自带的补丁集(内置 DLSS/FSR4 hack、
WINEDLLOVERRIDES=dxgi=n,b;nvngx=...、xalia 集成等)与这个免DVD版特有的 Goldberg + EMP + xalia 三件套组合存在兼容性回归;官方 Proton 10.0 补丁集更"干净",没有触发该问题。 - 为什么难发现 :xalia.exe(Square Enix 启动器组件)会先于游戏启动并正常完成 DXVK 初始化,日志看起来"一切正常",容易误判为"游戏在加载中"。判断依据必须看主程序 gotg.exe 自己有没有走到 DXVK (日志中找
Game: gotg.exe,或看/proc/<pid>/maps里有没有 d3d12/dxgi)。
四 解决方案
方案 A(推荐):Steam 里换兼容层
- Steam → 库 → 右键游戏 → 属性 → 兼容性
- 勾选"强制使用特定兼容性工具"
- 选择 Proton 10.0-4 (官方版,路径
steamapps/common/Proton 10.0) - 重新启动游
方案 B:命令行直接启动(调试用)
bash
mkdir -p ~/proton-gotg # 前缀目录必须存在!
cd "/mnt/stu/game/Marvel's Guardians of the Galaxy/bin" # 工作目录必须在 bin/
STEAM_COMPAT_CLIENT_INSTALL_PATH="$HOME/.local/share/Steam" \
STEAM_COMPAT_DATA_PATH="$HOME/proton-gotg" \
"$HOME/.local/share/Steam/steamapps/common/Proton 10.0/proton" run gotg.exe
验证
bash
ps -o pid,stat,pcpu,rss,comm -C gotg.exe # 一看:STAT 应为 S/Ssl 而非 Z,RSS 应涨到 ~1GB
DISPLAY=:0 xdotool search --name "Guardians" # 二看:有窗口
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
# 三看:游戏进程出现在 GPU 占用列表里
五 避坑清单(避免方法)
-
exe 不在根目录 :本游戏主程序在
bin/gotg.exe,添加非 Steam 游戏时务必选它;且工作目录必须是bin/(Steam 方式会自动设置,手动跑要先cd)。 -
兼容层优先选官方 Proton:GE-Proton 功能多但补丁激进,对带 DRM 模拟(Goldberg/EMP)的版本容易翻车。先试官方 Proton 10.0 / Experimental,GE 作为备选。
-
手动调用 proton 脚本时,
STEAM_COMPAT_DATA_PATH指向的目录必须预先存在 ,否则报:bashFileNotFoundError: [Errno 2] No such file or directory: '.../pfx.lock' -
不要混用不同来源的 wine/wineserver :用 GE 的 wine 裸跑去连 Proton 建的前缀,会报
fsync_init: Server is running with WINEFSYNC but this process is not。排障时先pkill -9 -x wineserver清场再试。 -
僵尸进程会累积 :每次卡死都会留下一个
gotg.exe <defunct>和对应 wineserver。大量重试后记得清理(杀 wineserver 或重登会话),否则干扰判断。 -
别被 xalia 的日志骗了 :DXVK 日志里出现
Game: xalia.exe不代表游戏本体在初始化。搜Game: gotg.exe才算数。 -
installscript.vdf不用管 :它只定义卸载时的清理动作(gotg.exe -ao CLEANUP true),与启动无关;非 Steam 方式运行时 Steam 根本不会读它。 -
首次启动慢是正常的:492MB 主程序 + 168MB 着色器包,冷启动等 1~2 分钟再下结论。