adc893de6e
- 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.
112 lines
3.6 KiB
Bash
112 lines
3.6 KiB
Bash
#!/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 |