【失败的教程】Ubuntu安装星际争霸2 以及强化学习环境
这是个失败的教程,我只是想吐槽操蛋的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 的根目录在哪里。
请在终端中依次执行以下命令:
-
回到 StarCraftII 的根目录
cd ~/StarCraftII -
创建指向当前版本的符号链接:
(注意:如果Versions目录下有多个文件夹,确保文件夹名是Base69232ln -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 版。
孩子们我瞎了。
- 方法 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 版本
- 回到 Lutris 的安装界面(点
+号 -> 搜索 Battle.net -> Install)。 - 同时检查 Wine prefix 路径是否填的是
/home/lpa/Games/battlenet。
第五步:开始安装
现在点击右下角的 Install。
成功了!


炸单了
既然图形安装程序会崩溃,我们就跳过它,直接下载并运行战网客户端。
-
关闭当前窗口
点击你截图中的“关闭”按钮,然后回到 Lutris,点击红色的 Abort 按钮,彻底停止当前的安装任务。 -
手动下载战网安装包
打开你的浏览器,访问暴雪的官方下载页面:
https://download.battle.net/zh-cn/
下载 Windows 版的战网安装程序(文件名通常是Battle.net-Setup.exe)。 -
在 Lutris 中配置并运行
- 在 Lutris 主界面,找到你已经配置好的 Battle.net 游戏条目(就是之前安装失败的那个)。
- 点击它,选择 Configure (配置)。
- 在配置窗口中,点击左侧的 Game options (游戏选项)。
- 找到 Executable (可执行文件) 这一行,点击右侧的 Browse (浏览)。
- 在弹出的文件选择器中,找到你刚刚用浏览器下载的
Battle.net-Setup.exe文件并选中它。 - 点击 Save (保存)。
-
开始安装
现在,直接点击 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。
- 点击下拉菜单。
- 寻找是否有
lutris-7.2-11-x86_64或者wine-ge-7-53。 - 如果有,选它!如果没有,就先选
系统自带 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 下不自动“睡着”,我们需要给它加个“兴奋剂”参数。
- 在 Lutris 里右键点击 Battle.net -> Configure (配置)。
- 点击左侧的 System options (系统选项)。
- 找到 Environment variables (环境变量)。
- 点击 Add (添加),填入:
- Key:
WINEESYNC - Value:
0
- Key:
- 再添加一个:
- Key:
WINEFSYNC - Value:
0
(注:我们在上一步关掉了 Esync/Fsync 开关,这里再次确保它们被禁用,因为这两个功能经常导致战网后台服务假死)
- Key:
4. 重新启动
回到 Lutris 主界面,点击 Play。
预期结果:
战网会重新初始化,可能会重新下载一点更新文件,然后就能正常进入登录界面了!如果第一次启动还是报错,不要慌,再次点击 Play 启动第二次,通常第二次就彻底好了。

点击保存
这张图里的报错信息非常关键,它揭示了问题的本质:图形渲染层彻底崩了。
看这几行关键错误:
EGL_NOT_INITIALIZED:EGL(图形接口)初始化失败。Exiting GPU process due to errors:GPU 进程因为错误退出了。msvproc.dll:找不到这个文件。
简单来说:你的战网客户端试图调用显卡进行 3D 加速来渲染界面,但是失败了(可能是显卡驱动、Wine 版本或 DXVK 设置的问题)。
别担心,既然之前的“安装崩溃”解决了,现在这个“渲染崩溃”有一个非常简单的“降级疗法”——强制使用软件渲染。也就是不让它调用显卡,而是用 CPU 来画界面。虽然稍微吃一点 CPU,但对于战网这种界面程序来说完全没问题,而且极其稳定。
请按照以下步骤操作,这招通常能“起死回生”:
方案一:强制软件渲染(最推荐,成功率最高)
这个方法通过设置环境变量,告诉 Wine:“别找显卡了,直接用 CPU 画图”。
-
在 Lutris 里右键点击 Battle.net -> Configure (配置)。
-
点击左侧的 System options (系统选项)。
-
找到 Environment variables (环境变量) 区域。
-
点击 Add (添加),填入以下两组变量(如果之前有设置过其他的,先留着):
- 第一组:
- Key:
LIBGL_ALWAYS_SOFTWARE - Value:
1
- Key:
- 第二组:
- Key:
WINEDEBUG - Value:
-all(这个是为了屏蔽那些烦人的 debugger 刷屏)
- Key:
- 第一组:
-
点击 Save (保存)。
-
再次点击 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
- 安装完成后,彻底关闭 Lutris(右键托盘图标退出,或者在系统监视器里杀掉进程)。
- 重新打开 Lutris。
- 再次进入 Battle.net 的配置界面(Configure -> Runner options)。
- 看那个红色的
Error Missing Vulkan libraries应该消失了。 - 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)
第四步:添加显存大小
- 点击选中 Direct3D 文件夹。
- 在右边的空白区域,右键 -> 新建 -> 字符串值。
- 名字填入:
VideoMemorySize - 双击它,数值数据填入:
4096(代表 4GB 显存,足够战网用了)。 - 点击确定。
第五步:再次尝试软件渲染(双保险)
虽然我们要修复显卡问题,但为了防止 Debugger 刷屏干扰,我们再加一个屏蔽变量。
- 回到 Lutris 配置界面 -> 系统选项。
- 找到 环境变量。
- 添加:
- Key:
WINEDEBUG - Value:
-all
- Key:
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)