docker-steam-headless
docker-steam-headless copied to clipboard
[Bug]: steam-headless container is streaming my host screen over sunshine
Describe the Bug
The steam-headless container is streaming my host screen over sunshine instead of streaming the interface inside docker.
Steps to Reproduce
Setup the container using docker compose and try to connect over sunshine.
Expected Behavior
Stream the xfce interface
Screenshots
No response
Relevant Settings
# ____ _
# / ___| _ _ ___| |_ ___ _ __ ___
# \___ \| | | / __| __/ _ \ '_ ` _ \
# ___) | |_| \__ \ || __/ | | | | |
# |____/ \__, |___/\__\___|_| |_| |_|
# |___/
#
NAME=SteamHeadless
TZ=America/Recife
USER_LOCALES=pt_BR.UTF-8 UTF-8
DISPLAY=:55
SHM_SIZE=2G
## HOME_DIR:
## Description: The path to the home directory on your host. Mounts to `/home/default` inside the container.
HOME_DIR=/mnt/ironwolf/Games/steam-headless/home
## SHARED_SOCKETS_DIR:
## Description: Shared sockets such as pulse audio and X11.
SHARED_SOCKETS_DIR=/opt/steam-headless/sockets
## GAMES_DIR:
## Description: The path to the games directory on your host. Mounts to `/mnt/games` inside the container.
GAMES_DIR=/mnt/ironwolf
# ____ __ _ _ _ _
# | _ \ ___ / _| __ _ _ _| | |_ | | | |___ ___ _ __
# | | | |/ _ \ |_ / _` | | | | | __| | | | / __|/ _ \ '__|
# | |_| | __/ _| (_| | |_| | | |_ | |_| \__ \ __/ |
# |____/ \___|_| \__,_|\__,_|_|\__| \___/|___/\___|_|
#
#
PUID=1000
PGID=1000
UMASK=000
USER_PASSWORD=******
# __ __ _
# | \/ | ___ __| | ___
# | |\/| |/ _ \ / _` |/ _ \
# | | | | (_) | (_| | __/
# |_| |_|\___/ \__,_|\___|
#
#
## MODE:
## Options: ['primary', 'secondary']
## Description: Steam Headless containers can run in a secondary mode that will only start
## a Steam process that will then use the X server of either the host or another
## Steam Headless container running in 'primary' mode.
MODE=primary
# ____ _
# / ___| ___ _ ____ _(_) ___ ___ ___
# \___ \ / _ \ '__\ \ / / |/ __/ _ \/ __|
# ___) | __/ | \ V /| | (_| __/\__ \
# |____/ \___|_| \_/ |_|\___\___||___/
#
#
# Web UI
## WEB_UI_MODE:
## Options: ['vnc', 'neko', 'none']
## Description: Configures the WebUI to use for accessing the virtual desktop.
## Supported Modes: ['primary']
WEB_UI_MODE=neko
## ENABLE_VNC_AUDIO:
## Options: ['true', 'false']
## Description: Enables audio over for the VNC Web UI if 'WEB_UI_MODE' is set to 'vnc'.
ENABLE_VNC_AUDIO=false
## PORT_NOVNC_WEB:
## Description: Configure the port to use for the WebUI.
PORT_NOVNC_WEB=40083
## NEKO_NAT1TO1:
## Description: Configure nat1to1 for the neko WebUI if it is enabled by setting 'WEB_UI_MODE' to 'neko'.
## This will need to be the IP address of the host.
NEKO_NAT1TO1=192.168.3.9
# Steam
## ENABLE_STEAM:
## Options: ['true', 'false']
## Description: Enable Steam to run on start. This will also cause steam to restart automatically if closed.
## Supported Modes: ['primary', 'secondary']
ENABLE_STEAM=true
## STEAM_ARGS:
## Description: Additional steam execution arguments.
STEAM_ARGS=-silent
# Sunshine
## ENABLE_SUNSHINE:
## Options: ['true', 'false']
## Description: Enable Sunshine streaming service.
## Supported Modes: ['primary']
ENABLE_SUNSHINE=true
## SUNSHINE_USER:
## Description: Set the Sunshine service username.
SUNSHINE_USER=admin
## SUNSHINE_PASS:
## Description: Set the Sunshine service password.
SUNSHINE_PASS=admin
# Xorg
## ENABLE_EVDEV_INPUTS:
## Available Options: ['true', 'false']
## Description: Enable Keyboard and Mouse Passthrough. This will configure the Xorg server to catch all
## evdev events for Keyboard, Mouse, etc.
## Supported Modes: ['primary']
ENABLE_EVDEV_INPUTS=false
## FORCE_X11_DUMMY_CONFIG:
## Available Options: ['true', 'false']
## Description: Forces the installation of xorg.dummy.conf. This should be used when your output device does not have a monitor connected.
## Supported Modes: ['primary']
FORCE_X11_DUMMY_CONFIG=true
# Nvidia specific config (not required for non Nvidia GPUs)
## NVIDIA_DRIVER_CAPABILITIES:
## Options: ['all', 'compute', 'compat32', 'graphics', 'utility', 'video', 'display']
## Description: Controls which driver libraries/binaries will be mounted inside the container.
## Supported Modes: ['primary', 'secondary']
NVIDIA_DRIVER_CAPABILITIES=all
## NVIDIA_DRIVER_CAPABILITIES:
## Available Options: ['all', 'none', '<GPU UUID>']
## Description: Controls which GPUs will be made accessible inside the container.
## Supported Modes: ['primary', 'secondary']
NVIDIA_VISIBLE_DEVICES=all
## NVIDIA_DRIVER_VERSION:
## Description: Specify a driver version to force installation.
## Not meant to be used if nvidia container toolkit is installed.
## Detect current host driver installed with `nvidia-smi 2> /dev/null | grep NVIDIA-SMI | cut -d ' ' -f3`
## Supported Modes: ['primary', 'secondary']
NVIDIA_DRIVER_VERSION=
---
version: "3.8"
services:
steam-headless:
image: josh5/steam-headless:latest
restart: unless-stopped
shm_size: ${SHM_SIZE}
ipc: host # Could also be set to 'shareable'
ulimits:
nofile:
soft: 1024
hard: 524288
cap_add:
- NET_ADMIN
- SYS_ADMIN
- SYS_NICE
security_opt:
- seccomp:unconfined
- apparmor:unconfined
# NETWORK:
## NOTE: With this configuration, if we do not use the host network, then physical device input
## is not possible and your USB connected controllers will not work in steam games.
network_mode: host
hostname: ${NAME}
extra_hosts:
- "${NAME}:127.0.0.1"
# ENVIRONMENT:
## Read all config variables from the .env file
environment:
# System
- TZ=${TZ}
- USER_LOCALES=${USER_LOCALES}
- DISPLAY=${DISPLAY}
# User
- PUID=${PUID}
- PGID=${PGID}
- UMASK=${UMASK}
- USER_PASSWORD=${USER_PASSWORD}
# Mode
- MODE=${MODE}
# Web UI
- WEB_UI_MODE=${WEB_UI_MODE}
- ENABLE_VNC_AUDIO=${ENABLE_VNC_AUDIO}
- PORT_NOVNC_WEB=${PORT_NOVNC_WEB}
- NEKO_NAT1TO1=${NEKO_NAT1TO1}
# Steam
- ENABLE_STEAM=${ENABLE_STEAM}
- STEAM_ARGS=${STEAM_ARGS}
# Sunshine
- ENABLE_SUNSHINE=${ENABLE_SUNSHINE}
- SUNSHINE_USER=${SUNSHINE_USER}
- SUNSHINE_PASS=${SUNSHINE_PASS}
# Xorg
- ENABLE_EVDEV_INPUTS=${ENABLE_EVDEV_INPUTS}
- FORCE_X11_DUMMY_CONFIG=${FORCE_X11_DUMMY_CONFIG}
# Nvidia specific config
- NVIDIA_DRIVER_CAPABILITIES=${NVIDIA_DRIVER_CAPABILITIES}
- NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES}
- NVIDIA_DRIVER_VERSION=${NVIDIA_DRIVER_VERSION}
# DEVICES:
devices:
# Use the host fuse device [REQUIRED].
- /dev/fuse
# Add the host uinput device [REQUIRED].
- /dev/uinput
# Add AMD/Intel HW accelerated video encoding/decoding devices [REQUIRED].
# NOTE: See documentation for determining which devices to configure here if you have multiple GPUs
- /dev/dri/card1
- /dev/dri/renderD128
# Ensure container access to devices 13:*
device_cgroup_rules:
- 'c 13:* rmw'
# VOLUMES:
volumes:
# The location of your home directory.
- ${HOME_DIR}/:/home/default/:rw
# The location where all games should be installed.
# This path needs to be set as a library path in Steam after logging in.
# Otherwise, Steam will store games in the home directory above.
- ${GAMES_DIR}/:/mnt/games/:rw
# The Xorg socket.
- ${SHARED_SOCKETS_DIR}/.X11-unix/:/tmp/.X11-unix/:rw
# Pulse audio socket.
- ${SHARED_SOCKETS_DIR}/pulse/:/tmp/pulse/:rw
Version
steam-headless-1 | Build: [2025-03-01 03:09:25] [master] [14c770bce61db99c56592760c73c2ba454dab648] [debian]
Platform
Arch Linux 6.12.30-1-lts unknown unknown GNU/Linux Docker version 28.1.1, build 4eba377327 Docker Compose version 2.36.2
Relevant log output
In sunshine go to configuration->advanced at the bottom set force a specific capture method to x11