这是个失败的教程,我只是想吐槽操蛋的linux、wine、战网,配置花了我两天,啥也没干好,你一个大学生好好学习多好,搞什么操作系统,是觉得自己会敲命令行向黑客一样很酷吗,嘉豪吧我去你码。

你跟着这个做吧:【在Linux里安装暗黑2重制版|Ubuntu安装暴雪战网客户端教程-哔哩哔哩】 https://b23.tv/irUVQnH

后面别看了,环境和注册表都乱套了,我重装系统了,linux纯傻逼。

国服战网只给 Windows 安装包,但暴雪为 AI 研究提供了独立 Linux 版 SC2 客户端,专门支持 headless 无界面运行与 API 调用,完美适配强化学习。

安装依赖

sudo apt update && sudo apt install -y libsdl2-2.0-0 libssl-dev python3-pip

下载战网

wget https://blzdistsc2-a.akamaihd.net/Linux/SC2.4.10.zip

解压,解压地址是-d后面的内容

unzip -P iagreetotheeula SC2.4.10.zip -d ~/

进入SC2的Maps文件夹

地图下载

感谢@气泡橙汁Zz 的提供:
地图的下载地址是:https://aiarena.net/wiki/maps/#wiki-toc-sc2-ai-arena-season-23的Sc2 AI Arena Season 2/3标签下的download,但是这个网站访问比较困难,
我把自己下载好的地图的网盘链接放在这里:链接:https://pan.baidu.com/s/1G3U-lPI2yi6agz2_jSOKoA?pwd=6fep 提取码:6fep

如果你在window下在的,可以用airportal传到服务器或你虚拟机上。

服务器/虚拟机端输入这个取件码即可。

下载后是zip,解压到Maps文件夹中。

即可。

然后创建虚拟环境StarCraft2:并激活

# 创建名为sc2_rl的环境,指定python3.10(PySC2最兼容版本)
conda create -n StarCraft2 python=3.10 -y
# 激活环境
conda activate StarCraft2

 安装ipykernel

conda install jupyter ipykernel

将环境注册为conda内核

python -m ipykernel install --user --name=StarCraft2 --display-name "Python (Conda StarCraft2)"

然后输入jupyter notebook就可以跳转到jupyter了!

右上角New找到刚刚创建的StarCraft2环境

以下是我们项目会使用到的库

!pip install --upgrade pip
!pip install --upgrade burnysc2
!pip install gymnasium
!pip install stable-baselines3[extra]
!pip install opencv-python
!pip install numpy
!pip install pillow
!pip install matplotlib
!pip install tensorboard
!pip install torch torchvision
!pip install nest-asyncio
!pip install protobuf<6

运行后再运行下面的代码块,如果没有报错,说明安装都是正常的。

from sc2 import maps
from sc2.player import Bot, Computer
from sc2.main import run_game
from sc2.data import Race, Difficulty
from sc2.bot_ai import BotAI
import pickle
import time
import random
import numpy as np
from sc2.ids.unit_typeid import UnitTypeId 

import math
import cv2

import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
import nest_asyncio
import asyncio
nest_asyncio.apply()

# 1. 导入依赖库
from stable_baselines3 import PPO
import os
import time
from StarCraft2Env import StarCraft2Env

import torch as th
import torch.nn as nn
from stable_baselines3.common.torch_layers import BaseFeaturesExtractor

import numpy as np
import gymnasium as gym
import time

import pickle
import subprocess

from sc2 import maps
from sc2.player import Bot, Computer
from sc2.main import run_game
from sc2.data import Race, Difficulty
from sc2.bot_ai import BotAI

傻逼Linux区分大小写,然后我们的两个库分别用到大写和小写的maps,这在window是没问题的,但是在傻逼的linux就会出错:

官方的例子用不了,我们可以尝试用这个:

from sc2 import maps
from sc2.player import Bot, Computer
from sc2.main import run_game
from sc2.data import Race, Difficulty
from sc2.bot_ai import BotAI
from sc2.maps import Map

