银河护卫队在steam(linux Proton GE-Proton10-34)上启动无窗口问题修复

《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 无此问题。

三 问题分析(根因总结)

  1. 直接原因 :gotg.exe 的主线程在完成 DRM 层(EMP.dll / Goldberg steam_api64.dll)初始化后、DX12 图形初始化前异常退出,残留 3 个工作线程等待在 wineserver 上,形成 Zsl 僵尸态。Steam 等待进程组退出,于是永远显示"运行中"。
  2. 深层原因 :GE-Proton10-34(2026-03 构建)自带的补丁集(内置 DLSS/FSR4 hack、WINEDLLOVERRIDES=dxgi=n,b;nvngx=...、xalia 集成等)与这个免DVD版特有的 Goldberg + EMP + xalia 三件套组合存在兼容性回归;官方 Proton 10.0 补丁集更"干净",没有触发该问题。
  3. 为什么难发现 :xalia.exe(Square Enix 启动器组件)会先于游戏启动并正常完成 DXVK 初始化,日志看起来"一切正常",容易误判为"游戏在加载中"。判断依据必须看主程序 gotg.exe 自己有没有走到 DXVK (日志中找 Game: gotg.exe,或看 /proc/<pid>/maps 里有没有 d3d12/dxgi)。

四 解决方案

方案 A(推荐):Steam 里换兼容层

  1. Steam → 库 → 右键游戏 → 属性 → 兼容性
  2. 勾选"强制使用特定兼容性工具"
  3. 选择 Proton 10.0-4 (官方版,路径 steamapps/common/Proton 10.0)
  4. 重新启动游

方案 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 占用列表里

五 避坑清单(避免方法)

  1. exe 不在根目录 :本游戏主程序在 bin/gotg.exe,添加非 Steam 游戏时务必选它;且工作目录必须是 bin/ (Steam 方式会自动设置,手动跑要先 cd)。

  2. 兼容层优先选官方 Proton:GE-Proton 功能多但补丁激进,对带 DRM 模拟(Goldberg/EMP)的版本容易翻车。先试官方 Proton 10.0 / Experimental,GE 作为备选。

  3. 手动调用 proton 脚本时,STEAM_COMPAT_DATA_PATH 指向的目录必须预先存在 ,否则报:

    bash 复制代码
    FileNotFoundError: [Errno 2] No such file or directory: '.../pfx.lock'
  4. 不要混用不同来源的 wine/wineserver :用 GE 的 wine 裸跑去连 Proton 建的前缀,会报fsync_init: Server is running with WINEFSYNC but this process is not。排障时先 pkill -9 -x wineserver 清场再试。

  5. 僵尸进程会累积 :每次卡死都会留下一个 gotg.exe <defunct> 和对应 wineserver。大量重试后记得清理(杀 wineserver 或重登会话),否则干扰判断。

  6. 别被 xalia 的日志骗了 :DXVK 日志里出现 Game: xalia.exe 不代表游戏本体在初始化。搜 Game: gotg.exe 才算数。

  7. installscript.vdf 不用管 :它只定义卸载时的清理动作(gotg.exe -ao CLEANUP true),与启动无关;非 Steam 方式运行时 Steam 根本不会读它。

  8. 首次启动慢是正常的:492MB 主程序 + 168MB 着色器包,冷启动等 1~2 分钟再下结论。

相关推荐
wunaiqiezixin1 小时前
MIT 6.S081 util 实验篇(lab1):primes (moderate/hard)
linux·unix·os·xv6·mit6.s081
硅基手札2 小时前
【Linux 内核专栏 13】快IO层
linux·服务器·嵌入式硬件
嵌入式分享2 小时前
嵌入式分享#63:RK3588 怎么选?全系列选型指南
linux
刘胡子大叔2 小时前
repo 与 index:站点目录该怎么切
ubuntu·php
Pointer Pursuit2 小时前
Linux调试器 ——gdb/cgdb
linux·运维·服务器
chenlance2 小时前
PADS灌铜、覆铜过程和技巧小汇总
linux·服务器·网络
HideF3 小时前
【无标题】
linux
高山有多高3 小时前
【Linux笔记】NAT与内网穿透
linux
迷途之人不知返3 小时前
自主实现一个简单的shell命令行
linux