protonscr

steampipe_fixups restore empties default_pfx but wineboot is never called to rebuild it

protonopen
ValveSoftware/Proton#9660 · opened 2026-04-11 by Nicknamn · updated 2026-06-01 · 1 comments · github
1 matching comments, n / p to jump
NNicknamn 2026-04-11 github

Bug Report: steampipe_fixups.py restore empties default_pfx but wineboot is never called to rebuild it

System Information

  • OS: Ubuntu 24.04.4 LTS (Noble Numbat)
  • Kernel: 6.17.0-20-generic (HWE)
  • GPU: NVIDIA GeForce GTX 1080 Ti
  • Driver: nvidia-driver-570 (570.211.01)
  • Steam client: 1773426488
  • Proton versions affected: Proton Experimental, Proton 9.0 (Beta), Proton Hotfix, GE-Proton10-32

Description

At every game launch, steampipe_fixups.py restore is called and empties files/share/default_pfx/ — removing all DLL files from drive_c/windows/system32/ and drive_c/windows/syswow64/, as well as fonts, registry files, and other prefix contents.

After this cleanup, make_default_prefix() in the proton script is never called to rebuild default_pfx because missing_default_prefix() only checks whether the directory exists, not whether it contains valid content:

def missing_default_prefix(self):
    return not os.path.isdir(self.default_pfx_dir)

def make_default_prefix(self):
    with self.dist_lock:
        local_env = dict(g_session.env)
        if self.missing_default_prefix():
            local_env["WINEPREFIX"] = self.default_pfx_dir
            local_env["WINEDEBUG"] = "-all"
            g_session.run_proc([self.wine_bin, "wineboot"], local_env)
            g_session.run_proc([self.wineserver_bin, "-w"], local_env)

Since steampipe_fixups.py restore empties the directory without removing it, missing_default_prefix() returns False and wineboot is never invoked. The result is that default_pfx remains empty, and every subsequent game launch fails with:

FileNotFoundError: [Errno 2] No such file or directory:
'.../files/share/default_pfx/drive_c/windows/system32/d3d8.dll'

Steps to Reproduce

  1. Install any Proton version on Ubuntu 24.04 with kernel 6.17
  2. Launch any Windows game using Proton
  3. Observe that steampipe_fixups.py restore empties default_pfx
  4. Observe that wineboot is never called to rebuild it
  5. All subsequent game launches fail silently

Expected Behavior

After steampipe_fixups.py restore runs, make_default_prefix() should detect that default_pfx is empty or invalid and call wineboot to rebuild it.

Suggested Fix

missing_default_prefix() should check for the presence of expected content, not just directory existence. For example:

def missing_default_prefix(self):
    system32 = os.path.join(self.default_pfx_dir, "drive_c/windows/system32")
    if not os.path.isdir(system32):
        return True
    dll_count = len([f for f in os.listdir(system32) if f.endswith(".dll")])
    return dll_count < 100

Workaround

Manually delete the entire default_pfx directory before launching a game, forcing missing_default_prefix() to return True and triggering a rebuild via wineboot.

Log Evidence

inotifywait — default_pfx deletions with no subsequent CREATE events

2026-04-11 19:42:27 .../files/share/default_pfx/drive_c/windows/syswow64/ win32s16.dll DELETE
2026-04-11 19:42:27 .../files/share/default_pfx/drive_c/windows/syswow64/ typelib.dll DELETE
2026-04-11 19:42:27 .../files/share/default_pfx/drive_c/windows/syswow64/ libvkd3d-shader-1.dll DELETE
2026-04-11 19:42:27 .../files/share/default_pfx/drive_c/windows/syswow64/ libvkd3d-1.dll DELETE
2026-04-11 19:42:27 .../files/share/default_pfx/drive_c/users/steamuser/ AppData DELETE,ISDIR
2026-04-11 19:42:27 .../files/share/default_pfx/drive_c/users/ steamuser DELETE,ISDIR
2026-04-11 19:42:27 .../files/share/default_pfx/ system.reg DELETE
2026-04-11 19:42:27 .../files/share/default_pfx/ .update-timestamp DELETE
2026-04-11 19:42:27 .../files/share/default_pfx/ dosdevices DELETE,ISDIR
# [490 lines total — all DELETE, zero CREATE events]

Proton log (steam-[gameid].log) — FileNotFoundError after cleanup

======================
Proton: 1775583929 experimental-10.0-20260407
SteamGameId: [gameid]
Command: ['[game executable]', '/Steam', '/novr']
Options: {'forcelgadd'}
depot: 3.0.20260218.209091
pressure-vessel: 0.20260218.0
Kernel: Linux 6.17.0-20-generic x86_64
======================
Traceback (most recent call last):
  File ".../proton", line 2100, in <module>
    g_session.init_session(sys.argv[1] != "runinprefix")
  File ".../proton", line 1979, in init_session
    g_compatdata.setup_prefix()
  File ".../proton", line 1128, in setup_prefix
    try_copy(g_proton.default_pfx_dir + "drive_c/windows/system32/" + f + ".dll", ...)
  File ".../proton", line 169, in try_copy
    copyfile(src, dst)
  File ".../proton", line 231, in copyfile_reflink
    with open(srcname, 'rb', buffering=0) as src:
FileNotFoundError: [Errno 2] No such file or directory:
  '.../files/share/default_pfx/drive_c/windows/system32/d3d8.dll'

journalctl — confirming the error in system log

Apr 11 19:33:03 [hostname] steam[PID]: FileNotFoundError: [Errno 2] No such file or directory:
  '.../Proton - Experimental [appid]/files/share/default_pfx/drive_c/windows/system32/d3d8.dll'
Apr 11 19:33:03 [hostname] steam[PID]: Game Recording - game stopped [gameid=[gameid]]
Apr 11 19:33:03 [hostname] steam[PID]: Removing process [PID] for gameID [gameid]

Additional Notes

This issue affects all installed Proton versions simultaneously, suggesting it is triggered by a common code path in steampipe_fixups.py. The issue has persisted across multiple kernel and Proton updates over approximately 6-8 months.

inotifywait confirmed that all 490 deletions occur within the same second (batch delete), and no CREATE events follow — confirming that wineboot is never invoked after the cleanup.

Iivyl 2026-06-01 github

steampipe_fixup.py doesn't remove files. It only creates directories for empty_dirs and removes write permissions for no_write_paths files to work around steam pipe limitations.

If your d3d8.dll is missing that likely means your installation is very broken and there may be more wrong with it than just the default_pfx. The correct steps to take here are verifying the installation and checking steam pipe's logs to see if there's anything suspicious there.

Apr 11 19:33:03 [hostname] steam[PID]: FileNotFoundError: [Errno 2] No such file or directory: '.../Proton - Experimental [appid]/files/share/default_pfx/drive_c/windows/system32/d3d8.dll'

This line from the logs looks very suspicious - random [appid] thrown in the Proton's path and triple dot instead of ... Also python error coming form Steam directly? Is is completely made up?

The proposed fix is not correct. default_pfx and matching steampipe_fixups.json are a part of the Proton distribution. All the non-bleeding-edge builds are also tested and they do work when published. Trying to paper over a potentially broken local installation is not the answer.

Proton versions

Launch options

DLLs