feat: Enhance game station setup and configuration

- Updated README with detailed instructions for creating a dedicated Ansible user on Linux, including SSH key setup and passwordless sudo.
- Added userConfigurations.json for Steam ROM Manager with configurations for various gaming consoles.
- Introduced scripts for managing Gamescope and Steam sessions, including launch scripts for various emulators (Genesis, PSP, RPCS3, SNES).
- Created systemd service for Gamescope session management.
- Developed Ansible playbook for configuring Fedora for optimized Sunshine and Gamescope streaming, including user setup and system configurations.
- Updated Prometheus configuration to reflect changes in exporter targets.
- Commented out the Devolo exporter module in Terraform configuration for future reference.
This commit is contained in:
2025-10-25 23:54:05 +02:00
parent 161efa5230
commit adc893de6e
18 changed files with 1078 additions and 18 deletions
@@ -0,0 +1,9 @@
#!/bin/bash
set -euo pipefail
LOGFILE="$HOME/.local/logs/jupiter-biosupdate.log"
log() { echo "[$(date --iso-8601=seconds)] $*" | tee -a "$LOGFILE"; }
log "Starting Jupiter BIOS update..."
log "Arguments passed: ${@}"
echo "Not applicable for this OS"
@@ -0,0 +1,39 @@
#!/bin/bash
set -euo pipefail
LOGFILE="$HOME/.local/logs/gamescope.log"
log() { echo "[$(date --iso-8601=seconds)] $*" | tee -a "$LOGFILE"; }
log "Starting Gamescope session..."
CONF_FILE="$HOME/.config/gamescope/gamescope.conf"
[ -f "$CONF_FILE" ] && source "$CONF_FILE"
OUTPUT_CONNECTOR=${OUTPUT_CONNECTOR:-HDMI-A-1}
FRAMERATE=${FRAMERATE:-60}
RESOLUTION=${RESOLUTION:-1920x1080}
WIDTH="${RESOLUTION%x*}"
HEIGHT="${RESOLUTION#*x}"
export __GL_GSYNC_ALLOWED=1
export __GL_VRR_ALLOWED=1
# export __GL_THREADED_OPTIMIZATIONS=1
export __GL_SHADER_DISK_CACHE=1
export __GL_SYNC_TO_VBLANK=0
GAMESCOPE_BIN="$(command -v gamescope || true)"
if [ -z "$GAMESCOPE_BIN" ]; then
log "ERROR: gamescope not found in PATH"
exit 127
fi
HDR_FLAG=""
if [[ "$HDR_ENABLED" == "1" || "$HDR_ENABLED" == "true" || "$HDR_ENABLED" == "yes" ]]; then
HDR_FLAG="--hdr-enabled"
log "HDR flag added: --hdr-enabled"
else
log "HDR disabled, no HDR flag added"
fi
GAMESCOPE_ARGS="--generate-drm-mode fixed --fade-out-duration 200 --cursor-scale-height 720 -f -w $WIDTH -h $HEIGHT --rt --mangoapp -e -O \"$OUTPUT_CONNECTOR\" -r $FRAMERATE $HDR_FLAG"
log "Launching Gamescope: $GAMESCOPE_BIN $GAMESCOPE_ARGS -- /usr/local/bin/launch_steam.sh"
exec "$GAMESCOPE_BIN" ${GAMESCOPE_ARGS} -- /usr/local/bin/launch_steam.sh >>"$LOGFILE" 2>&1
@@ -0,0 +1,112 @@
#!/usr/bin/env bash
set -euo pipefail
LOGFILE="$HOME/.local/logs/steam.log"
export PATH="$HOME/.local/bin:$PATH"
export SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0
# There is no way to set a color space for an NV12
# buffer in Wayland. And the color management protocol that is
# meant to let this happen is missing the color range...
# So just workaround this with an ENV var that Remote Play Together
# and Gamescope will use for now.
export GAMESCOPE_NV12_COLORSPACE=k_EStreamColorspace_BT601
export STEAM_GAMESCOPE_HDR_SUPPORTED=1
# Workaround older versions of vkd3d-proton setting this
# too low (desc.BufferCount), resulting in symptoms that are potentially like
# swapchain starvation.
export VKD3D_SWAPCHAIN_LATENCY_FRAMES=3
# Let's try this across the board to see if it breaks anything
# Helps performance in HZD, Cyberpunk, at least
# Expose 8 physical cores, instead of 4c/8t
export WINE_CPU_TOPOLOGY=8:0,1,2,3,4,5,6,7
# To expose vram info from radv's patch we're including
export WINEDLLOVERRIDES=dxgi=n
# Disable automatic audio device switching in steam, now handled by wireplumber
export STEAM_DISABLE_AUDIO_DEVICE_SWITCHING=1
# Enable support for xwayland isolation per-game in Steam
# export STEAM_MULTIPLE_XWAYLANDS=0
# We have NIS support
export STEAM_GAMESCOPE_NIS_SUPPORTED=1
# Enable tearing controls in steam
export STEAM_GAMESCOPE_TEARING_SUPPORTED=1
# Enable VRR controls in steam
export STEAM_GAMESCOPE_VRR_SUPPORTED=1
# When set to 1, a toggle will show up in the steamui to control whether dynamic refresh rate is applied to the steamui
export STEAM_GAMESCOPE_DYNAMIC_REFRESH_IN_STEAM_SUPPORTED=0
# Don't wait for buffers to idle on the client side before sending them to gamescope
export vk_xwayland_wait_ready=false
# Scaling support
export STEAM_GAMESCOPE_FANCY_SCALING_SUPPORT=1
# Color management support
export STEAM_GAMESCOPE_COLOR_MANAGED=1
export STEAM_GAMESCOPE_VIRTUAL_WHITE=1
# Temporary crutch until dummy plane interactions / etc are figured out
export GAMESCOPE_DISABLE_ASYNC_FLIPS=1
export XCURSOR_THEME=steam
export XCURSOR_SCALE=256
log() { echo "[$(date --iso-8601=seconds)] $*" | tee -a "$LOGFILE"; }
if [ -r /proc/sys/user/max_user_namespaces ]; then
max_ns="$(cat /proc/sys/user/max_user_namespaces || echo 0)"
if [ "${max_ns:-0}" -eq 0 ]; then
log "ERROR: user.max_user_namespaces is 0. Enable it with: sudo sysctl -w user.max_user_namespaces=15000"
exit 1
fi
fi
if command -v bwrap >/dev/null 2>&1; then
bwrap_bin="$(command -v bwrap)"
if ! [ -u "$bwrap_bin" ]; then
# Not fatal if user namespaces are enabled, but warn for visibility
log "WARN: $bwrap_bin is not setuid root. If Steam still fails, run: sudo dnf reinstall bubblewrap && sudo chmod 4755 /usr/bin/bwrap"
fi
else
log "WARN: bubblewrap (bwrap) not found. Steam may fail to start."
fi
if findmnt -no OPTIONS / | grep -qw nosuid; then
log "WARN: root filesystem is mounted nosuid. Setuid helpers like bubblewrap will not work."
fi
STEAM_BIN="$(command -v steam || true)"
if [ -z "$STEAM_BIN" ]; then
log "ERROR: steam not found in PATH"
exit 127
fi
log "Updating steam: /opt/steamcmd/steamcmd.sh +quit"
/opt/steamcmd/steamcmd.sh +quit >>"$LOGFILE" 2>&1 || {
log "ERROR: Steam update failed"
exit 1
}
log "Updating Steam ROM Manager"
srm add >> "$LOGFILE" 2>&1 || log "ERROR: Steam ROM Manager update failed"
STEAM_ARGS=("-steamdeck" "-steamos3" "-steampal" "-gamepadui" "-pipewire-dmabuf")
log "Launching Steam: $STEAM_BIN ${STEAM_ARGS[*]}"
exec steam "${STEAM_ARGS[@]}" &
sleep 5
systemd-run --user --slice=sunshine.slice --scope sunshine >>"$LOGFILE" 2>&1 || {
log "ERROR: Failed to start Sunshine"
exit 1
} &
tail -f /dev/null
@@ -0,0 +1,30 @@
#!/bin/bash
set -euo pipefail
LOGFILE="$HOME/.local/logs/steamos-select-branch.log"
log() { echo "[$(date --iso-8601=seconds)] $*" | tee -a "$LOGFILE"; }
if [[ $# -eq 1 ]]; then
case "$1" in
"-c")
log "Current branch requested"
echo "stable"
exit 0
;;
"-l")
log "Listing available branches"
exit 0
;;
"rel")
log "Legacy branch 'rel' requested"
exit 0
;;
"stable" | "rc" | "beta" | "bc" | "preview" | "pc" | "main" | "staging")
log "Branch '$1' requested"
exit 0
;;
esac
fi
echo "Usage: steamos-select-branch <-c|-l|rel|rc|beta|bc|preview|pc|main>" 1>&2
@@ -0,0 +1,11 @@
#!/bin/bash
set -euo pipefail
LOGFILE="$HOME/.local/logs/steamos-update.log"
log() { echo "[$(date --iso-8601=seconds)] $*" | tee -a "$LOGFILE"; }
log "Starting SteamOS update..."
log "Arguments passed: ${@}"
echo "Not applicable for this OS"
# TODO: Implement SteamOS update logic for now inform no update available
exit 7