# 新增:导入 Path
from pathlib import Path 

import os
import nest_asyncio

os.environ['KMP_DUPLICATE_LIB_OK']='True'
nest_asyncio.apply()

# 1. 定义字符串路径
map_path_str = "/home/lpa/StarCraftII/Maps/2000AtmospheresAIE.SC2Map"

# 2. 将字符串转换为 Path 对象 (关键步骤)
map_path_obj = Path(map_path_str)

# 3. 传入 Path 对象给 Map
game_map = Map(map_path_obj) 

class WorkerRushBot(BotAI):
    async def on_step(self, iteration: int):
        if iteration == 0:
            for worker in self.workers:
                worker.attack(self.enemy_start_locations[0])

# 运行游戏
run_game(game_map, [
    Bot(Race.Protoss, WorkerRushBot()),
    Computer(Race.Zerg, Difficulty.Medium)
], realtime=True)
print("游戏已启动,保持窗口开启 10 秒...")
asyncio.get_event_loop().run_until_complete(asyncio.sleep(10))
print("时间到,程序结束。")

然后啥也没发生,

(base) lpa@lab-24:~/StarCraftII/Versions/Base69232$ ./SC2_x64
Version: B69232 (SC2.4.6-Publish)
Build: Oct 23 2018 01:43:04
Command Line: '"./SC2_x64"'
Starting up...
Startup Phase 1 complete
Fatal Error:
Failed to find .build.info file at path: /home/lpa/StarCraftII/.build.info
Terminating...
已终止

这是一个非常经典的“文件路径配置错误”。根据你提供的报错信息,SC2 启动器在错误的路径下寻找 .build.info 文件,导致游戏无法启动。

🛠️ 核心原因与解决方案

报错分析:
SC2 启动器默认认为它位于 StarCraftII 目录下,因此它试图在 /home/lpa/StarCraftII/ 目录下寻找 .build.info 文件。
但实际情况是: 你的可执行文件位于 /home/lpa/StarCraftII/Versions/Base69232/ 目录下。

解决方法:
你需要创建一个符号链接(软连接),告诉系统 StarCraftII 的根目录在哪里。

