Steam Headless 是一款专为远程游戏流媒体设计的服务器软件,能够帮助用户在家庭网络或互联网环境下搭建稳定的游戏串流服务。它基于容器化技术部署,简化了在NAS设备上的安装与配置流程。
核心功能特性:
- • 系统构建于 Debian Bookworm 基础之上,完整支持 Steam 客户端在 Linux 环境中的运行,同时兼容 Proton 兼容层技术。
- • 提供与 Moonlight 完全兼容的串流服务,用户可以通过 Steam Link、Moonlight 客户端或 Steam 自带的远程畅玩功能进行游戏画面串流。
- • 内置轻量级 Xfce4 桌面环境,支持通过 noVNC 网页界面进行远程访问,并具备音频与视频输出能力。
- • 全面支持 NVIDIA、AMD 和 Intel 三大品牌显卡,提供完整的游戏控制器输入支持。
- • 允许通过 Flatpak 或 Appimage 方式安装额外应用程序,例如 EmuDeck、Heroic、Lutris 等流行游戏启动器。
- • 提供 root 权限访问功能,方便用户进行深度自定义配置与优化。
项目概述与部署前提
本项目在部署过程中具有一定技术难度,同时对硬件性能有基本要求,建议用户仔细遵循本教程的每一步骤进行操作,后续可根据实际需求进行个性化调整。
项目官方 Docker Compose 部署文档链接如下:
https://github.com/Steam-Headless/docker-steam-headless/blob/master/docs/docker-compose.md
本教程内容参考了 B 站 UP 主“紫玥爱吃狐萝卜”的相关视频:
https://www.bilibili.com/video/BV1UVefz7ErE
演示环境硬件与系统配置:
- • 硬件配置采用 Intel i5-1235U 处理器,配备 40GB 内存,同时调用集成显卡与独立 NVIDIA 显卡(RTX A2000 Laptop 型号)。
- • 操作系统基于 Debian 12 的绿联 UGOS Pro 系统,其他品牌 NAS 系统的配置方法基本类似。
- • 环境要求方面,如果计划使用独立显卡,建议提前验证 Docker 环境能否正常识别和调用显卡设备。
环境配置与驱动安装
除了需要具备正常的 Docker 运行环境外,如果计划在 Docker 容器内调用独立显卡,还需要提前安装 NVIDIA 显卡驱动和 NVIDIA Container Toolkit 工具套件。
NVIDIA 显卡驱动安装
NVIDIA 驱动程序是连接显卡硬件与操作系统、应用程序的关键软件组件,其核心作用是让系统和应用能够正确识别、控制并高效利用 NVIDIA 显卡的硬件加速功能。
提示: 目前已知绿联、飞牛和 Unraid 系统都提供了便捷的 NVIDIA 驱动安装方式,其他 Linux 发行版的安装方法可能有所不同。
绿联系统驱动安装界面:
飞牛系统驱动安装界面:
Unraid 系统驱动安装界面:
安装完成后,在终端中输入以下命令进行测试,如果配置正确将会显示显卡的详细信息:
nvidia-smi
NVIDIA Container Toolkit 工具安装
NVIDIA Container Toolkit 是一套专门为容器化环境设计的工具集合,用于高效运行 GPU 加速应用程序。它解决了容器技术与 NVIDIA GPU 硬件之间的兼容性问题,让开发者和用户能够轻松地在 Docker 等容器平台中利用 GPU 计算能力。
提示: 以下安装代码适用于基于 Debian 系统的飞牛和绿联 NAS,其他操作系统可参考官方安装指南:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
请按顺序执行以下命令:
# 切换 root 权限
sudo -i
# 执行 curl 命令导入仓库 GPG 密钥
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/3bf863cc.pub | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# 添加 NVIDIA Container Toolkit 官方仓库到系统源列表
echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64 /" | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 更新软件包列表
sudo apt-get update
# 安装 nvidia-container-toolkit 工具包
sudo apt-get install -y nvidia-container-toolkit
# 配置 NVIDIA 在 Docker 中的运行环境
sudo nvidia-ctk runtime configure --runtime=docker
# 重启 Docker 服务
sudo systemctl restart docker
运行以下 Docker 容器测试命令,如果成功调用显卡将会显示相关信息:
docker run --rm --gpus all nvidia/cuda:11.3.1-base-ubuntu18.04 nvidia-smi
Steam Headless 安装步骤
首先将基础镜像(josh5/steam-headless:latest)下载到本地,避免因网络问题导致部署过程中断:
配置文件模板下载
访问官方部署说明文档,可以看到项目支持 Intel、NVIDIA 和 AMD 三大显卡品牌:
https://github.com/Steam-Headless/docker-steam-headless/blob/master/docs/docker-compose.md
打开左侧的 compose-files 文件夹,这里存放了各种配置模板文件:
点击下载 .env 配置文件:
重要提示:
带有 privileged 标志的模板对设备拥有完全访问权限,不需要手动指定具体设备路径。如果是多显卡环境且需要指定特定显卡,建议使用普通模板。实测中发现 docker-compose.nvidia.privileged.yml 模板在某些硬件上运行不正常,更换为 docker-compose.nvidia.yml 后问题解决。
根据实际硬件情况下载对应的模板文件,本教程以 NVIDIA 显卡为例:
在 NAS 中创建一个专用文件夹,将下载的两个配置文件放入其中:
配置文件修改
打开 .env 文件(下载后可能自动重命名为 env.txt),需要修改以下几个关键参数:
需要修改的主要参数列表:
TZ
SHM_SIZE
HOME_DIR
SHARED_SOCKETS_DIR
GAMES_DIR
ENABLE_SUNSHINE
将时区修改为 Asia/Shanghai,避免系统时间显示问题:
调整容器共享内存大小,过小的设置会影响图形渲染性能,但也不应分配过多以免占用系统资源:
提示: 某些系统可能不支持相对路径,可以改为需要映射目录的绝对路径。
修改 HOME_DIR 的值为 ./home,这将把主机目录挂载到容器内的 /home/default 路径(用于持久化用户数据):
修改 SHARED_SOCKETS_DIR 的值为 ./sockets,这是共享套接字目录(用于 X11、PulseAudio 等进程间通信):
提示: 这是游戏存储目录,如果后续下载大量游戏且担心固态硬盘容量不足,可以改为机械硬盘的目录路径。
修改 GAMES_DIR 的值为 ./games,将主机目录挂载到容器内的 /mnt/games 路径(游戏库存储位置):
提示: 如果后续文件映射出现问题,可以修改此设置,默认情况下无需修改(本教程后续更改为 root 权限):
提示: 容器内默认用户的密码,一般情况下无需修改:
提示: Web UI 访问端口,注意检查是否与其他容器端口冲突,默认设置通常无需修改:
将 ENABLE_SUNSHINE 的值修改为 true,设置为自动启用 Sunshine 串流服务:
提示: Sunshine 登录用户名和密码,如果服务需要映射到外网访问,建议修改默认凭证:
软件源更换加速
创建一个名为 Dockerfile 的文件,粘贴以下代码内容:
FROM josh5/steam-headless
RUN su default -c bash 'flatpak --user remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub'
RUN echo 'Types: deb\nURIs: https://mirrors.tuna.tsinghua.edu.cn/debian\nSuites: bookworm bookworm-updates bookworm-backports\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg\n\nTypes: deb\nURIs: https://ftp.sjtu.edu.cn/debian-security/\nSuites: bookworm-security\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg' > /etc/apt/sources.list.d/debian.sources
RUN apt-get -o Acquire::Check-Valid-Until=false update && apt-get install fonts-noto-cjk -y
RUN apt-get clean all
打开 .yaml 模板文件:
将原来的 image: josh5/steam-headless:latest 行删除,替换为以下代码(注意保持格式对齐):
build:
context: .
dockerfile: Dockerfile
最后进行检查,注意 Dockerfile 文件没有后缀格式。将原来的 .yml 模板文件重命名为 docker-compose.yaml,将原来的 env.txt 配置文件重命名为 .env(某些系统可能会隐藏以点开头的文件,修改后文件可能不可见):
项目部署执行
创建一个名为 steam-headless 的项目,存储路径选择上述配置文件夹,然后导入 Compose 配置:
点击“立即部署”按钮,正常情况下不应该出现错误提示:
容器已经正常运行(由于网络模式设置为 host,无法通过快捷方式跳转到页面):
查看容器日志,等待显卡驱动下载完成(下载速度通常较快):
当看到特定信息时,说明可以访问 VNC 界面:
服务器使用与游戏串流
在浏览器地址栏中输入 http://NAS的IP:8083
即可访问 VNC 界面:
提示: 日志中必须显示特定信息才算启动完成,此时可以进行连接:
点击连接按钮进入系统:
成功进入系统界面(如果显示不正常,可以多次刷新网页):
软件源更换加速
如果之前下载速度较慢,需要进行软件源更换(如果速度正常则可跳过此步骤)。有人可能好奇为什么需要两次换源操作,因为第一次换源可能存在某些问题,所以需要再次执行。如果不进行此操作,可能会卡在核显安装步骤。
手动进入容器终端,执行以下命令:
su default -c 'flatpak --user remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub'
执行完成后,重启容器:
现在可以看到下载速度明显提升:
注意旁边括号中的状态指示,确认是否正常打勾:
硬件信息查看
点击左上角菜单,可以查看详细的硬件信息:
可以查看处理器的详细信息:
集成显卡和独立显卡的信息也能正常显示:
Steam 安装与设置
所有准备工作完成后会切换到桌面界面(如果显示不正常可多次刷新网页),点击下载安装 Steam:
等待 Steam 客户端下载和安装完成:
提示: 点击左上角菜单,可以找到已安装的 Steam 应用程序:
登录个人的 Steam 账号:
点击左上角菜单,对 Steam 进行基本设置:
在界面设置中,将语言修改为中文:
在存储空间设置中,建议将游戏安装目录设置为 Game 目录:
提示: 如果游戏运行过程中出现崩溃问题,可以设置兼容性工具版本为 Proton 9.0-4:
网络连接优化
返回 Steam 首页,如果内容没有正常显示:
启用网络代理后立即见效,可以正常访问:
也可以通过修改路由器 hosts 文件来解决(推荐方法),具体 IP 地址需要根据实际情况调整:
23.219.73.99 steamcommunity.com
23.215.157.129 store.steampowered.com
游戏畅玩体验
随意选择一个游戏进行测试:
可以灵活选择游戏下载位置:
下载和安装过程没有遇到问题,点击开始即可畅玩游戏:
游戏运行一切正常:
右上角的游戏声音输出也没有问题:
在 NAS 系统中可以看到显卡被正常调用:
由于测试游戏体积较小,系统资源占用并不高:
Sunshine + Moonlight 串流配置
目前,Sunshine + Moonlight 组合是较为热门的低延迟远程游戏串流解决方案。其中,Sunshine 作为游戏串流服务端运行,Moonlight 作为客户端接收端,二者需要协同工作才能实现游戏的远程串流功能。
在浏览器地址栏中输入 https://NAS的IP:47990
访问 Sunshine 界面,注意需要使用 HTTPS 协议:
点击“高级”选项,选择继续前往:
输入用户名和密码,默认凭证为 admin/admin:
成功进入 Sunshine 控制面板:
首先将界面语言设置为中文(保存应用后需要等待页面重新加载):
根据自己使用的操作系统,下载对应的 Moonlight 客户端:
https://moonlight-stream.org/
安装完成后,应用程序会自动搜索网络中的 Sunshine 服务端:
如果一直无法自动搜索到服务器,可以手动输入主机 IP 地址:
添加成功后,点击进行连接(注意弹出的 Pin 码):
切换到 Pin 码选项卡,输入配对信息(名称可以根据连接的设备类型填写):
提示: 在 Sunshine 控制面板中点击“应用程序”,可以添加需要快捷打开的应用:
配对成功后,就会进入应用选择界面:
理论上此时应该能够正常连接,但实测中打开会导致系统卡死(VNC 和 Sunshine 网页端都无法访问,如有解决方法欢迎交流):
Steam Link 串流功能
Steam Link 功能允许将电脑上的 Steam 游戏画面串流至移动设备、智能电视、VR 头显或其他 PC 设备,让用户在不同设备上畅玩 Steam 游戏库。
Steam Link 应用下载链接:
https://apps.apple.com/cn/app/steam-link/id1246969117
https://help.steampowered.com/zh-cn/faqs/view/7112-CD02-7B57-59F8
打开应用后,不需要手动搜索,系统会自动发现服务器(在电脑和手机端都适用):
连接后会自动切换到 Steam 大屏模式,使用手柄操作会更加方便:
默认情况下没有进行手动画质设置,画面质量感觉一般(略有模糊):
简单试玩游戏没有发现问题,操作延迟可以感知(通过 Wi-Fi 无线连接):
由于测试游戏仅为 Demo 版本,系统资源占用并不高:
独立显卡被正常调用并工作:
故障排除与扩展功能
以下内容不一定所有用户都会遇到,仅作为问题记录供参考,有需要的用户可以查阅。
驱动下载卡住问题
通常卡住不是因为下载速度慢,而是进度没有更新看起来像没有运行:
如果一直卡着不动,可以关闭容器,删除映射文件夹后重新启动:
VNC 连接失败处理
页面顶部显示 Failed to connect to server 错误:
查看容器日志,有可能只是启动过程尚未完成(正常情况需要显示二行 INFO reaped unknown pid xxx 才算成功启动):
如果使用的是带 privileged 标志的模板,可以尝试更换为普通模板:
桌面加载异常解决
进入桌面后一直加载不正常,顶部状态栏没有显示:
查看日志中是否有警告提示(例如这里显示 Sunshine 服务有异常):
可以尝试重启容器解决:
正常加载的桌面应该是这样的:
桌面点击无响应
桌面顶部栏的按钮点击没有反应,可以尝试多次刷新网页:
Steam 安装无反应
点击安装按钮后,没有出现 Steam 下载弹窗:
关闭容器,删除 /home/.steam 目录,然后重新启动容器:
这样就会重新提示安装 Steam:
如果仍然不行,可以尝试修改配置文件,重新构建项目:
VNC 连接错误
提示 noVNC encountered an error,这种情况通常在长时间打开但没有操作时出现:
刷新网页后通常就能恢复正常:
Moonlight 串流问题
使用 Moonlight 连接时,会导致 Sunshine 出现错误并重启:
Sunshine 的日志中显示有报错信息,目前还没有找到确切的解决方法:
项目总结与评价
总体而言,Steam Headless 这款工具非常适合喜欢技术折腾的游戏玩家——通过 Docker 技术在 NAS 等设备上搭建游戏串流服务,无论是手机、电视还是其他电脑设备,都能实现远程游戏游玩的想法确实很有吸引力。特别是配合独立显卡使用,游戏体验会有明显提升,算是充分利用闲置硬件资源的好方法。不过在实际部署过程中还是会遇到不少问题,最基本的要求是安装好显卡驱动和相关工具,确保 Docker 环境能够正常调用显卡;Steam 网络访问问题需要通过修改 hosts 文件或使用网络代理解决;另外在测试过程中遇到了 Moonlight 串流问题,目前还没有找到有效的解决方法。
综合推荐指数: ⭐⭐⭐⭐(如果拥有独立显卡一定要尝试,充分榨干硬件性能)
实际使用体验: ⭐⭐⭐⭐(出乎意料地不错,除了遇到的串流问题)
部署难度评估: ⭐⭐⭐⭐(具备一定的技术门槛)