Files
steam_linux_launch_args/options.md
T
2026-08-05 20:27:01 +01:00

36 KiB
Raw Blame History

Steam Launch Options — Full Reference

Compiled reference for every tool this project assembles into Steam launch commands: gamescope, Proton (GE/CachyOS), MangoHud, obs-gamecapture, GameMode, and Mesa Vulkan layers. Sources: ValveSoftware/gamescope (README + main.cpp usage), flightlessmango/MangoHud (data/MangoHud.conf), nowrep/obs-vkcapture, FeralInteractive/gamemode, Mesa docs, and the project's own launch_args_env_vars.md / steam-tinker-launcher.md.

The reference config this file started from

LD_PRELOAD="" PROTON_USE_NTSYNC=1 PROTON_ENABLE_WAYLAND=1 ENABLE_LAYER_MESA_ANTI_LAG=1
MANGOHUD=1 gamemoderun obs-gamecapture gamescope --fullscreen -w 1920 -W 1920 -h 1080
-H 1080 -r 165 --immediate-flips --nested-unfocused-refresh 30 --sharpness 20
--force-grab-cursor --backend wayland -- env LD_PRELOAD="$LD_PRELOAD" %command%

Annotated: envs → gamemoderun (outermost) → obs-gamecapturegamescope (inner wrapper, its own -- separator) → env LD_PRELOAD=... %command%. Everything before the first -- applies to gamescope itself; %command% is the game.


1. gamescope

Usage: gamescope [options...] -- [command...]. Options before -- configure the compositor; everything after runs inside it.

General

Option Meaning
-W, --output-width, -H, --output-height Resolution gamescope outputs at (default 1280×720). Ignored in embedded mode.
-w, --nested-width, -h, --nested-height Resolution the game renders at (defaults to -W/-H).
-r, --nested-refresh Frame-rate limit for the game (e.g. -r 165).
-m, --max-scale Maximum scale factor.
-S, --scaler Upscaler type: auto, integer, fit, fill, stretch.
-F, --filter Upscale filter: linear, nearest, fsr (FSR 1.0), nis (NIS 1.0.3), pixel.
--sharpness, --fsr-sharpness Upscaler sharpness 0 (max) to 20 (min). Affects FSR/NIS.
--expose-wayland Accept Wayland clients (xdg-shell).
-s, --mouse-sensitivity Multiply mouse movement by a decimal (e.g. -s 1.0).
--backend Rendering backend: auto (default), drm (standalone session), sdl, openvr, headless, wayland.
--mangoapp Launch the MangoHud mangoapp overlay inside gamescope (prefer over mangohud on the game).
--adaptive-sync Enable adaptive sync / VRR if available.

Nested mode

Option Meaning
-o, --nested-unfocused-refresh Game refresh rate when the window is unfocused (e.g. 30). Note: does not work on the Wayland backend.
-b, --borderless Borderless window.
-f, --fullscreen Fullscreen window.
-g, --grab Grab the keyboard.
--force-grab-cursor Always use relative mouse mode regardless of cursor visibility.
--display-index Force a specific display in nested mode.

Embedded mode

Option Meaning
-O, --prefer-output Connectors in preference order (e.g. DP-1,DP-2,HDMI-A-1).
--default-touch-mode Touch mode: 0 hover, 1 left, 2 right, 3 middle, 4 passthrough.
--generate-drm-mode DRM mode generation algorithm: cvt, fixed.
--immediate-flips Immediate flips (may tear).
--framerate-limit Hard FPS limit for the embedded session (steamcompmgr-style).

HDR

Option Meaning
--hdr-enabled Enable HDR output.
--hdr-wide-gammut-for-sdr Wide gamut for SDR content.
--hdr-sdr-content-nits Assumed SDR content brightness (e.g. 400).
--hdr-itm-enable Inverse tone mapping for SDR content.
--hdr-itm-sdr-nits, --hdr-itm-target-nits ITM input/output brightness (e.g. 100 / 1000).

VR (OpenVR backend)

Option Meaning
--openvr Run as an OpenVR session.
--vr-overlay-show-immediately Show overlay immediately.
--vr-overlay-enable-control-bar / -keyboard / -close Control bar + keyboard/close shortcuts.
--vr-overlay-modal Modal overlay.
--vr-scrolls-speed Scroll speed (e.g. 8.0).
--vr-overlay-key, --vr-app-overlay-key Overlay key / per-app key.
--vr-overlay-explicit-name, --vr-overlay-default-name Overlay names.
--vr-overlay-icon Overlay icon path.

Debug / misc

