4.0 KiB
Native arm64 Steam client: channel and runtime
The default client is Valve's arm64 Linux build (steamrtarm64/steam). Valve does not support it, but
publishes it on the Steam Deck client channels. droiddeck-steam-install installs it and
droiddeck-session starts it with STEAM_RUNTIME=1.
Channel
- The default is
steamdeck_publicbeta(manifeststeam_client_steamdeck_publicbeta_linuxarm64). Valve also publishessteam_client_steamdeck_stable_linuxarm64. droiddeck-steam-install --channelprints the channel in use. The session passes that value as-clientbetaand writes it topackage/beta. The two must match, or the client loops on rc 42.- Setting:
BL_STEAM_CHANNEL, otherwise~/.config/droiddeck/steam-channel, set tobetaorstable. A set channel never changes on its own. - With no setting, the client falls back to
steamdeck_stableautomatically. It stays on stable (package/droiddeck-channel) until a setting says otherwise. The fallback happens:- when the client was started two more times without being shown after the start-failure repair
(
package/droiddeck-unconfirmed: two unconfirmed starts trigger a repair, which writesrepaired; two more unconfirmed starts trigger the fallback); - when the beta manifest has no
*_linuxarm64_linuxarm64component. The install log then lists the manifest's block names, so a renamed or removed arm64 build can be seen.
- when the client was started two more times without being shown after the start-failure repair
(
- The x86-64 client keeps
steamdeck_publicbeta(see x86-64-steam-client.md).
Steam Runtime container
Valve's 2026-10-15 beta made the x86 Linux client 64-bit and put it in a Steam Runtime container (pressure-vessel). The container needs unprivileged user and mount namespaces and a D-Bus session bus, which an Android app does not have. The x86-64 path already works around this. The arm64 client gets the same treatment if Valve containerizes it too:
-
STEAM_STEAMRT_RECURSION_GUARD=1is exported for both clients. It tells the client that it is already inside its container, so after an update it does not re-execute itself throughpressure-vessel-wrap(bwrap). -
droiddeck-steamrt-shim <client dir> <shim dir>builds the shim when the client carriespv-runtime/steam-runtime-steamrtor asteam-runtime-check-requirementsprobe:- Valve's runtime is linked file by file;
- the probe is replaced with
exit 0; - its own
steam-runtime-launch-clientruns commands directly.
For the arm64 client the session then starts it with
STEAM_RUNTIME_STEAMRTandPATHpointing at~/.droiddeck-steamrt-shimand logs "Valve containerized the arm64 Steam client". Without those files the shim is not built and the start is unchanged.
What Valve's manifests carry (checked 2026-10-22)
steam_client_steamdeck_publicbeta_linuxarm64(1792626604) andsteam_client_steamdeck_stable_linuxarm64(1792618285) have the same blocks. Three platforms share them:*_linuxarm64_linuxarm64: the native client (steamrtarm64/,linuxarm64/). No pressure-vessel, nosteam-runtime-check-requirements. These are the only platform blocks the installer keeps.*_steamrt_linuxarm64: Valve's x86-64 SteamRT 3c client (steamrt64/steamis an x86-64 ELF) withsteamrt64/pv-runtime/steam-runtime-steamrt(pressure-vessel,steam-runtime-check-requirements,steam-runtime-launch-client). This is the containerized client the 2026-10-15 beta made the default on x86. Valve ships it to arm64 hosts as well, presumably to run under FEX. The installer skips it.bins_androidarm64_linuxarm64:androidarm64/libsteamclient.so,steamservice.soand friends.
steam_client_steamdeck_publicbeta_ubuntu12has stopped at 1792108788, while stableubuntu12follows stable (1792618285). On beta the 32-bitubuntu12client no longer gets updates.- If a future manifest drops
*_linuxarm64_linuxarm64, the installer logs the block list and moves to stable. If stable drops it too, the remaining option is the x86-64 client under FEX (x86-64-steam-client.md).