Steam Deck & Linux Native Vulkan Guide

Astral Chain Recomp ships as a native 64-bit Linux executable packaged inside Astral-Chain-Setup-1.18.0-x86_64.AppImage (243,231,224 B). Instead of running Windows binaries through Wine or Proton, it talks directly to SDL3, PipeWire/ALSA, and Mesa RADV or NVIDIA Vulkan 1.3 drivers, automatically applying dedicated memory and resolution defaults when a Steam Deck LCD (Jupiter) or OLED (Galileo) board is detected.

Zero ProtonNative ELF binary over SDL3 & Mesa RADV
75%-87% Less VRAMAutomatic BC1 ASTC re-encode & mip skip
16:10 Full Screen720p render grid + aspect = wide on 1280x800
Portable x86_64 handheld gaming devices running native Linux Vulkan ports on 16:10 displays
When device_profile = auto sees SteamDeck=1 or Valve Jupiter/Galileo DMI strings, it configures 1280x720 internal rendering, BC1 texture compression, and handheld UI scaling.

Automatic device_profile = deck settings explained

In runtime/cfg.c, device_profile = auto checks SteamDeck=1 and /sys/class/dmi/id/board_name for Jupiter or Galileo, switching 15 defaults before the first frame.

INI KeySteam Deck DefaultDesktop DefaultWhy It Matters on Handhelds
[display] window_size & output_res1280x800 / 1280x7201920x1080 / 1920x1080Internal render targets must stay on the 16:9 32n x 18n grid (1280x800 loses the Vulkan device); aspect = wide expands the camera to fill the 16:10 panel.
[frame rate] fps & vk_present30 / fifo60 / mailboxPaces cleanly against the Deck compositor for battery life; switch fps = 60 live in F1 when plugged in or using FSR 3.
[performance] astc_bc & tex_mip_skipbc1 / 1024auto / 0Re-encodes opaque 4x4/6x6/8x8 ASTC textures to BC1 (4 bpp) and drops top mips above 1024px (~200 MiB saved) to stay inside the shared 16 GB APU pool.
[performance] tex_cache_mb & tex_vram_pressure512 / 70 (%)0 (unlimited) / 85 (%)Caps resident texture memory and starts background eviction early before SteamOS triggers an out-of-memory reset.
[display] shadow_res, shadow_scale, aniso512 / 1 / gamegame / 2 / auto (16x)Halves local shadow maps and keeps the 2048x2048 sun map at 1x to conserve RDNA 2 bandwidth.
[performance] cpu_boost0 (disabled on Deck)auto (enabled on Linux PC)Deck CPU and GPU share one APU power budget; pinning CPU clocks high starves the RDNA 2 GPU during heavy particle combat.

Installing in SteamOS Desktop Mode & Gaming Mode

Download Astral-Chain-Setup-1.18.0-x86_64.AppImage in Desktop Mode, verify its SHA-256 hash (0427ce5bff08449c...), and make it executable via chmod +x (or Dolphin -> Properties -> Permissions). Run the AppImage, choose your 1.0.0 base, 1.0.1 update, and prod.keys, and install to an ext4 path with at least 25 GiB free. Afterward, right-click the generated astralchain binary inside your install folder and choose Add to Steam (do not force Proton compatibility!).

Docked 1080p play & Mesa RADV shader caches

When docking your Steam Deck to a 1080p or 4K TV, press F1 -> Display (or edit astralchain.ini) to set output_res = 1920x1080, operation_mode = docked, and upscaling = fsr3 (balanced or quality). Note that SteamOS updates Mesa RADV frequently and gives each non-Steam shortcut its own MESA_SHADER_CACHE_DIR; the port tracks the driver version in shader-prepared-driver.txt, and you can pre-warm manually anytime with ./astralchain --warm-shaders.

Desktop Linux x86_64, Wayland & RDNA 2 notes

Arch, Fedora, Ubuntu, Bazzite, CachyOS, and Nobara run the exact same native x86_64 build without Wine overhead.

Wayland & HDR10

Wayland Frame Pacing Fix

Release 1.7.1 eliminated an extra compositor frame delay under Linux Wayland sessions, cutting input latency and lifting frame rate. On KDE Plasma 6 or GNOME Wayland sessions with color management active, hdr = 1 exposes full 10-bit HDR10 output.

cpu_boost = auto

Governor & Uclamp Hinting

Desktop Linux defaults to powersave or ondemand governors that down-clock between short bursts of Horizon worker threads. cpu_boost = auto requests performance via power-profiles-daemon or tuned-ppd, sets kernel utilization clamp, and uses 1 ms thread polling.

FSR 3 & Handheld Sleep

Built-in FSR 3 & Sleep Resume