Option Meaning
--debug-hud Show gamescope's internal debug HUD.
--force-composition Always composite (disable direct flips).
--rt Realtime scheduling.
--headless Headless backend.
--prefer-vk-device Prefer a specific Vulkan device (e.g. %{VK_DEVICE}%).
--disable-layers, --debug-layers Disable / debug Vulkan layers.
--allow-deferred-backend Allow the backend to start deferred.
--keep-alive Keep the session alive after the app exits.
--expose-wayland (see General)

Also: GAMESCOPE_* env vars exist for embedded-session behavior; the STL doc steam-tinker-launcher.md §3.13.6 has the full catalog incl. legacy flags (-i, -n, -U, -Y = older GameScope filter flags, deprecated).


2. Proton (GE / CachyOS)

Run with binary=proton suffix=waitforexecandrun — all toggles are env vars. Full per-variant tables in launch_args_env_vars.md; highlights:

Env var Meaning
PROTON_LOG=1 Write a debug log to steam-<appid>.log.
PROTON_USE_NTSYNC=1 / PROTON_NO_NTSYNC=1 Force / disable ntsync.
PROTON_USE_WINED3D=1 OpenGL backend instead of DXVK.
PROTON_NO_D3D12/11/10/9=1 Disable a D3D version.
PROTON_NO_ESYNC=1, PROTON_NO_FSYNC=1 Disable esync / fsync.
PROTON_ENABLE_WAYLAND=1 Use the Wayland driver (no XWayland).
PROTON_ENABLE_NVAPI=1 / PROTON_DISABLE_NVAPI=1 NVIDIA API support (GE / CachyOS).
PROTON_FSR4_UPGRADE=1, PROTON_DLSS_UPGRADE=1, PROTON_XESS_UPGRADE=1 FSR4 / DLSS / XESS frame-gen upgrades (FSR4 = AMD 7xxx+).
PROTON_FSR3_UPGRADE=1, PROTON_MLFG_UPGRADE=1, PROTON_FFX3_UPGRADE=1, PROTON_FFX4_UPGRADE=1 Other upscale upgrades (CachyOS).
WINE_FULLSCREEN_FSR=1 (+ WINE_FULLSCREEN_FSR_STRENGTH=2) Wine fullscreen FSR.
WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER=1 Fix miscolored video.
PROTON_USE_SECCOMP=1, PROTON_NO_WRITE_WATCH=1, PROTON_HEAP_DELAY_FREE=1 Compatibility shims.
PROTON_USE_WOW64=1 New WoW64 prefix mode.
PROTON_ENABLE_MEDIACONV=1, PROTON_MEDIA_FORCE_GST=1 Media Foundation via GStreamer.
PROTON_USE_XALIA=1/0 Enable/disable the Xalia gamepad→keyboard bridge.
PROTON_USE_SDL=1 / PROTON_PREFER_SDL=1 SDL input path.
DXVK_HDR=1 / DXVK_NO_HDR=1 HDR on/off (CachyOS).
DXVK_NVAPI_VKREFLEX=1, LOW_LATENCY_LAYER=1 NVIDIA Reflex / low-latency layer (CachyOS).
PROTON_NVIDIA_LIBS=1 (+ _NO_32BIT, NVCUDA, NVENC, NVML, NVOPTIX) NVIDIA library set (CachyOS).
PROTON_USE_D9VK=1, PROTON_DXVK_SAREK=1, PROTON_DXVK_LOWLATENCY=1, PROTON_D7VK_DDRAW=1 Alternative D3D translation (CachyOS).
PROTON_DISCORD_BRIDGE=1 Discord Rich Presence bridge (CachyOS).

The app exposes these as checkbox toggles under the Proton tabs (categories: Debug / Performance / Graphics / Compatibility / NVIDIA / Upscaling / Input / Display / Audio / HDR / Media / Integration).


3. MangoHud

Enable with MANGOHUD=1 (Vulkan/OpenGL) or by wrapping the command with mangohud <cmd> (GL). Config lives in ~/.config/MangoHud/MangoHud.conf; everything below is also settable via MANGOHUD_CONFIG (comma-separated, e.g. MANGOHUD_CONFIG=fps_limit=60,fps,gpu_stats).

