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 c000012foderfilesystem 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-3gfunktioniert bei mir nicht)exec: Zwingend notwendig, damit Programme/Spiele gestartet werden dürfenuid=1000,gid=1000: Setzt den Besitzer auf den ersten Benutzer (Standard unter Fedora), damit keine Root-Rechte nötig sindumask=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.
- Öffne Steam und setze den Filter in der Bibliothek auf „Tools“.
- Suche nach Proton Experimental, Proton 8.0 (und andere Versionen), sowie Steam Linux Runtime.
- Rechtsklick auf das Tool -> Eigenschaften -> Installierte Dateien -> Installationsordner verschieben.
- 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."