Because NVIDIA NGX and Intel XeSS DLLs in this port are Windows-only, set upscaling = fsr3 on Linux for sharp temporal AA and upscaling. On ROG Ally / Bazzite handhelds, save at intermissions before deep suspend (tracked upstream in issue #108).

Generate a Steam Deck or Linux astralchain.ini

Pre-configured below with the Steam Deck / Linux Handheld hardware profile, 1280x800 (16:10) display mode, and 30 FPS Battery Saver preset; switch to Balanced 60 FPS + FSR 3 for plugged-in sessions.

Generated astralchain.ini
# astralchain.ini - place next to astralchain.exe (or astralchain on Linux)
[frame rate]
fps = 60
realtime = 1
cloth_realtime = 1
highfps_fix = 1

[performance]
async_preempt = 1
free_cores = 0
timer_1ms = 1
astc_bc = auto
tex_mip_skip = 0
gpl = 1
vk_recorder = 1
vk_dyn_a2c = 1

[display]
device_profile = desktop
fullscreen = 1
window_size = 2560x1440
output_res = 2560x1440
aspect = wide
upscaling = dlss
upscaling_quality = quality
anti_aliasing = smaa
ao = gi
aniso = auto
shadow_scale = 2
draw_distance = 150
hdr = 0

[language]
operation_mode = docked
menu_lang = en

[input]
pad_layout = auto
prompts = auto
motion = 1
rumble = 1
rumble_strength = 130
rumble_triggers = 0
stick_deadzone = 8
AC_* overrides & shader warm
# Place NVIDIA DLSS SDK nvngx_dlss.dll next to astralchain.exe:
copy nvngx_dlss.dll "Astral Chain
vngx_dlss.dll"

# Optional AC_* environment overrides (override astralchain.ini for one run):
AC_FPS=60 AC_UPSCALING=dlss AC_AO=gi ./astralchain

# Rebuild driver shader cache after a GPU driver update:
astralchain.exe --warm-shaders

# In-game shortcuts:
# F1: Settings menu | F10 (or L+R then -/+): Perf overlay | F11: Fullscreen | F12: No-HUD

Keep output_res on a 16:9 32n x 18n grid (1280x720, 1920x1080, 2560x1440, 3840x2160); aspect = wide expands the camera to 16:10, 21:9, or 32:9 without losing the Vulkan device.

Controllers for dual-stick Legion combat

Astral Chain Recomp uses SDL3 for low-latency gamepad input, rumble curves, gyro aiming, back paddles, and automatic Xbox or PlayStation prompt detection.

8BitDo Ultimate 2C Wireless Controller

Hall-effect sticks and L4/R4 bumpers with low-latency 2.4G dongle for 60 FPS Sync Attacks and Legion positioning.

View on Amazon

GameSir Super Nova Hall-Effect Gamepad

Drift-free Hall sticks, physically swappable ABXY faceplates (pad_layout = xbox or nintendo), and motion gyro via SDL3.

View on Amazon

8BitDo Pro 2 Bluetooth Gamepad

Symmetrical dual-stick layout with Switch/X-Input modes, motion aiming for Bow Legion, and rear paddles (`lpaddle1`/`rpaddle1`).

View on Amazon

GuliKit KK3 Max Wireless Controller

TMR electromagnetic sticks and 1000 Hz polling for tight 360-spin and Perfect Dodge input windows on Windows and Linux.

View on Amazon

Affiliate disclosure: As an Amazon Associate, astralchainrecomp.wiki earns from qualifying purchases at no added cost to you.

Steam Deck & Linux Vulkan questions

Native ELF execution, 16:10 aspect handling, rear paddles, and FUSE2 tips.

Should I enable Proton Experimental when adding astralchain to Steam on Steam Deck?

No! Leave Force the use of a specific Steam Play compatibility tool unchecked. Astral-Chain-Setup-1.18.0-x86_64.AppImage produces a native Linux x86_64 ELF binary (astralchain) that runs faster and cleaner directly on SteamOS than the Windows .exe under Proton.

Why did my old Steam Deck config switch from 1920x1080 to 1280x720 after updating?

Installations created before release 1.7.1 wrote desktop 1080p defaults onto Steam Deck, overloading the APU. On first boot of 1.7.1+, a one-time migration (deck_res_migrated = 1) resets output_res to 1280x720 and window_size to 1280x800; any manual changes you make afterward stick.

How do I map the Steam Deck L4, R4, L5, and R5 rear grip buttons?

Either assign L4-R5 to game actions inside Steam Input per-game controller settings, or bind them directly in astralchain.ini under [input] using SDL3 paddle tokens: pad:lpaddle1, pad:rpaddle1, pad:lpaddle2, and pad:rpaddle2.

What packages are needed if an AppImage refuses to mount on minimal Ubuntu or Arch?

Standard AppImage v2 runtimes load libfuse.so.2. Install fuse2 (Arch/CachyOS) or libfuse2t64 (Ubuntu 24.04+), or extract and run without FUSE via ./Astral-Chain-Setup-1.18.0-x86_64.AppImage --appimage-extract-and-run.