Config param Meaning
fps_limit=N Limit FPS (comma list e.g. 0,30,60; 0 = unlimited).
fps_limit_method= early (wait before present) / late (wait after).
vulkan_present_mode= Override present mode: immediate, mailbox, fifo, fifo_relaxed, shared_demand_refresh, shared_continuous_refresh, fifo_latest_ready.
vsync=N Force vsync on/off.
fps, gpu_stats, gpu_temp, gpu_core_clock, gpu_mem_clock, gpu_mem_temp, gpu_power, gpu_load_change, gpu_fan, gpu_voltage GPU readouts (misc info).
cpu_stats, cpu_temp, cpu_power, ram, vram, io_stats, frametime CPU/memory/IO stats.
frame_timing, frame_timing_detailed, dynamic_frame_timing, histogram Frametime graphs.
gamemode Show GameMode active status.
fsr / hide_fsr_sharpness Show FSR status (gamescope only).
debug Gamescope app frametime/latency graph.
show_fps_limit, resolution, display_server, engine_version, wine, winesync, arch Misc display toggles.
custom_text=, exec= Custom text / shell-command output column.
media_player Spotify/media metadata.
toggle_hud=, toggle_hud_position=, toggle_preset=, toggle_fps_limit=, toggle_logging=, reload_cfg=, upload_log= Keybinds (e.g. Shift_R+F12).
autostart_log=, log_duration=, log_interval=, log_upload=, log_sync= Benchmark logging.
graphs= Which graphs to show (gpu_load,cpu_load,gpu_core_clock,gpu_mem_clock,vram,ram,cpu_temp,gpu_temp).

Env vars: MANGOHUD_CONFIG, MANGOHUD_CONFIGFILE, MANGOHUD_PRESETSFILE. mangoapp = standalone overlay for Steam/gamescope sessions.

The app exposes: MANGOHUD=1 (Enable overlay), fps_limit=60, fps.


4. obs-gamecapture

Binary wrapper from obs-vkcapture. Enables OBS "Game Capture" sources to see the game.

Option / env Meaning
--width W, --height H Capture resolution.
--rate N Capture frame rate.
--no-sound Disable audio capture.
OBS_FORCE_GAMECAPTURE=1 Force game-capture path.
OBS_NO_GAMECAPTURE=1 Disable game-capture detection.
OBS_NO_XLIB=1, OBS_NO_XSHM=1, OBS_NO_VKCAPTURE=1 Disable specific capture paths.
OBS_VKCAPTURE=1 Enable the Vulkan capture layer (native games).
OBS_VKCAPTURE_NAME= Override the app name reported to OBS for window matching.

OBS-side (Game Capture source): window matching (any / specific app / any except), cursor capture (X11 + Wayland), transparency.


5. GameMode

gamemoderun %command% (or gamemoderun ./game) requests the gamemoded daemon switch to the performance profile for the process tree. Legacy pre-1.3 form: LD_PRELOAD="$LD_PRELOAD:/usr/$LIB/libgamemodeauto.so.0" %command%.

Env / config Meaning
GAMEMODERUNEXEC="cmd" Extra command gamemoderun executes.
~/.config/gamemode.ini [general] desired_gov (governor override), reaper_freq, defaultgov.
[gpu] apply_gpu_optimisations, gpu_device, amd_performance_level=high, nv_powermizer_mode=1.
[cpufreq] min_freq, max_freq, governor=performance.
[core] park_cores=no.
[custom] start=, end= commands run on mode start/stop.

6. Mesa Vulkan layers (AMD)

Layers shipped with Mesa (-D vulkan-layers=... build option); enable with env vars. Some distros (e.g. CachyOS, mesa-git) ship extra ones as mesa-vulkan-layers.

Env var Layer Meaning
ENABLE_LAYER_MESA_ANTI_LAG=1 anti-lag (VK_AMD_anti_lag, Mesa 25.3+) AMD CPU-side latency pacing (Anti-Lag-style). Vulkan 1.3.281+. AMD GPUs only.
VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay (or VK_INSTANCE_LAYERS=VK_LAYER_MESA_overlay) overlay Built-in Vulkan HUD: fps, frametimes, GPU/CPU stats.
VK_LAYER_MESA_OVERLAY_CONFIG=position=top-left,submit,draw,... overlay Overlay content config: fps, frametime, submit, draw, pipeline_graphics, pipeline_compute, queue_ops, position=... (run with help for the list).
MESA_VK_DEVICE_SELECT=list / vid:did device-select Pick the Vulkan device (e.g. MESA_VK_DEVICE_SELECT=1002:747e); append ! to force.
ENABLE_LAYER_MESA_FPS_MONITOR=1 fps-monitor Vsync/FPS rate limiting layer (CachyOS mesa-git).

Notes: anti-lag needs the layer present in the runtime (Flatpak Mesa misses it); it only applies to AMD RADV and requires VK_AMD_anti_lag support in the game or translation layer. MESA_VK_DEVICE_SELECT is the stable way to pin a GPU for multi-GPU setups.


7. DXVK (D3D9/10/11 → Vulkan)

