From 9c74e62adfe8bc0b88c946d562f06cab26e5fbe1 Mon Sep 17 00:00:00 2001 From: Brandon Pendleton <22108519+bitbucket90@users.noreply.github.com> Date: Tue, 4 Aug 2026 22:58:08 -0500 Subject: [PATCH] fix: preserve Proton's S: gamedrive mapping when launching TeamSpeak Proton builds with the gamedrive option enabled (e.g. current Proton Hotfix) resolve the game's Steam library from STEAM_COMPAT_INSTALL_PATH and STEAM_COMPAT_LIBRARY_PATHS during 'proton run'. The helper never exported them, so Proton's drive setup removed pfx/dosdevices/s: from the live prefix every time TeamSpeak was launched. A running Arma then fails multiplayer signature checks on any file it reopens through S: (random "not signed by a key accepted by this server" and "Wrong signature for file" kicks that only occur while TeamSpeak is open). Derive both variables from COMPAT_DATA_PATH, which always lives in the game's own Steam library. Export them only when the derived library actually contains "common/Arma 3" (after readlink -f canonicalization), so a noncanonical COMPAT_DATA_PATH can never point Proton at a wrong library; otherwise warn and preserve existing behavior. Values already exported by the user are respected. --- Arma3Helper.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Arma3Helper.sh b/Arma3Helper.sh index 58b2d2f..b8c600c 100755 --- a/Arma3Helper.sh +++ b/Arma3Helper.sh @@ -111,6 +111,26 @@ fi export STEAM_COMPAT_DATA_PATH="$COMPAT_DATA_PATH" export STEAM_COMPAT_CLIENT_INSTALL_PATH="$HOME/.steam/steam" +# Proton builds with the gamedrive option enabled (e.g. Proton Hotfix) need these +# two variables to resolve the game's Steam library during `proton run`. When they +# are missing, Proton DELETES the S: drive mapping from the live prefix, and a +# running Arma then fails server signature checks on every S:-pathed file +# (random "not signed by a key accepted" / "Wrong signature for file" kicks +# while TeamSpeak is open). The compatdata folder always lives in the same +# Steam library as the game, so derive both from COMPAT_DATA_PATH — but only +# export them when the derived library actually contains the game, so a +# noncanonical COMPAT_DATA_PATH can never point Proton at a wrong library. +if [[ -z "$STEAM_COMPAT_INSTALL_PATH" && -z "$STEAM_COMPAT_LIBRARY_PATHS" ]]; then + _ARMA_LIBRARY="$(readlink -f "$COMPAT_DATA_PATH" 2>/dev/null)" + _ARMA_LIBRARY="${_ARMA_LIBRARY%/compatdata/*}" + if [[ -d "$_ARMA_LIBRARY/common/Arma 3" ]]; then + export STEAM_COMPAT_INSTALL_PATH="$_ARMA_LIBRARY/common/Arma 3" + export STEAM_COMPAT_LIBRARY_PATHS="$_ARMA_LIBRARY" + else + echo -e "\e[33mWarning\e[0m: Could not locate Arma's Steam library from COMPAT_DATA_PATH." + echo "Without STEAM_COMPAT_INSTALL_PATH and STEAM_COMPAT_LIBRARY_PATHS, newer Proton versions remove the prefix's S: drive, which breaks server signature checks. Export both in your config file." + fi +fi export SteamAppId="107410" export SteamGameId="107410" if [[ "$ESYNC" == "false" ]]; then