Kurznotiz: #Steam (#flatpak) unter #Fedora – Games von #NTFS-Partitionen starten

Im Moment traue ich mich zweieinhalb Meter an Fedora 43 ran (GNOME) und habe einen Riesenspaß dabei. Zunächst weil ich GNOME in dieser Form am meisten mag und auch, weil ich wieder Dinge lernen kann.

Da die Verwendung meiner Hardware (Link) der Umwelt zuliebe unvernünftig ist (Aorus Z790 Board hat einen defekten S3, Die Grafikkarte kommt nur bis P8), muss ich mir ein paar Dinge aufschreiben, die ich nach dem Austausch des Boards und der CPU nochmal machen muss.

Wer unter Fedora (Silverblue/Workstation) Steam als Flatpak installiert und versucht, seine bestehenden Windows-Spielebibliotheken auf NTFS-Laufwerken einzubinden, läuft oft gegen eine Wand. Die Spiele werden erkannt, starten aber nicht, oder der Cloud-Sync schlägt fehl.

Das Ding hier könnte eine Lösung für das Problem, dass Proton (Wine) auf NTFS-Dateisystemen aufgrund fehlender Features (Symlinks, Sockets, Dateinamen-Restriktionen) nicht will.

Das Problem

  • Symptome: Das Spiel startet kurz („Wird ausgeführt“), bricht dann aber sofort wieder ab.
  • Fehler im Log: wine: could not load kernel32.dll, status c000012f oder filesystem error.
  • Ursache: Die Flatpak-Sandbox blockiert Zugriffe, und NTFS unterstützt keine Linux-spezifischen Ordnerstrukturen, die Proton im compatdata-Ordner anlegen will.

Schritt 1: Partition korrekt mounten (/etc/fstab)

Der ntfs3-Treiber im Linux-Kernel ist performant, aber das passt mit den Berechtigungen so nicht. Damit Steam Spiele via Proton ausführen darf, müssen exec und Schreibrechte explizit gesetzt werden.

Öffne /etc/fstab und nutze folgende Optionen für die Spiele-Partition:

# Beispiel für /etc/fstab
UUID=DEINE_UUID /mnt/games1 ntfs3 defaults,exec,uid=1000,gid=1000,umask=000,windows_names,noatime,x-gvfs-show 0 0

Erklärung der Optionen:

  • ntfs3: Der Treiber ( ntfs-3g funktioniert bei mir nicht)
  • exec: Zwingend notwendig, damit Programme/Spiele gestartet werden dürfen
  • uid=1000,gid=1000: Setzt den Besitzer auf den ersten Benutzer (Standard unter Fedora), damit keine Root-Rechte nötig sind
  • umask=000: Gewährt vollen Lese-/Schreibzugriff für alle (löst die meisten Permission-Probleme bei NTFS)

Nach dem Speichern die Änderungen anwenden:

sudo systemctl daemon-reload
sudo mount -a

Schritt 2: Flatpak-Sandbox öffnen

Da Steam als Flatpak isoliert läuft, sieht es standardmäßig keine externen Mount-Points wie /mnt. Wir müssen den Zugriff auf die Festplatte und den späteren Auslagerungsordner gewähren.

Führe folgende Befehle im Terminal als Nutzer, der Steam startet aus (kein sudo):

# 1. Zugriff auf die Spiele-Platte(n) erlauben
flatpak override --user --filesystem=/mnt/games1 com.valvesoftware.Steam

# 2. Zugriff auf den Ordner für Proton-Daten (siehe Schritt 4)
flatpak override --user --filesystem=/home/$USER/proton-compat com.valvesoftware.Steam

Schritt 3: Proton zwingend auf Linux Volume installieren

Ein häufiger Fehler, der zu Abstürzen (kernel32.dll error) führt: Steam installiert Proton (die Windows-Kompatibilitätsschicht) oft automatisch auf derselben NTFS-Platte wie das Spiel. Das funktioniert technisch nicht. Proton benötigt ein Dateisystem, das Unix-Sockets und Symlinks vollständig unterstützt.

  1. Öffne Steam und setze den Filter in der Bibliothek auf „Tools“.
  2. Suche nach Proton Experimental, Proton 8.0 (und andere Versionen), sowie Steam Linux Runtime.
  3. Rechtsklick auf das Tool -> Eigenschaften -> Installierte Dateien -> Installationsordner verschieben.
  4. Verschiebe diese Tools zwingend auf das interne Laufwerk (Ext4/Btrfs, meist Cache oder /home/...).

Schritt 4: Der Symlink-Fix (Compatdata auslagern)

