Matoking / protontricks

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

fails to find proton in default location #136

Closed ExpandingMan closed 2 years ago

ExpandingMan commented 2 years ago

Describe the bug Both proton experimental and proton-GE are installed in the default locations, but protontricks reports they cannot be found.

To Reproduce e.g. protontricks --gui

Expected behavior No error, present usual options.

System (please complete the following information):

Additional context

◖◩▮⟦δt: 7s⟧▮⋯steamapps/compatdata/1466860/pfx▮◗ protontricks --gui
protontricks (ERROR): Could not find the Steam Play manifest in appinfo.vdf
protontricks (ERROR): Could not find compatibility tool's App ID from appinfo.vdf
protontricks (ERROR): Active Proton installation could not be found automatically.
Proton installation could not be found!

Proton experimental can be found at ~/.local/share/Steam/steamapps/common/Proton\ -\ Experimental/ as usual.

Matoking commented 2 years ago

Can you run the command again with protontricks -v --gui and copy the output? Could you repeat the same for a Proton-GE enabled game as well? Finally, does STEAM_DIR=$HOME/.local/share/Steam protontricks -v --gui help with the issue?

Protontricks looks inside ~/.steam/steam first, and while that should pose no problem (it's a symlink to ~/.local/share/Steam on my system), it might explain the problem if that's not the case.

ExpandingMan commented 2 years ago

Here is the verbose log output

protontricks (INFO): Found Steam directory at /home/expandingman/.steam/steam. You can also define Steam directory manually using $STEAM_DIR
protontricks (INFO): Using default Steam Runtime at /home/expandingman/.steam/root/ubuntu12_32/steam-runtime
protontricks (INFO): WINETRICKS environment variable is not available. Searching from $PATH.
protontricks (INFO): Found 1 Steam library folders
protontricks (INFO): Currently logged-in Steam user: savastio
protontricks (INFO): Couldn't find custom shortcuts. Maybe none have been created yet?
protontricks (INFO): Using 'zenity' as GUI provider
protontricks (ERROR): Could not find the Steam Play manifest in appinfo.vdf
protontricks (ERROR): Could not find compatibility tool's App ID from appinfo.vdf
protontricks (ERROR): Active Proton installation could not be found automatically.
Proton installation could not be found!

It looks like it can find steam but not proton? Which is weird because proton experimental and GE are in the default locations within ~/.steam/steam.

Matoking commented 2 years ago

Protontricks parses ~/.steam/steam/appcache/appinfo.vdf to find the app ID for Valve's built-in Proton versions. That's not working here, probably because the file hasn't been updated for some reason. Could you check if the file's modification date is recent (eg. the same as the current day)?

Protontricks doesn't need to parse that file if you're using a custom compatibility tool such as Proton-GE, and should be able to detect it. Does Protontricks print the same error if you select a game that uses Proton-GE instead?

Also, does running STEAM_DIR=$HOME/.local/share/Steam protontricks -v --gui cause the same result?

ExpandingMan commented 2 years ago

My appinfo.vdf does seem to be getting updated regularly (maybe when steam starts?) and was updated today.

I get the same behavior if I set STEAM_DIR as you showed above.

However, protontricks seems to work fine for games which I currently have set to run on Proton-GE, so I've only seen this problem for games which run proton experimental. Note that my Proton experimental installation is in the standard location $HOME/.local/share/Steam/steamapps/common/Proton\ -\ Experimental/.

Matoking commented 2 years ago

Okay, try closing Steam, removing the ~/.steam/steam/appcache/appinfo.vdf file and then restarting Steam. The file should be regenerated shortly after Steam has finished relaunching. When it reappears, check if Protontricks works.


If Protontricks still doesn't work, there's a chance that the appinfo.vdf has the needed data in a different place that Protontricks doesn't recognize. To investigate that, run the following command:

python -c "from pathlib import Path; import pprint; from protontricks.steam import get_appinfo_sections; pprint.pprint(get_appinfo_sections(Path('/home/expandingman/.steam/steam/appcache/appinfo.vdf')))" > ~/appinfo-output.txt

This will parse the file using Protontricks and save the output into a file called appinfo-output.txt in your home directory. Open that file in an editor of your choice and look for "Proton Experimental" and "proton_experimental". In my case, the file contains the following section for an app named Proton Experimental (abbreviated for brevity):

{'appinfo': {'appid': 1493710,
              'common': {'gameid': 1493710,
                         'name': 'Proton Experimental',
                         'osarch': '',
                         'osextended': '',
                         'oslist': 'linux',
                         'releasestate': 'released',
                         'section_type': 'ownersonly',
                         'type': 'Tool'},
              'config': {'installdir': 'Proton - Experimental'},

and the following section under the appinfo.extended entry for SteamPlay 2.0 Manifests:

                          'compat_tools': {'proton_316': {'aliases': 'proton_316_beta',
                                                           'appid': 961940,
                                                           'depotid': 961941,
                                                           'depotsizemb': 395,
                                                           'display_name': 'Proton '
                                                                           '3.16-9',
                                                           'from_oslist': 'windows',
                                                           'to_oslist': 'linux'},
                                            ...
                                            'proton_63': {'appid': 1580130,
                                                          'depotid': 1580131,
                                                          'depotsizemb': 667,
                                                          'display_name': 'Proton '
                                                                          '6.3-8',
                                                          'from_oslist': 'windows',
                                                          'require_tool_appid': 1391110,
                                                          'to_oslist': 'linux'},
                                            'proton_7': {'aliases': 'proton-stable',
                                                         'appid': 1887720,
                                                         'depotid': 1887721,
                                                         'depotsizemb': 667,
                                                         'display_name': 'Proton '
                                                                         '7.0-1',
                                                         'from_oslist': 'windows',
                                                         'require_tool_appid': 1391110,
                                                         'to_oslist': 'linux'},
                                            'proton_experimental': {'appid': 1493710,
                                                                    'depotid': 1493711,
                                                                    'depotsizemb': 666,
                                                                    'display_name': 'Proton '
                                                                                    'Experimental',
                                                                    'from_oslist': 'windows',
                                                                    'require_tool_appid': 1391110,
                                                                    'to_oslist': 'linux'},

The latter section with the proton_experimental name is what allows Protontricks to map the game's Proton selection to the actual Proton installation on disk. In this case, Protontricks finds the string proton_experimental in the game configuration and is able to map it into the Proton installation directory on disk using the app ID 1493710. If those fields are found elsewhere in the file, where exactly?

You can also send the file to me using the email address on my GitHub profile. AFAIK, it shouldn't contain anything sensitive but it's probably better to be safe than sorry.

ExpandingMan commented 2 years ago

I tried deleting the appinfo.vdf, but after it is re-generated I'm getting the same behavior.

Hm... what I'm seeing looks the same as what you posted here. As a start, I have extracted only the relevant sections from the file and included them in the attached. Perhaps you can find a discrepancy that I did not see.

Note that the string proton_experimental occurs exactly once in the entire file (included) and the string Proton Experimental occurs exactly once in the entire file (included).

If you can't find anything from what I've included here I will set up a debug environment and hunt down for you exactly where it's failing to find they key it's looking for.

appinfo-output-abbreviated.txt

Matoking commented 2 years ago

Could you copy the entire appinfo section from the parsed output starting from the line:

 {'appinfo': {'appid': 891390,

and ending with the last field? The relevant section from my own appinfo.vdf file can be found here for comparison's sake.


From the looks of it, it looks like it should be identical, but better to check it.

If that's the case, appinfo.vdf probably isn't the culprit here. If so, please check the ~/.steam/steam/config/config.vdf file and search it for proton_experimental. There should be a list of "app ID -> compatibility tool name" mappings, like so:

"CompatToolMapping"
                {
                    "0"
                    {
                        "name"      "proton_63"
                        "config"        ""
                        "Priority"      "75"
                    }
                    "1055540"
                    {
                        "name"      "proton_experimental"
                        "config"        ""
                        "Priority"      "250"
                    }

There are currently two potential locations for the Proton configuration field. The newest location should be Software.Valve.Steam.CompatToolMapping as listed in the code here. That said, it's probably the value of the name field that's causing grief here, if that's the case.

ExpandingMan commented 2 years ago

Ok, I've gotten a chance to come back to this and dig into it a bit. I have gone in and inserted some debug changes.

What's happening is that inside find_steam_compat_tool_app, it gets

potential_names = ['Proton-7.0rc2-GE-1', 'proton_experimental', None, None]

This is pretty weird because I haven't used Proton-7.0rc2-GE-1 for quite a while. I looked in appinfo.vdf and this string does not appear anywhere in that file, but it does appear in config.vdf. So it appears

Matoking commented 2 years ago

Going by the contents of the potential_names:

Can you check if that's the case? There's a chance there's old data in config.vdf, and Steam is now storing those configurations elsewhere, but I'm not seeing that with my own Steam Beta installation.

You shouldn't find the Proton-7.0rc2-GE-1 string inside appinfo.vdf. appinfo.vdf only contains data for Valve's own Proton releases.

ExpandingMan commented 2 years ago

🤦 Ok, not sure how it got stuck in that state, but yes, the game I was testing with most of the time was in some sort of broken state. This was fixed by going into steam, telling it to use some specific version, then unchecking the box and letting it revert to its default (proton experimental state)...

I could have sworn this was also happening with other games... maybe it was, but now I can't reproduce the problem.

So, I don't think this was a protontricks issue at all, sorry about that.

I'll close this because I don't think there's anything to be done here, I'll re-open if it pops up again.

Thanks for your help!