Translation layer inside Proton. Env vars set per-launch; the config-file options (dxvk.conf / DXVK_CONFIG=...) are its “args”. dxvk.conf is read from the game's working directory; DXVK_CONFIG_FILE overrides the path.

Env vars

Env var Meaning
DXVK_HUD=... HUD elements, comma-separated (see below). 1 = devinfo,fps; full = all.
DXVK_LOG_LEVEL=none|error|warn|info|debug Log verbosity (stderr).
DXVK_LOG_PATH=dir Write app_d3d11.log etc. to a directory; none disables files.
DXVK_SHADER_CACHE=0 Disable the internal shader cache.
DXVK_SHADER_CACHE_PATH=dir Shader cache location (default %LOCALAPPDATA%/dxvk / $XDG_CACHE_HOME).
DXVK_FILTER_DEVICE_NAME="Name" Pick GPU by Vulkan device name substring (e.g. VEGA).
DXVK_FILTER_DEVICE_UUID=32-hex Pick GPU by device UUID (vulkaninfo).
DXVK_CONFIG_FILE=path Point at an explicit dxvk.conf.
DXVK_CONFIG="opt = val; opt2 = val" Set config options inline (; separates).
DXVK_DEBUG=capture|hang|markers|validation Debug modes (hang = GPU-hang detection, markers = debug utils, …).
DXVK_WSI_DRIVER=SDL3|SDL2|GLFW Backend selector for DXVK Native builds.
VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation Vulkan validation layers (debugging).

DXVK_HUD elements: devinfo, fps, frametimes, submissions, drawcalls, pipelines, compiler, samplers (D3D9), swvp (D3D9), scale=x (e.g. 1.5), opacity=y (e.g. 0.5).

Config options (the “args”)

Option Meaning
dxvk.hud = ... Same as DXVK_HUD (ignored when the env var is set).
dxvk.numCompilerThreads = N Pipeline-compiler threads; 0 = use all CPU cores.
dxvk.enableAsync = True Asynchronous pipeline compilation (reduces stutter in shader-heavy games).
dxvk.useRawSsbo = True Raw SSBOs for buffer views (default on supported hardware).
dxvk.enableGraphicsPipelineLibrary = True GPL shader pre-compilation (drivers with VK_EXT_graphics_pipeline_library).
dxvk.enableMemoryDefrag = True Defragment VRAM.
dxvk.enableDescriptorHeap = True Split descriptor heaps (newer path).
dxvk.enableDebugUtils = True Debug-utils integration.
dxgi.syncInterval = 0 Disable vsync (D3D11 present).
dxgi.hideAmdGpu = True Hide the AMD GPU from the app (multi-GPU).

Full option list: https://github.com/doitsujin/dxvk/wiki/Configuration


8. vkd3d-proton (D3D12 → Vulkan)

Env vars only (no CLI); debug-oriented, may change between versions.

Env var Meaning
VKD3D_CONFIG=... Comma/semicolon-separated behavior flags (see below).
VKD3D_LOG_LEVEL=none|error|warn|info|trace Log verbosity.
VKD3D_FRAME_RATE=N Frame-rate limit; 0 uncaps.
VKD3D_SWAPCHAIN_PRESENT_MODE=MODE Force present mode: IMMEDIATE, MAILBOX, FIFO, FIFO_RELAXED, FIFO_LATEST_READY.
VKD3D_SHADER_CACHE_PATH=dir DXBC/DXIL→SPIR-V shader cache location; 0 disables.
VKD3D_PROFILE_PATH=path CPU profiling output (profiled builds only).

VKD3D_CONFIG flags: vk_debug (validation layer), nodxr (disable DXR), dxr (force DXR even when unsafe), dxr12 (experimental DXR 1.2), force_static_cbv (NVIDIA speed hack), single_queue (no async queues), no_upload_hvv (block host-visible VRAM for uploads), pipeline_library_app_cache, skip_application_workarounds, breadcrumbs, descriptor_qa_checks (debug).


9. Wine core env vars (also work under Proton)

Proton ships Wine; these env vars apply to the whole prefix.

Env var Meaning
WINEPREFIX=path Wine prefix directory (default ~/.wine); all Wine processes of a prefix share wineserver.
WINEDLLOVERRIDES="dll=n,b;..." DLL load order: n native, b builtin (e.g. dxgi=n, dinput8=n,b).
WINEDEBUG=... Debug channel control (e.g. -all, +d3d).
WINE_CPU_TOPOLOGY=N:list Expose N physical cores to the game (e.g. 8:0,1,2,3,4,5,6,7 — Steam Deck uses this).