请在终端中依次执行以下命令:

  1. 回到 StarCraftII 的根目录

    cd ~/StarCraftII
  2. 创建指向当前版本的符号链接:
    (注意:如果 Versions 目录下有多个文件夹,确保文件夹名是 Base69232

    ln -s Versions/Base69232 .build.info

https://github.com/BurnySc2/python-sc2

2. Linux 安装指南

关键警告:

"but the latter is headless so you cannot actually see the game."

这句话非常关键。它说 Linux 原生版本通常是“无头模式”(Headless)的。意思是它只能在后台运行,你无法看到游戏画面,只能用来训练 AI 模型。如果你想看 AI 怎么打,或者想自己玩,建议用 Lutris 安装 Windows 版

孩子们我瞎了。

  1. 方法 A (Wine/Lutris):你可以用 Wine 或 Lutris 安装 Windows 版的星际争霸

安装Lutris

sudo apt install lutris

启动Lutris

/usr/games/lutris

如果有报错的话,试试国内源:

LUTRIS_RUNTIME_URL='https://mirrors.ustc.edu.cn/lutris' /usr/games/lutris

进来后点击加号,搜索battle.net,选择第一个

报错处理

点击back再安装一次

原因是虽然这傻逼战网是64位的,但是需要32位支持,真傻逼

第一步:安装系统级 32 位支持库(最关键)

之前的日志里你在尝试安装 wine32,但可能没成功或没装全。请在终端执行以下命令:

1sudo dpkg --add-architecture i386
2sudo apt update
3sudo apt install wine32

(注意:如果提示确认,输入 Y 并回车)

第二步:删除坏掉的文件夹

因为之前的尝试失败了,那个文件夹现在是坏的,必须删掉重来。在终端输入:

1rm -rf ~/Games/battlenet

第三步:手动创建空文件夹(防止权限问题)

让系统帮你建一个干净的文件夹:

1mkdir -p ~/Games/battlenet

第四步:检查 Wine 版本

  1. 回到 Lutris 的安装界面(点 + 号 -> 搜索 Battle.net -> Install)。
  2. 同时检查 Wine prefix 路径是否填的是 /home/lpa/Games/battlenet

第五步:开始安装

现在点击右下角的 Install

成功了!

炸单了

既然图形安装程序会崩溃,我们就跳过它,直接下载并运行战网客户端。

  1. 关闭当前窗口
    点击你截图中的“关闭”按钮,然后回到 Lutris,点击红色的 Abort 按钮,彻底停止当前的安装任务。

  2. 手动下载战网安装包
    打开你的浏览器,访问暴雪的官方下载页面:
    https://download.battle.net/zh-cn/
    下载 Windows 版的战网安装程序(文件名通常是 Battle.net-Setup.exe)。

  3. 在 Lutris 中配置并运行

    1. 在 Lutris 主界面,找到你已经配置好的 Battle.net 游戏条目(就是之前安装失败的那个)。
    2. 点击它,选择 Configure (配置)。
    3. 在配置窗口中,点击左侧的 Game options (游戏选项)。
    4. 找到 Executable (可执行文件) 这一行,点击右侧的 Browse (浏览)。
    5. 在弹出的文件选择器中,找到你刚刚用浏览器下载的 Battle.net-Setup.exe 文件并选中它。
    6. 点击 Save (保存)。
  4. 开始安装
    现在,直接点击 Lutris 主界面中 Battle.net 条目上的 Play (播放) 按钮。

    这次,Lutris 会直接运行你下载的安装包,有很大概率会成功弹出战网的安装界面,让你选择安装路径和语言,然后开始安装。

我不知道现在该骂战网还是骂傻逼linux了

对,就是在这个界面修改,但你选错地方了!你目前停留在“运行环境选项”卡,我们需要切换到旁边的“系统选项”卡,去处理那个红色的 Vulkan 报错。

你截图里那个醒目的红色报错:
Error Missing Vulkan libraries... i386 architecture

这直接证实了我之前的判断:你的系统里缺少 32 位的 Vulkan 驱动库。这就是导致 Wine 崩溃(Assertion failed)的根本原因!战网客户端虽然没有 3D 画面,但它依赖这些底层图形库来渲染界面,缺了就会直接挂掉。

请按照以下步骤操作,这是解决问题的关键:

第一步:安装 32 位 Vulkan 库

打开你的终端,输入以下命令并回车(需要输入密码):

1sudo apt install libvulkan1:i386 mesa-vulkan-drivers:i386

第二步:切换 Wine 版本

在你截图的那个下拉菜单里,不要选 wine-ge-8-26,也不要选 系统自带 Wine 9.0

  1. 点击下拉菜单。
  2. 寻找是否有 lutris-7.2-11-x86_64 或者 wine-ge-7-53
  3. 如果有,选它!如果没有,就先选 系统自带 Wine 9.0 试试(因为 9.0 对新版图形驱动支持更好)。

第三步:关闭 Esync/Fsync

在你截图的下方,把 启用 Esync 和 启用 Fsync 这两个开关关掉(变成灰色)。

原因:有时候 Linux 内核的同步机制和 Wine 冲突,关掉能提高稳定性。

第四步:保存并重试

点击右上角的 保存,然后回到主界面再次点击 Play

这次应该就能顺利跑起来了!如果还是报错,请把新的报错截图发给我。

OHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

终于他妈的下好了!

还有一关

骂战网,连except都懒得处理

太棒了!看到你这张图,我必须得恭喜你:你已经成功了一大半!

那个满屏乱跳的 winedebugger 和这个 BLZBNTBNA00000005 错误,恰恰证明战网客户端已经成功安装并运行起来了!之前的 Wine 崩溃问题已经解决。

现在你遇到的这个 BLZBNTBNA00000005 错误,意思是“更新服务进入了睡眠模式”

简单来说:战网的主程序醒了,但它负责下载游戏的“后台小弟”(更新服务)还在睡大觉,或者被 Linux 系统卡住了。这是 Lutris 运行战网时的经典最后一关

别急,按下面的步骤操作,马上就能解决:

终极修复方案:清理“睡眠”的进程

我们需要把那个卡住的“后台小弟”强制干掉,让它重新启动。

1. 彻底关闭战网

在 Lutris 里点击 STOP 按钮,确保战网完全关闭。

2. 清理“残留”的后台文件(关键步骤)

战网的更新服务文件残留在后台导致冲突。我们需要删除它。

打开你的终端,复制并运行下面这行命令(直接复制整行):

1rm -rf ~/.config/Battle.net ~/.cache/Battle.net ~/Games/battlenet/drive_c/ProgramData/Battle.net ~/Games/battlenet/drive_c/ProgramData/Blizzard\ Entertainment

(注:如果你的 Lutris 游戏路径不是 ~/Games/battlenet,请根据你实际的文件夹路径修改上面命令的后半部分)

3. 设置 Lutris 的启动参数(防止再次睡眠)

为了让战网在 Linux 下不自动“睡着”,我们需要给它加个“兴奋剂”参数。

  1. 在 Lutris 里右键点击 Battle.net -> Configure (配置)。
  2. 点击左侧的 System options (系统选项)。
  3. 找到 Environment variables (环境变量)。
  4. 点击 Add (添加),填入:
    • KeyWINEESYNC
    • Value0
  5. 再添加一个:
    • KeyWINEFSYNC
    • Value0
      (注:我们在上一步关掉了 Esync/Fsync 开关,这里再次确保它们被禁用,因为这两个功能经常导致战网后台服务假死)
4. 重新启动

回到 Lutris 主界面,点击 Play

预期结果:
战网会重新初始化,可能会重新下载一点更新文件,然后就能正常进入登录界面了!如果第一次启动还是报错,不要慌,再次点击 Play 启动第二次,通常第二次就彻底好了。

点击保存

这张图里的报错信息非常关键,它揭示了问题的本质:图形渲染层彻底崩了

看这几行关键错误:

  • EGL_NOT_INITIALIZED:EGL(图形接口)初始化失败。
  • Exiting GPU process due to errors:GPU 进程因为错误退出了。
  • msvproc.dll:找不到这个文件。

简单来说:你的战网客户端试图调用显卡进行 3D 加速来渲染界面,但是失败了(可能是显卡驱动、Wine 版本或 DXVK 设置的问题)。

别担心,既然之前的“安装崩溃”解决了,现在这个“渲染崩溃”有一个非常简单的“降级疗法”——强制使用软件渲染。也就是不让它调用显卡,而是用 CPU 来画界面。虽然稍微吃一点 CPU,但对于战网这种界面程序来说完全没问题,而且极其稳定。

请按照以下步骤操作,这招通常能“起死回生”:

方案一:强制软件渲染(最推荐,成功率最高)

这个方法通过设置环境变量,告诉 Wine:“别找显卡了,直接用 CPU 画图”。

  1. 在 Lutris 里右键点击 Battle.net -> Configure (配置)。

  2. 点击左侧的 System options (系统选项)。

  3. 找到 Environment variables (环境变量) 区域。

  4. 点击 Add (添加),填入以下两组变量(如果之前有设置过其他的,先留着):

    • 第一组:
      • KeyLIBGL_ALWAYS_SOFTWARE
      • Value1
    • 第二组:
      • KeyWINEDEBUG
      • Value-all (这个是为了屏蔽那些烦人的 debugger 刷屏)
  5. 点击 Save (保存)。

  6. 再次点击 Play 运行。

看到那个红色的报错了吗?这才是问题的根源。

那个红色的字写着:Error Missing Vulkan libraries ... i386 architecture

这解释了为什么之前的方案都无效:你的系统里缺少 32位的Vulkan驱动库

Wine 运行 Windows 程序时,即便你关闭了 DXVK,它仍然需要底层的 Vulkan 库来处理图形界面。你的系统里只有 64 位的库,但战网客户端(或者是 Wine 的前端组件)试图调用 32 位的库,找不到,于是疯狂报错、崩溃、弹出 Debugger。

要解决这个问题,必须把缺失的 32 位库补上。请严格执行以下步骤:

第一步:打开终端

在你的 Linux 系统里打开终端(Terminal)。

第二步:开启多架构支持(如果之前没做过)

输入以下命令并回车:

1sudo dpkg --add-architecture i386

(输入密码时不会显示星号,输完直接回车)

第三步:安装 32 位 Vulkan 驱动

这是最关键的一步。根据你的显卡类型,输入对应的命令:

如果你是 NVIDIA 显卡(最常见):

1sudo apt update
2sudo apt install libvulkan1:i386 libvulkan1

(如果提示找不到包,可能需要安装 nvidia-driver-xxx:i386,但通常 libvulkan1:i386 就足够了)

如果你是 AMD 或 Intel 核显:

1sudo apt update
2sudo apt install mesa-vulkan-drivers:i386 mesa-vulkan-drivers

第四步:验证并重启 Lutris

  1. 安装完成后,彻底关闭 Lutris(右键托盘图标退出,或者在系统监视器里杀掉进程)。
  2. 重新打开 Lutris。
  3. 再次进入 Battle.net 的配置界面(Configure -> Runner options)。
  4. 看那个红色的 Error Missing Vulkan libraries 应该消失了。
  5. DXVK 开关可以尝试打开(变成灰色或蓝色),或者保持关闭。

看到红色的报错消失,说明你的系统底层库已经补全了,这是个巨大的进步!

但现在终端里满屏的 EGL_BAD_ALLOC 和 SwapChain 错误,说明问题卡在了显卡显存分配上。战网客户端的界面是基于网页引擎(CEF)的,它在 Wine 里启动时会尝试申请大量的显存来渲染页面,但往往因为 Wine 的显存模拟机制没配置好,导致申请失败(Bad Alloc),然后程序崩溃,Debugger 疯狂弹窗。

别担心,我们只需要给 Wine “骗”一点显存出来就行了。

核心解决方案:修改注册表,强制增加显存

请严格按照以下步骤操作,这是解决 EGL_BAD_ALLOC 最直接的办法:

第一步:打开 Wine 注册表编辑器

在终端里输入以下命令并回车(确保 Lutris 里的战网是关闭状态):

1lutris -x winecfg

注意:这会打开战网专用环境的配置窗口。

第二步:进入注册表

在弹出的 Wine Configuration 窗口中,点击底部的 注册表编辑器 按钮(或者在终端直接输入 lutris -x regedit)。

第三步:新建显存键值

在注册表编辑器里,像操作文件夹一样,依次展开左边的目录:
HKEY_CURRENT_USER -> Software -> Wine -> Direct3D

(如果没有 Direct3D 文件夹,右键点击 Wine 文件夹 -> 新建 -> 项,命名为 Direct3D)

第四步:添加显存大小
  1. 点击选中 Direct3D 文件夹。
  2. 在右边的空白区域,右键 -> 新建 -> 字符串值
  3. 名字填入:VideoMemorySize
  4. 双击它,数值数据填入:4096 (代表 4GB 显存,足够战网用了)。
  5. 点击确定。
第五步:再次尝试软件渲染(双保险)

虽然我们要修复显卡问题,但为了防止 Debugger 刷屏干扰,我们再加一个屏蔽变量。

  1. 回到 Lutris 配置界面 -> 系统选项
  2. 找到 环境变量
  3. 添加:
    • Key: WINEDEBUG
    • Value: -all
Logo

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

更多推荐