Matoking / protontricks

A wrapper that does winetricks things for Proton enabled games, requires Winetricks.
GNU General Public License v3.0
1.66k stars 36 forks source link

Problem with Proton 5.13-2 #72

Closed ingmarcosp closed 3 years ago

ingmarcosp commented 3 years ago

Describe the bug get an error running protontricks --gui selecting a proton 5.13-2 game prefix.

To Reproduce Steps to reproduce the behavior:

  1. Run command protontricks --gui
  2. Command fails and error is displayed /home/username/.cache/protontricks/proton/Proton 5.13/bin/wine cmd.exe /c echo '%AppData%' returned empty string, error message "wine: failed to initialize: /home/vagrant/build-proton_5.13-local/dist-wine32/lib/wine/ntdll.dll.so: cannot open shared object file: No such file or directory"

System (please complete the following information):

Matoking commented 3 years ago

Newer versions of Proton have started using newer versions of Steam Runtime that are installed in a different way and utilize containerization. They are likely to be more complicated to support than the simple LD_LIBRARY_PATH approach that has been used until now.

As a workaround for now, you can check if running with the --no-runtime flag works (eg. protontricks --no-runtime --gui or protontricks --no-runtime <appid>).

Matoking commented 3 years ago

I've pushed an experimental fix to the steam_runtime_soldier and would like to know whether it works in different distros. If you're using pipx, the following should install it:

pipx install --force git+https://github.com/Matoking/protontricks.git@steam_runtime_soldier

The new Steam Runtime seems to still work by adjusting the LD_LIBRARY_PATH env var, which is what we've done up to this point and what the new fix does as well.

However, since we're not running Proton binaries using namespaces/containerization like Steam Runtime itself does, it's possible it will still fail if your distro is old enough to not have a new version of glibc. Unlike before, the new Steam Runtime ships glibc which it will use if running inside a container. Running Protontricks inside the Steam Runtime properly would be hard to support, since Winetricks and Protontricks rely a lot on applications installed on your system and which are not available inside the Steam Runtime.

astillich commented 3 years ago

Did not work for me (Linux Mint 19.1 Tessa):

pipx install --force git+https://github.com/Matoking/protontricks.git@steam_runtime_soldier

protontricks --gui Traceback (most recent call last): File "/home/USER/.local/bin/protontricks", line 8, in sys.exit(main()) File "/home/USER/.local/pipx/venvs/protontricks/lib/python3.6/site-packages/protontricks/cli.py", line 198, in main command=[winetricks_path, "--gui"] File "/home/USER/.local/pipx/venvs/protontricks/lib/python3.6/site-packages/protontricks/util.py", line 223, in run_command get_runtime_library_path(steam_runtime_path, proton_app) File "/home/USER/.local/pipx/venvs/protontricks/lib/python3.6/site-packages/protontricks/util.py", line 67, in get_runtime_library_path get_host_library_paths(), os.pathsep, File "/home/USER/.local/pipx/venvs/protontricks/lib/python3.6/site-packages/protontricks/util.py", line 39, in get_host_library_paths capture_output=True, encoding="utf-8", check=True File "/usr/lib/python3.6/subprocess.py", line 423, in run with Popen(*popenargs, **kwargs) as process: TypeError: init() got an unexpected keyword argument 'capture_output'

Matoking commented 3 years ago

@astillich Please try installing the test version again, there was a compatibility bug with Python 3.6 that's fixed now.

astillich commented 3 years ago

Seems to work now, I can start the GUI and run winecfg from there, without passing "--no-runtime".

Matoking commented 3 years ago

I've merged the fix to master and will look into releasing a new version soon. Please make a new comment if there are still problems with Proton 5.13 or newer releases.

wolfmanx commented 3 years ago

On my Ubuntu 18.04 installation with Proton 5.13-4 the Steam Runtime - Soldier is detected and used. However, the error is still reported:

