aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-03-17 21:41:31 -0500
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-03-17 21:41:31 -0500
commit412eda0369cb89c8fed871d46227bbe671c4fd68 (patch)
tree4a85a660410635e55e711544b163ea24e1bbc114 /docker
parent2efc7e6124ef814ac9abd874bff0dc6b3e6768d0 (diff)
Fix Steam game mode: strip LD_PRELOAD, robust looksValid(), restore env for games
Steam injects 32-bit gameoverlayrenderer.so via LD_PRELOAD which causes "wrong ELF class" errors for 64-bit Qt6 apps. Save and clear LD_PRELOAD in both launcher and AppRun scripts, restore it in ProtonLauncher for game processes. Also hardens looksValid() with QFileInfo::exists() for absolute paths (QDir::exists() has edge cases with relative subdirectory paths), adds case-insensitive directory walking fallback, and adds debug logging to both looksValid() and detectGame(). Adds ~/.steam/debian-installation to Python steam_utils.py candidates. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'docker')
-rwxr-xr-xdocker/build-inner.sh10
1 files changed, 10 insertions, 0 deletions
diff --git a/docker/build-inner.sh b/docker/build-inner.sh
index 484412b..2d32e31 100755
--- a/docker/build-inner.sh
+++ b/docker/build-inner.sh
@@ -362,10 +362,16 @@ HERE="$(cd "$(dirname "$SELF")" && pwd)"
# Without this, our bundled LD_LIBRARY_PATH leaks into game processes and
# causes library conflicts.
export FLUORINE_ORIG_LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}"
+export FLUORINE_ORIG_LD_PRELOAD="${LD_PRELOAD:-}"
export FLUORINE_ORIG_PATH="${PATH}"
export FLUORINE_ORIG_XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
export FLUORINE_ORIG_QT_PLUGIN_PATH="${QT_PLUGIN_PATH:-}"
+# Steam injects 32-bit gameoverlayrenderer.so via LD_PRELOAD which causes
+# "wrong ELF class" errors for 64-bit Qt6 apps (see PrismLauncher #3421).
+# Clear it for our process; game launches restore via FLUORINE_ORIG_LD_PRELOAD.
+unset LD_PRELOAD
+
# ── Sync entire app to ~/.local/share/fluorine/bin/ ──
# This gives instances a stable symlink target that won't break if the user
# moves or deletes the original tarball extraction directory.
@@ -630,10 +636,14 @@ BIN="${HERE}/usr/bin"
APPIMAGE_DIR="$(dirname "$(readlink -f "${APPIMAGE:-$0}")")"
export FLUORINE_ORIG_LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}"
+export FLUORINE_ORIG_LD_PRELOAD="${LD_PRELOAD:-}"
export FLUORINE_ORIG_PATH="${PATH}"
export FLUORINE_ORIG_XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
export FLUORINE_ORIG_QT_PLUGIN_PATH="${QT_PLUGIN_PATH:-}"
+# Steam injects 32-bit gameoverlayrenderer.so via LD_PRELOAD — clear it.
+unset LD_PRELOAD
+
export PATH="${BIN}:${PATH}"
# Replace (not append) LD_LIBRARY_PATH — Steam game mode injects its runtime
# libs which break Python/Qt. RPATH handles the binary's own deps.