Stabilize Steam startup and persistent user data in containers.
Run Steam Big Picture as dedicated steam user with persistent home-backed storage and document first-run bootstrap behavior. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7,7 +7,7 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|||||||
RUN dpkg --add-architecture i386 && \
|
RUN dpkg --add-architecture i386 && \
|
||||||
apt-get update && apt-get install -y \
|
apt-get update && apt-get install -y \
|
||||||
xvfb fluxbox dbus-x11 xauth xfonts-base x11-xserver-utils \
|
xvfb fluxbox dbus-x11 xauth xfonts-base x11-xserver-utils \
|
||||||
software-properties-common wget curl ca-certificates \
|
software-properties-common wget curl ca-certificates locales pciutils \
|
||||||
libcap2-bin libgomp1 mesa-utils \
|
libcap2-bin libgomp1 mesa-utils \
|
||||||
libxcb-cursor0 libxcb-xinerama0 libxcb-xfixes0 libxcb-shape0 libxcb-randr0 libxcb-xtest0 \
|
libxcb-cursor0 libxcb-xinerama0 libxcb-xfixes0 libxcb-shape0 libxcb-randr0 libxcb-xtest0 \
|
||||||
libxcb1 libxcb-render0 libxcb-render-util0 libxcb-util1 libxcb-keysyms1 \
|
libxcb1 libxcb-render0 libxcb-render-util0 libxcb-util1 libxcb-keysyms1 \
|
||||||
@@ -23,6 +23,7 @@ RUN wget "https://github.com/LizardByte/Sunshine/releases/download/v0.21.0/sunsh
|
|||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
echo "debconf steam/question select I AGREE" | debconf-set-selections \
|
echo "debconf steam/question select I AGREE" | debconf-set-selections \
|
||||||
&& apt-get install -y /tmp/sunshine.deb steam:i386 steam-devices \
|
&& apt-get install -y /tmp/sunshine.deb steam:i386 steam-devices \
|
||||||
|
&& locale-gen en_US.UTF-8 \
|
||||||
&& rm -f /tmp/sunshine.deb \
|
&& rm -f /tmp/sunshine.deb \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
@@ -30,9 +31,14 @@ RUN apt-get update && \
|
|||||||
# 4. Скрипт очищает сессию, поднимает виртуальный экран, fluxbox и запускает Sunshine
|
# 4. Скрипт очищает сессию, поднимает виртуальный экран, fluxbox и запускает Sunshine
|
||||||
RUN echo '#!/bin/bash\n\
|
RUN echo '#!/bin/bash\n\
|
||||||
rm -f /tmp/.X99-lock /tmp/.X11-unix/X99\n\
|
rm -f /tmp/.X99-lock /tmp/.X11-unix/X99\n\
|
||||||
|
id steam >/dev/null 2>&1 || useradd -m -s /bin/bash steam\n\
|
||||||
|
mkdir -p /home/steam/.local/share/Steam /tmp/xdg-steam\n\
|
||||||
|
chown -R steam:steam /home/steam /tmp/xdg-steam\n\
|
||||||
Xvfb :99 -ac -screen 0 1920x1080x24 &\n\
|
Xvfb :99 -ac -screen 0 1920x1080x24 &\n\
|
||||||
export DISPLAY=:99\n\
|
export DISPLAY=:99\n\
|
||||||
export HOME=/root\n\
|
export HOME=/root\n\
|
||||||
|
export LANG=en_US.UTF-8\n\
|
||||||
|
export LC_ALL=en_US.UTF-8\n\
|
||||||
sleep 3\n\
|
sleep 3\n\
|
||||||
fluxbox &\n\
|
fluxbox &\n\
|
||||||
sleep 2\n\
|
sleep 2\n\
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -53,6 +53,8 @@
|
|||||||
|
|
||||||
`sunshine.conf` не хранится в репозитории и генерируется Sunshine автоматически при первом запуске контейнера.
|
`sunshine.conf` не хранится в репозитории и генерируется Sunshine автоматически при первом запуске контейнера.
|
||||||
|
|
||||||
|
`Steam Big Picture` запускается от отдельного пользователя `steam` внутри контейнера. Данные Steam сохраняются в `players/pX_steam` и не теряются после перезапуска контейнеров/сервера.
|
||||||
|
|
||||||
### Порты
|
### Порты
|
||||||
|
|
||||||
В Moonlight при ручном добавлении указывается один адрес в формате `IP:base_port`.
|
В Moonlight при ручном добавлении указывается один адрес в формате `IP:base_port`.
|
||||||
@@ -84,6 +86,17 @@
|
|||||||
|
|
||||||
Moonlight использует `base_port` и вычисляет остальные порты автоматически.
|
Moonlight использует `base_port` и вычисляет остальные порты автоматически.
|
||||||
|
|
||||||
|
### Первый запуск Steam
|
||||||
|
|
||||||
|
При первом запуске Steam скачивает и распаковывает клиент (может занять 10-20 минут, в зависимости от канала). В это время в Moonlight может отображаться пустой/черный рабочий стол.
|
||||||
|
|
||||||
|
Проверка прогресса для `player1`:
|
||||||
|
```bash
|
||||||
|
docker exec -it game-player-1 bash -lc 'tail -f /home/steam/.steam/debian-installation/logs/bootstrap_log.txt'
|
||||||
|
```
|
||||||
|
|
||||||
|
После завершения первичной загрузки повторно откройте сессию Moonlight и запустите `Steam Big Picture`.
|
||||||
|
|
||||||
## Отладка
|
## Отладка
|
||||||
|
|
||||||
Для проверки состояния контейнеров используйте:
|
Для проверки состояния контейнеров используйте:
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ services:
|
|||||||
- "48010:48010/udp"
|
- "48010:48010/udp"
|
||||||
- "47998-48000:47998-48000/udp"
|
- "47998-48000:47998-48000/udp"
|
||||||
volumes:
|
volumes:
|
||||||
- /DATA/AppData/game-server/players/p1_steam:/root/.local/share/Steam
|
- /DATA/AppData/game-server/players/p1_steam:/home/steam/.local/share/Steam
|
||||||
- /DATA/AppData/game-server/players/p1_config:/root/.config/sunshine
|
- /DATA/AppData/game-server/players/p1_config:/root/.config/sunshine
|
||||||
# Добавляем логирование для отладки
|
# Добавляем логирование для отладки
|
||||||
logging:
|
logging:
|
||||||
@@ -62,7 +62,7 @@ services:
|
|||||||
- "48040:48010/udp"
|
- "48040:48010/udp"
|
||||||
- "48028-48030:47998-48000/udp"
|
- "48028-48030:47998-48000/udp"
|
||||||
volumes:
|
volumes:
|
||||||
- /DATA/AppData/game-server/players/p2_steam:/root/.local/share/Steam
|
- /DATA/AppData/game-server/players/p2_steam:/home/steam/.local/share/Steam
|
||||||
- /DATA/AppData/game-server/players/p2_config:/root/.config/sunshine
|
- /DATA/AppData/game-server/players/p2_config:/root/.config/sunshine
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
@@ -84,7 +84,7 @@ services:
|
|||||||
- "48070:48010/udp"
|
- "48070:48010/udp"
|
||||||
- "48058-48060:47998-48000/udp"
|
- "48058-48060:47998-48000/udp"
|
||||||
volumes:
|
volumes:
|
||||||
- /DATA/AppData/game-server/players/p3_steam:/root/.local/share/Steam
|
- /DATA/AppData/game-server/players/p3_steam:/home/steam/.local/share/Steam
|
||||||
- /DATA/AppData/game-server/players/p3_config:/root/.config/sunshine
|
- /DATA/AppData/game-server/players/p3_config:/root/.config/sunshine
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
@@ -106,7 +106,7 @@ services:
|
|||||||
- "48100:48010/udp"
|
- "48100:48010/udp"
|
||||||
- "48088-48090:47998-48000/udp"
|
- "48088-48090:47998-48000/udp"
|
||||||
volumes:
|
volumes:
|
||||||
- /DATA/AppData/game-server/players/p4_steam:/root/.local/share/Steam
|
- /DATA/AppData/game-server/players/p4_steam:/home/steam/.local/share/Steam
|
||||||
- /DATA/AppData/game-server/players/p4_config:/root/.config/sunshine
|
- /DATA/AppData/game-server/players/p4_config:/root/.config/sunshine
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
|
|||||||
@@ -1,31 +1,21 @@
|
|||||||
{
|
{
|
||||||
"env": {
|
"env": {
|
||||||
"PATH": "$(PATH):$(HOME)/.local/bin"
|
"PATH": "$(PATH):$(HOME)/.local/bin:/usr/games"
|
||||||
},
|
},
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"name": "Desktop",
|
"name": "Desktop",
|
||||||
"image-path": "desktop.png"
|
"image-path": "desktop.png"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Low Res Desktop",
|
|
||||||
"image-path": "desktop.png",
|
|
||||||
"prep-cmd": [
|
|
||||||
{
|
|
||||||
"do": "xrandr --output HDMI-1 --mode 1920x1080",
|
|
||||||
"undo": "xrandr --output HDMI-1 --mode 1920x1200"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Steam Big Picture",
|
"name": "Steam Big Picture",
|
||||||
"detached": [
|
"detached": [
|
||||||
"setsid steam steam://open/bigpicture"
|
"bash -lc 'id steam >/dev/null 2>&1 || useradd -m -s /bin/bash steam; mkdir -p /home/steam/.local/share/Steam /tmp/xdg-steam; chown -R steam:steam /home/steam /tmp/xdg-steam; runuser -u steam -- env DISPLAY=:99 HOME=/home/steam XDG_RUNTIME_DIR=/tmp/xdg-steam LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 /usr/games/steam -tenfoot -no-cef-sandbox -cef-disable-gpu -cef-disable-gpu-compositing'"
|
||||||
],
|
],
|
||||||
"prep-cmd": [
|
"prep-cmd": [
|
||||||
{
|
{
|
||||||
"do": "",
|
"do": "",
|
||||||
"undo": "setsid steam steam://close/bigpicture"
|
"undo": "bash -lc 'pkill -u steam -f \"/usr/games/steam\" || true'"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"image-path": "steam.png"
|
"image-path": "steam.png"
|
||||||
|
|||||||
@@ -1,31 +1,21 @@
|
|||||||
{
|
{
|
||||||
"env": {
|
"env": {
|
||||||
"PATH": "$(PATH):$(HOME)/.local/bin"
|
"PATH": "$(PATH):$(HOME)/.local/bin:/usr/games"
|
||||||
},
|
},
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"name": "Desktop",
|
"name": "Desktop",
|
||||||
"image-path": "desktop.png"
|
"image-path": "desktop.png"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Low Res Desktop",
|
|
||||||
"image-path": "desktop.png",
|
|
||||||
"prep-cmd": [
|
|
||||||
{
|
|
||||||
"do": "xrandr --output HDMI-1 --mode 1920x1080",
|
|
||||||
"undo": "xrandr --output HDMI-1 --mode 1920x1200"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Steam Big Picture",
|
"name": "Steam Big Picture",
|
||||||
"detached": [
|
"detached": [
|
||||||
"setsid steam steam://open/bigpicture"
|
"bash -lc 'id steam >/dev/null 2>&1 || useradd -m -s /bin/bash steam; mkdir -p /home/steam/.local/share/Steam /tmp/xdg-steam; chown -R steam:steam /home/steam /tmp/xdg-steam; runuser -u steam -- env DISPLAY=:99 HOME=/home/steam XDG_RUNTIME_DIR=/tmp/xdg-steam LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 /usr/games/steam -tenfoot -no-cef-sandbox -cef-disable-gpu -cef-disable-gpu-compositing'"
|
||||||
],
|
],
|
||||||
"prep-cmd": [
|
"prep-cmd": [
|
||||||
{
|
{
|
||||||
"do": "",
|
"do": "",
|
||||||
"undo": "setsid steam steam://close/bigpicture"
|
"undo": "bash -lc 'pkill -u steam -f \"/usr/games/steam\" || true'"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"image-path": "steam.png"
|
"image-path": "steam.png"
|
||||||
|
|||||||
@@ -1,31 +1,21 @@
|
|||||||
{
|
{
|
||||||
"env": {
|
"env": {
|
||||||
"PATH": "$(PATH):$(HOME)/.local/bin"
|
"PATH": "$(PATH):$(HOME)/.local/bin:/usr/games"
|
||||||
},
|
},
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"name": "Desktop",
|
"name": "Desktop",
|
||||||
"image-path": "desktop.png"
|
"image-path": "desktop.png"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Low Res Desktop",
|
|
||||||
"image-path": "desktop.png",
|
|
||||||
"prep-cmd": [
|
|
||||||
{
|
|
||||||
"do": "xrandr --output HDMI-1 --mode 1920x1080",
|
|
||||||
"undo": "xrandr --output HDMI-1 --mode 1920x1200"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Steam Big Picture",
|
"name": "Steam Big Picture",
|
||||||
"detached": [
|
"detached": [
|
||||||
"setsid steam steam://open/bigpicture"
|
"bash -lc 'id steam >/dev/null 2>&1 || useradd -m -s /bin/bash steam; mkdir -p /home/steam/.local/share/Steam /tmp/xdg-steam; chown -R steam:steam /home/steam /tmp/xdg-steam; runuser -u steam -- env DISPLAY=:99 HOME=/home/steam XDG_RUNTIME_DIR=/tmp/xdg-steam LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 /usr/games/steam -tenfoot -no-cef-sandbox -cef-disable-gpu -cef-disable-gpu-compositing'"
|
||||||
],
|
],
|
||||||
"prep-cmd": [
|
"prep-cmd": [
|
||||||
{
|
{
|
||||||
"do": "",
|
"do": "",
|
||||||
"undo": "setsid steam steam://close/bigpicture"
|
"undo": "bash -lc 'pkill -u steam -f \"/usr/games/steam\" || true'"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"image-path": "steam.png"
|
"image-path": "steam.png"
|
||||||
|
|||||||
@@ -1,31 +1,21 @@
|
|||||||
{
|
{
|
||||||
"env": {
|
"env": {
|
||||||
"PATH": "$(PATH):$(HOME)/.local/bin"
|
"PATH": "$(PATH):$(HOME)/.local/bin:/usr/games"
|
||||||
},
|
},
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"name": "Desktop",
|
"name": "Desktop",
|
||||||
"image-path": "desktop.png"
|
"image-path": "desktop.png"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Low Res Desktop",
|
|
||||||
"image-path": "desktop.png",
|
|
||||||
"prep-cmd": [
|
|
||||||
{
|
|
||||||
"do": "xrandr --output HDMI-1 --mode 1920x1080",
|
|
||||||
"undo": "xrandr --output HDMI-1 --mode 1920x1200"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Steam Big Picture",
|
"name": "Steam Big Picture",
|
||||||
"detached": [
|
"detached": [
|
||||||
"setsid steam steam://open/bigpicture"
|
"bash -lc 'id steam >/dev/null 2>&1 || useradd -m -s /bin/bash steam; mkdir -p /home/steam/.local/share/Steam /tmp/xdg-steam; chown -R steam:steam /home/steam /tmp/xdg-steam; runuser -u steam -- env DISPLAY=:99 HOME=/home/steam XDG_RUNTIME_DIR=/tmp/xdg-steam LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 /usr/games/steam -tenfoot -no-cef-sandbox -cef-disable-gpu -cef-disable-gpu-compositing'"
|
||||||
],
|
],
|
||||||
"prep-cmd": [
|
"prep-cmd": [
|
||||||
{
|
{
|
||||||
"do": "",
|
"do": "",
|
||||||
"undo": "setsid steam steam://close/bigpicture"
|
"undo": "bash -lc 'pkill -u steam -f \"/usr/games/steam\" || true'"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"image-path": "steam.png"
|
"image-path": "steam.png"
|
||||||
|
|||||||
Reference in New Issue
Block a user