# Проверенные рекомендации Ниже только те пункты, которые подтверждаются текущей конфигурацией проекта и практикой запуска на сервере. ## 1) Healthcheck Sunshine Текущий вариант `["CMD", "pgrep", "sunshine"]` рабочий в этой сборке: в контейнере есть `/usr/bin/sunshine`, процесс виден как `sunshine`. ```yaml healthcheck: test: ["CMD", "pgrep", "sunshine"] interval: 30s timeout: 10s retries: 3 ``` ## 2) Entrypoint и tini - Контейнер стартует через `tini` → `/entrypoint.sh` → `sunshine`. - `tini` нужен, чтобы fluxbox и другие дочерние процессы не превращались в zombie и панель задач оставалась видимой. - Проверка: `docker exec game-player-1 cat /proc/1/comm` → `tini`. ## 3) Shared memory (`/dev/shm`) - Для Steam CEF обязательно `shm_size: "2gb"` в `docker-compose.yml`. - При 64 MB (дефолт Docker) в `cef_log.txt` появляется `Less than 64MB of free space` — окно входа мигает. - После изменения `shm_size` нужен `--force-recreate`, а не просто `restart`. ```bash docker exec game-player-1 df -h /dev/shm ``` ## 4) Права на volume Steam Проблема прав на bind-mount критична. Правильный подход — точечный `chown` в `entrypoint.sh` и `start-steam.sh`: ```bash mkdir -p /home/steam/.local/share/Steam /tmp/xdg-steam /home/steam/tmp ln -sfn /home/steam/.local/share/Steam /home/steam/.steam chown -R steam:steam /home/steam /tmp/xdg-steam ``` Не рекомендуется: `chmod -R 777 /DATA/AppData/game-server/players/`. ## 5) Xorg dummy и ввод Moonlight - Используется минимальный `xorg-dummy.conf` без привязки к `/dev/input/mice`. - Добавление `InputDevice` с физическим устройством может вернуть проблему, когда ввод уходит в хостовую консоль. - Ввод Moonlight обрабатывается через Sunshine/XTest в изолированном X-сессии `:99`. ## 6) Запуск Steam (`start-steam.sh`) Текущий подход: - Запуск от `runuser -u steam` с `DISPLAY=:99`, `XDG_RUNTIME_DIR=/tmp/xdg-steam`, `TMPDIR=/home/steam/tmp` - Двухфазный старт: `-silent -no-cef-sandbox`, затем однократно `steam://open/gamepadui` - Блокировка `flock` — защита от двойного запуска при быстрых кликах в Moonlight - Если Steam уже работает и UI виден — процесс **не убивается** - `keep-steam-window.sh` держит окно «Sign in to Steam» на экране (без растягивания на 1920×1080) Не использовать прямой `-gamepadui -fullscreen` в `apps.json` — это вызывает ChunkLoadError и нестабильность CEF. ## 7) System DBus Steam webhelper требует рабочий system DBus. В `entrypoint.sh` и `start-steam.sh` DBus поднимается автоматически: ```bash dbus-daemon --system --fork ``` Проверка: ```bash docker exec game-player-1 runuser -u steam -- \ dbus-send --system --print-reply --dest=org.freedesktop.DBus \ /org/freedesktop/DBus org.freedesktop.DBus.ListNames ``` ## 8) Что проверить на хосте 1. Установлен `nvidia-container-toolkit`. 2. User namespaces для Steam: ```bash sysctl kernel.unprivileged_userns_clone ``` Ожидается `1`. 3. Контейнеры со смягчёнными профилями (как в `docker-compose.yml`): ```yaml security_opt: - seccomp:unconfined - apparmor:unconfined ``` ## 9) Быстрая проверка после перезапуска ```bash docker compose ps docker compose logs --tail=200 player1 docker exec -it game-player-1 bash -lc ' cat /proc/1/comm pgrep -a sunshine pgrep -a "steam -srt" || true df -h /dev/shm DISPLAY=:99 xwininfo -root -tree | grep -iE "Sign in|1918x" || true ' ``` Если сервисы healthy, а Steam не открывается в Moonlight — смотреть `steam-app.log`, `cef_log.txt`, `webhelper-linux.txt` и дерево окон на `DISPLAY=:99`.