Note: esync/fsync are built into Proton (toggled via PROTON_NO_ESYNC / PROTON_NO_FSYNC); upstream Wine also accepts WINEESYNC=1 / WINEFSYNC=1.


10. NVIDIA PRIME render offload (hybrid laptops)

Forcing the discrete NVIDIA GPU. Env vars only — no args; the prime-run wrapper command sets all three. Needs driver 435.17+.

Env var Meaning
__NV_PRIME_RENDER_OFFLOAD=1 Offload rendering to the PRIME GPU.
__GLX_VENDOR_LIBRARY_NAME=nvidia OpenGL path (GLX).
__VK_LAYER_NV_optimus=NVIDIA_only Vulkan path (via the Optimus layer).

Usage: prime-run %command% or inline: __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only %command%. Combined with gamemode: gamemoderun prime-run %command%.


11. gamescope — SteamOS session env vars + extra CLI

Env vars (Steam/SteamOS session integration)

From the Steam Deck gamescope-session script (HoloISO/SteamOS); these tell Steam/gamescope which session capabilities exist or control the session:

Env var Meaning
STEAM_GAMESCOPE_VRR_SUPPORTED=1 Advertise VRR controls in Steam.
STEAM_GAMESCOPE_TEARING_SUPPORTED=1 Enable tearing controls in Steam.
STEAM_GAMESCOPE_HAS_TEARING_SUPPORT=1 Gamescope tearing via GAMESCOPE_ALLOW_TEARING.
STEAM_GAMESCOPE_DYNAMIC_FPSLIMITER=1 Mesa fifo-based dynamic FPS limiter.
STEAM_GAMESCOPE_COLOR_TOYS=1 Gamma/degamma exponent support in Steam.
STEAM_GAMESCOPE_NIS_SUPPORTED=1 Advertise NIS upscaling.
STEAM_GAMESCOPE_DYNAMIC_REFRESH_IN_STEAM_SUPPORTED Dynamic refresh toggle in the steamui.
STEAM_DISPLAY_REFRESH_LIMITS=40,60 Refresh-rate range + switching (e.g. Deck 40 Hz mode).
STEAM_USE_DYNAMIC_VRS=1 Dynamic VRS (with RADV_FORCE_VRS_CONFIG_FILE).
STEAM_MULTIPLE_XWAYLANDS=1 Per-game XWayland isolation.
STEAM_USE_MANGOAPP=1 mangoapp overlay in session.
STEAM_MANGOAPP_HORIZONTAL_SUPPORTED=1 Horizontal mangoapp bar.
GAMESCOPE_MODE_SAVE_FILE=path Mode-save file (res/refresh modes).
GAMESCOPE_NV12_COLORSPACE=... NV12 colorspace for RPT (e.g. k_EStreamColorspace_BT601).
GAMESCOPE_LIMITER_FILE=path Callback-based FPS limiter file.
GAMESCOPE_STATS=path / GAMESCOPE_WAYLAND_DISPLAY= Session stats pipe / Wayland display set by gamescope.

Extra CLI flags (beyond §1)

Option Meaning
--xwayland-count N Number of XWayland servers (e.g. 2 on Deck).
--hide-cursor-delay ms Hide the cursor after N ms of inactivity (e.g. 3000).
--fade-out-duration ms Fade-to-black duration on startup (e.g. 200).
--force-orientation VALUE Panel orientation: left, right, upside_down.
--cursor PATH --cursor-hotspot x,y Custom cursor image + hotspot (per-user path — skip in presets).
-R socket / -T stats-pipe Session startup socket / stats pipe (used by SteamOS session).

Keyboard shortcuts (nested session): Super+F fullscreen, Super+N nearest-neighbour, Super+U FSR, Super+Y NIS, Super+I/Super+O FSR sharpness ±1, Super+S screenshot, Super+G keyboard grab.


12. Steam launch-option syntax

  • Steam runs the launch options with /bin/sh; %command% is substituted with the actual game command (must appear exactly once, at the end).
  • Env assignments prefix the command: VAR=1 VAR2=x gamescope ... -- %command%.
  • Wrappers chain left → right, outermost first: gamemoderun prime-run gamescope -r 60 -- %command% (gamemode outermost, gamescope innermost).
  • -- separates the wrapper's own args from the wrapped command (gamescope, obs-gamecapture). Without a wrapper, %command% alone is valid.
  • Example: gamescope -h 720 -H 1440 -S integer -- %command% (720p→1440p integer scale); gamescope -r 30 -- %command% (FPS limit).
  • Linux-only env vars (DXVK/vkd3d/Proton) have no effect on Windows builds of the same game.

Sources