返回博客

2026.09.30

社区说「只有 x86 能修」:MC 地下城 2 在 AYN Thor(Armada)上跑起来,只动了四个文件

《我的世界:地下城 2》在所有 Linux 设备上启动几秒就退,社区修法全是 x86 版。我在 ARM 掌机 AYN Thor + Armada 系统上一开始判断没戏,结果不换 Proton、只动四个文件就进了游戏。附可直接复制的命令、校验值和回滚方法,顺带拆了登录「卡住」的真相。

掌机Linux 游戏Proton排障

游戏刚下好,点开,黑屏四五秒,退回桌面。再点,还是一样。

机器是 AYN Thor,骁龙 8 Gen 2(Adreno 740)的 ARM 掌机,刷的是社区维护的 Linux 游戏系统 Armada(我用的版本是 20260926)。Windows 游戏靠 Steam 自带的 Proton Experimental (ARM64) 跑,x86 指令再由 FEX 翻成 ARM。游戏是刚上架的《我的世界:地下城 2》(Minecraft Dungeons II,Steam appid 1912410)。

查了几分钟,我的第一个结论是:这台机器上修不了,等官方。 十来分钟后它进了游戏。

先说怎么读这篇:

  • 只想照着修:直接看第 3 章,命令可以整段复制
  • 登录一直转圈、以为卡死了:看第 4 章
  • 想知道「只有 x86 版」为什么不等于 ARM 没戏:看第 2 章,这是全文最值得带走的判据

1. 几秒就退,其实是一个你看不见的弹窗

游戏自己不写日志,退得又快,第一反应是崩溃。但进程列表里游戏进程还活着,截了一张屏,上面挂着一个 Windows 对话框:

Missing Gaming Services — install now?

这款游戏是用微软的 Xbox GDK 打包的(游戏目录里有个 MicrosoftGame.config 就是标志)。它启动前要检查 Windows 上的 Xbox 游戏服务(Gaming Services)。Linux 上当然没有,于是弹窗问你要不要装,你没法装,它就退了。