sheckley:~$ protontricks --verbose --gui
protontricks (INFO): Found Steam directory at /home/ws/.steam/steam. You can also define Steam directory manually using $STEAM_DIR
protontricks (INFO): Using default Steam Runtime at /home/ws/.steam/root/ubuntu12_32/steam-runtime
protontricks (INFO): WINETRICKS environment variable is not available. Searching from $PATH.
protontricks (INFO): Found 0 Steam library folders
protontricks (INFO): Currently logged-in Steam user: wolfmanyxx
protontricks (INFO): Found 0 Steam shortcuts running under Proton
protontricks (INFO): Found active Proton installation: Proton 5.13
protontricks (INFO): WINE environment variable is not available. Setting WINE environment variable to Proton bundled version
protontricks (INFO): WINESERVER environment variable is not available. Setting WINESERVER environment variable to Proton bundled version
protontricks (INFO): Using separately installed Steam Runtime: Steam Linux Runtime - Soldier
protontricks (INFO): Created Steam Runtime Wine binary directory at /home/ws/.cache/protontricks/proton/Proton 5.13/bin
protontricks (INFO): Attempting to run command [PosixPath('/usr/local/bin/winetricks'), '--gui']
winetricks GUI enabled, using zenity 3.28.1
Executing mkdir -p /home/ws/.steam/steam/steamapps/compatdata/61510
------------------------------------------------------
warning: You are using a 64-bit WINEPREFIX. Note that many verbs only install 32-bit versions of packages. If you encounter problems, please retest in a clean 32-bit WINEPREFIX before reporting a bug.
------------------------------------------------------
WINEPREFIX INFO:
Drive C: insgesamt 32
drwxr-xr-x  8 ws ws 4096 Nov 29 05:55 .
drwxr-xr-x  4 ws ws 4096 Dez 10 08:02 ..
drwxr-xr-x  3 ws ws 4096 Nov 29 05:55 ProgramData
drwxr-xr-x  6 ws ws 4096 Nov 29 05:55 Program Files
drwxr-xr-x  7 ws ws 4096 Nov 29 05:55 Program Files (x86)
drwxr-xr-x  4 ws ws 4096 Nov 29 05:55 users
drwxr-xr-x  3 ws ws 4096 Nov 29 05:55 vrclient
drwxr-xr-x 18 ws ws 4096 Dez 10 08:01 windows

Registry info:
/home/ws/.steam/steam/steamapps/compatdata/61510/pfx/system.reg:#arch=win64
/home/ws/.steam/steam/steamapps/compatdata/61510/pfx/user.reg:#arch=win64
/home/ws/.steam/steam/steamapps/compatdata/61510/pfx/userdef.reg:#arch=win64
------------------------------------------------------
warning: /home/ws/.cache/protontricks/proton/Proton 5.13/bin/wine cmd.exe /c echo '%AppData%' returned empty string, error message "wine: failed to initialize: /home/vagrant/build-proton_5.13-local/dist-wine32/lib/wine/ntdll.dll.so: cannot open shared object file: No such file or directory" 
Matoking commented 3 years ago

@wolfmanx I've reproduced the issue on Ubuntu 18.04. Ubuntu 20.04 works fine, however. For now, you'll either have to upgrade your distro or use a different Proton version.


The problem is with the glibc v2.27 shipped with Ubuntu 18.04, when Proton 5.13 needs at least glibc v2.28. Steam Runtime Soldier uses containerization (there's a talk by one of the developers that goes into further detail) that allows a different glibc version to be loaded reliably. The same thing isn't possible with the current LD_LIBRARY_PATH method that Protontricks uses.

I tried finding a method to use user namespaces just like Steam Runtime does, but I wasn't able to come up with a working solution. While a game running using Proton + Steam Runtime only needs what the Proton and Steam Runtime installations include, with Protontricks we want to be able to use any applications or files from the host system (mostly Winetricks, which in turn uses other host applications). This has been a difficult problem and I haven't found a solution to this yet.

kblaschke commented 3 years ago

Executing anything with proton wine resulted in this error message for me:

0440:err:esync:esync_init Server is running with WINEESYNC but this process is not, please enable WINEESYNC or restart wineserver.

I launched wineserver manually with:

WINEPREFIX=/home/<user>/.steam/steam/steamapps/compatdata/<appid>/pfx /home/<user>/.steam/steam/steamapps/common/Proton\ 5.13/dist/bin/wineserver

After starting wineserver once, protontricks worked fine. Might help figuring out what's wrong.

Matoking commented 3 years ago

@kblaschke That suggests that wineserver has been left running for some reason. Maybe the Steam game didn't close properly or one of the Winetricks commands was left running?

You can usually check for this by running ps aux | grep winetricks and checking if there are any running processes on the list (aside from grep itself, of course).

Matoking commented 3 years ago

I've published an experimental fix to branch steam_runtime_bwrap that should allow Protontricks and Steam Runtime to work properly on older Linux distros including Ubuntu 18.04. If you have installed Protontricks using pipx, the following will let you install the fix:

pipx install --force git+https://github.com/Matoking/protontricks.git@steam_runtime_bwrap

The fix should match the actual Steam Runtime + Proton behavior better compared to the previous solution. However, there are some caveats to the new approach:

wRAR commented 3 years ago

I'm trying to run the latest protontricks release on Debian sid and it fails with StopIteration in get_runtime_library_paths because in ~/.steam/steam/steamapps/common/SteamLinuxRuntime_soldier there are no */files/

Edit: changing that to */*/files/ works as the files dir is in SteamLinuxRuntime_soldier/var/soldier_0.20210126.1

Matoking commented 3 years ago

I've pushed a change to master that makes the new bwrap behavior the default. This should be the best option in the long run, given it will allow older distros to work, but there's a fair chance it will still break in some situations since it's a big change in how Wine and Winetricks work in tandem.

If something goes wrong, you can still revert to the old behavior using the --no-bwrap flag (eg. if the command protontricks <appid> foobar fails, try protontricks --no-bwrap <appid> foobar instead).

Please report any issues that are fixed by using the --no-bwrap flag!