Das Hauptproblem: Proton legt für jedes Windows-Spiel einen Ordner compatdata an (dieser enthält die simulierte Windows-Registry und C:-Laufwerk). Darin entstehen Dateinamen (z.B. mit Doppelpunkt), die auf NTFS ungültig sind. Das führt zum Absturz oder Cloud-Sync-Fehlern.

Die Lösung: Wir legen diesen Ordner physikalisch auf der Linux-Partition ab und verlinken ihn nur auf die NTFS-Platte.

Manuelles Vorgehen

Angenommen, die App-ID des Spiels ist 12345 und die Library ist /mnt/games1/SteamLibrary:

# 1. Echten Ordner im Home-Verzeichnis erstellen
mkdir -p /home/$USER/proton-compat/games1_12345

# 2. (Falls vorhanden) Alten, defekten Ordner auf NTFS umbenennen/löschen
mv /mnt/games1/SteamLibrary/steamapps/compatdata/12345 /mnt/games1/SteamLibrary/steamapps/compatdata/12345_bak

# 3. Symlink erstellen (Zeigt von NTFS auf Linux-Home)
ln -s /home/$USER/proton-compat/games1_12345 /mnt/games1/SteamLibrary/steamapps/compatdata/12345

Automatisierung: Das Helper-Skript

Um diesen Vorgang nicht für jedes Spiel händisch durchführen zu müssen, können wir dieses Skript nutzen. Speichert es z.B. als steam-ntfs-fix.sh und macht es ausführbar (chmod +x steam-ntfs-fix.sh).

Benutzung:
./steam-ntfs-fix.sh /mnt/games1/SteamLibrary <AppID>

(Die AppID findest du in den Steam-Eigenschaften des Spiels unter „Updates“ oder in der URL der Shop-Seite).

#!/bin/bash
# Skript: steam-ntfs-fix.sh
# Zweck: Verschiebt compatdata/shadercache von NTFS nach Home und verlinkt sie.

# KONFIGURATION: Hier landen die Daten auf der Linux-Platte
COMPAT_BASE="/home/$USER/proton-compat"

if [ "$#" -ne 2 ]; then
    echo "Benutzung: $0 <Pfad-zur-SteamLibrary> <AppID>"
    echo "Beispiel: $0 /mnt/games1/SteamLibrary 1029690"
    exit 1
fi

LIB_PATH="$1"
APP_ID="$2"

# Pfade definieren
NTFS_COMPAT="$LIB_PATH/steamapps/compatdata/$APP_ID"
NTFS_SHADER="$LIB_PATH/steamapps/shadercache/$APP_ID"
# Zielpfade erhalten eindeutigen Namen basierend auf Library und ID
TARGET_COMPAT="$COMPAT_BASE/$(basename "$LIB_PATH")_$APP_ID"
TARGET_SHADER="$COMPAT_BASE/$(basename "$LIB_PATH")_${APP_ID}_shader"

echo "Bearbeite AppID: $APP_ID in $LIB_PATH..."

# --- 1. Compatdata behandeln ---
if [ ! -L "$NTFS_COMPAT" ]; then
    echo " -> Verarbeite compatdata..."
    mkdir -p "$(dirname "$TARGET_COMPAT")"

    # Falls Ordner schon existiert, verschieben (Backup/Bewahren), sonst neu anlegen
    if [ -d "$NTFS_COMPAT" ]; then
        echo "    Verschiebe existierende Daten..."
        mv "$NTFS_COMPAT" "$TARGET_COMPAT"
    else
        echo "    Lege neuen Ordner an..."
        mkdir -p "$TARGET_COMPAT"
    fi

    # Symlink erstellen
    ln -s "$TARGET_COMPAT" "$NTFS_COMPAT"
    echo "    Symlink erstellt."
else
    echo " -> compatdata ist bereits verlinkt."
fi

# --- 2. Shadercache behandeln ---
# (Optional, aber empfohlen um Ruckler und Abstürze beim Shader-Kompilieren zu vermeiden)
if [ ! -L "$NTFS_SHADER" ]; then
    echo " -> Verarbeite shadercache..."
    mkdir -p "$(dirname "$TARGET_SHADER")"

    if [ -d "$NTFS_SHADER" ]; then
        mv "$NTFS_SHADER" "$TARGET_SHADER"
    else
        mkdir -p "$TARGET_SHADER"
    fi

    ln -s "$TARGET_SHADER" "$NTFS_SHADER"
    echo "    Symlink erstellt."
else
    echo " -> shadercache ist bereits verlinkt."
fi

echo "Vorgang abgeschlossen. Bitte Steam ggf. neu starten."