这事不是掌机独有的。Proton 的 GitHub 上有一个专门的 issue(ValveSoftware/Proton#10193),截至 9 月 30 日已经 345 条回复,Steam Deck、各种 Linux 发行版全中招,issue 仍是打开状态,Valve 员工在里面只做了版务。

2. 我怎么把「修不了」说错的

社区当时的临时办法是两件事:换一个第三方改过的 Proton 版本,再替换游戏里一个叫 XCurl.dll 的网络组件。那些改版 Proton 全是 x86_64 构建的,没有 ARM 版。

我据此下了结论:ARM 掌机用不上,等 Valve。

后来不死心,把那个改版 Proton 的包拆开看,它真正起作用的只是几个 DLL:

  • 一个模拟 Xbox 游戏运行时的 xgameruntime.dll,外加一个配套文件 xgameruntime.dll.threading
  • 一个 Microsoft.WindowsAppRuntime.Bootstrap.dll

这些都是 Windows 格式的 DLL(PE 文件),和 Proton 本体用什么芯片编译无关。ARM 上的 Proton 本来就要靠 FEX 跑 x86 的 Windows 游戏,游戏旁边多几个 x86 的 DLL,它照样能跑。

所以根本不用换整个 Proton,把这几个 DLL 塞进游戏自己的 Wine 环境(Proton 给每个游戏单独建的一个「假 C 盘」,叫前缀)就行。

判据就一句:看到「只有 x86 版」,先拆开看修法到底是换宿主程序,还是换 Windows DLL。 前者 ARM 上确实没戏;后者在 ARM 的 Proton 上大概率能直接用。

3. 照着做:AYN Thor + Armada 上的完整步骤

总共动四个文件:游戏目录里换掉一个 XCurl.dll,游戏前缀的 system32 里补三个运行时文件。系统里的 Proton 不换,原文件先备份,随时能回滚。

这套操作我在自己的 Thor 上做过。写成下面这份脚本后,我又在一套模拟的 Steam 目录上从头跑了一遍(下载、解包、四个校验值、备份、替换、回滚),全部通过。

3.0 准备

  1. Steam 里游戏的兼容性设置保持 Armada 默认的 Proton Experimental (ARM64),不用换。
  2. 先正常启动一次游戏,让它弹窗退出。这一步是为了让 Proton 把游戏前缀建出来,不然后面要放文件的目录还不存在。
  3. 打开掌机上的终端(桌面模式里的终端,或者从电脑 SSH 进去都行)。

3.1 下载并核对四个文件

mkdir -p ~/md2fix && cd ~/md2fix

# ① 微软官方 GDK 包(约 135 MB),从里面取 XCurl.dll
curl -L -o gdk.nupkg \
  https://api.nuget.org/v3-flatcontainer/microsoft.gdk.pc.230307/10.0.22621.3139/microsoft.gdk.pc.230307.10.0.22621.3139.nupkg
python3 -c "import zipfile; open('XCurl.dll','wb').write(zipfile.ZipFile('gdk.nupkg').read('native/230307/GRDK/ExtensionLibraries/xbox.xcurl.api/redist/commonconfiguration/neutral/XCurl.dll'))"

# ② 社区改版 Proton 的 x86_64 包(约 573 MB),只从里面取三个运行时文件
curl -L -o gdkp.tar.gz \
  https://github.com/LukasPAH/GDK-Proton-Custom/releases/download/release-11-7/GDK-Proton11-7-x86_64.tar.gz
W=./GDK-Proton11-7/files/lib/wine/x86_64-windows
tar xzf gdkp.tar.gz --strip-components=6 \
  $W/xgameruntime.dll $W/xgameruntime.dll.threading $W/Microsoft.WindowsAppRuntime.Bootstrap.dll

# ③ 核对校验值,四行都要显示「成功」或 OK
sha256sum -c <<'EOF'
c8b83d8810c4dccd55e5a3f6dd9f2ca9e865df2f6eead6db55f7fb9c50066159  XCurl.dll
ac32e6158c45c8a5999e740f1e05489aca9ff204e8d84293682a045c8dedb09f  xgameruntime.dll
aa611155057ebd01cf315ad702a4b5725aa9d5e6fad87732c956fe0a1e5fcfba  xgameruntime.dll.threading
cd8b961d83a67f5c7a614ba056cd20d2569e9318d6baef4117e254011962cce4  Microsoft.WindowsAppRuntime.Bootstrap.dll
EOF

XCurl.dll 我特意从微软官方 NuGet 包里取,没用社区转发的那份;校验值和社区流传的一致。为什么非得是这个旧版(2023 年 3 月的 GDK 里的那版),我没深究。

3.2 备份,然后放进去

cd ~/md2fix
STEAM=~/.local/share/Steam/steamapps
GAME="$STEAM/common/Minecraft Dungeons II/Dungeons/Binaries/Win64"
SYS32="$STEAM/compatdata/1912410/pfx/drive_c/windows/system32"

# 两个目录都要存在;报「没有那个文件」就回 3.0 第 2 步
ls "$GAME/XCurl.dll" "$SYS32/kernel32.dll"

# 备份原文件
mkdir -p backup
cp -n "$GAME/XCurl.dll" backup/XCurl.dll.orig
for f in xgameruntime.dll xgameruntime.dll.threading Microsoft.WindowsAppRuntime.Bootstrap.dll; do
  [ -e "$SYS32/$f" ] && cp -n "$SYS32/$f" backup/
done

# 替换 / 补文件
cp XCurl.dll "$GAME/XCurl.dll"
cp xgameruntime.dll xgameruntime.dll.threading Microsoft.WindowsAppRuntime.Bootstrap.dll "$SYS32/"

3.3 加一个启动参数

在 Steam 里右键游戏 → 属性 → 启动选项,填:

SteamDeck=1 %command%

这是照社区做法加的,我没做「不加会怎样」的对照。我自己是写在 Armada 的单游戏配置 /etc/armada/game-tweaks.json 里(给 1912410 加一个 env),效果一样,但要 sudo,普通读者用 Steam 启动选项更省事。

然后启动游戏。我这边重开后直接进到了首次启动的「辅助功能」设置页。

3.4 回滚

官方修好以后,或者你想恢复原样:

cd ~/md2fix
STEAM=~/.local/share/Steam/steamapps
GAME="$STEAM/common/Minecraft Dungeons II/Dungeons/Binaries/Win64"
SYS32="$STEAM/compatdata/1912410/pfx/drive_c/windows/system32"
cp backup/XCurl.dll.orig "$GAME/XCurl.dll"
for f in xgameruntime.dll xgameruntime.dll.threading Microsoft.WindowsAppRuntime.Bootstrap.dll; do
  if [ -e "backup/$f" ]; then cp "backup/$f" "$SYS32/"; else rm -f "$SYS32/$f"; fi
done

再把启动选项里的 SteamDeck=1 删掉。Steam 的「验证游戏文件完整性」也能把 XCurl.dll 换回去。

3.5 其他机器能不能照抄

  • 别的 Armada 机器(同为骁龙 8 Gen 2 的掌机):路径一样,理论上能照抄,我没测。
  • x86 的 Linux 机器(包括 Steam Deck):这四个本来就是 x86_64 的 Windows DLL,道理上更没障碍,我没测。
  • 如果你的 Steam 不装在 ~/.local/share/Steam,把 STEAM= 那行改成你自己的 steamapps 路径就行。

4. 两个「卡住」,一真一假

4.1 假卡住:它在等一个你看不见的码

设置页过完,画面停在「欢迎 XXX」,一直转圈。

看着像死了。开网络日志抓了一次登录,前面每一步都是通的:

  • 用 Steam 身份登录游戏服务器:200
  • 读角色和云存档:200
  • Xbox 设备认证:200

然后游戏每隔几秒问一次微软「绑好了没」,微软每次回 400。这个 400 的意思是「还没人授权」,属于正常等待。

它在走设备码登录:你应该去手机上打开 microsoft.com/link 输一个 8 位码。问题是这个码在这个环境下不显示在屏幕上,只写在游戏目录的一个文件里。每次启动换一个新码。

读码:

cat ~/.local/share/Steam/steamapps/common/"Minecraft Dungeons II"/Dungeons/Binaries/login.json

里面的 user_code 就是那 8 位码,verification_uri 是要打开的网址。

所以「卡住」的真实意思是:它在等你,而你不知道它在等你。

4.2 真卡住:0063 之后画面冻结

再开一次,弹了「登录失败,错误代码 0063」,只有一个「确定」。按了没反应。

这次是真卡死:连续两秒截图,一个像素都没变,游戏有一个线程一直空转在 97%。只能在 Steam 里强制结束重开。

0063 我没抓到当时的日志,不知道原因。社区里的说法是间歇性的,多重试几次能过。重开以后又能正常走到标题页了。

5. 这些结论哪里还不牢

  • 我只验证到登录这一步。 进关卡、实际打一局的帧数和发热,都还没测。
  • 微软账号绑定没走完,联机相关的都没验证。
  • 有一次游戏无声退出,系统日志里没有内存不足也没有崩溃记录。当时的调试日志被我删了,原因查不到了。教训:游戏还在测试期,日志别删。
  • 日志里有 FEX 报的非法指令错误,但进程一直活着,影响未知。
  • 三个运行时文件来自第三方项目 GDK-Proton-Custom,其中 .threading 是微软原版二进制,经这个项目转发,不是我从微软官方渠道拿的。我核对了文件类型和依赖,没发现异常,但保证不了。另外,Valve 的版务在 Proton#10193 里以「法律上有问题」为由删掉了指向这个改版 Proton 的链接。 这篇只写了去哪取、怎么核对,没有转发任何文件。介意这一点的话,就只能等官方修。
  • 远程模拟的虚拟手柄在 Steam 界面里有效,进了游戏完全没反应(截图前后 0 像素变化),游戏里的操作只能人拿着掌机按。掌机自带的实体手柄,游戏能收到输入。

6. 下次遇到「Missing Gaming Services」,按这个顺序

  1. 先截图,别急着翻崩溃日志。几秒就退的游戏,很多是弹了个窗。
  2. 游戏目录里有 MicrosoftGame.config,就是 Xbox GDK 游戏,走第 3 章这套。
  3. 社区修法说「只有 x86 版」,拆开看它换的是宿主程序还是 Windows DLL。是 DLL,ARM 上直接试。
  4. 原文件先备份,文件从官方渠道取、对校验值,再替换。
  5. 调试日志只开需要的通道。Proton 默认日志全开,两分钟就涨到 2 GB,大头是异常处理和栈回溯这两个通道。
  6. 登录转圈别急着强关,去游戏目录找 login.json,里面有绑定码。
  7. 遇到 0063 先重试两三次,还不行就走离线模式玩单机。

就这么多。一开始说「等官方修吧」的那个我,十来分钟后在读 login.json 里的绑定码。