DavidoTek / ProtonUp-Qt

Install and manage GE-Proton, Luxtorpeda & more for Steam and Wine-GE & more for Lutris with this graphical user interface.
https://davidotek.github.io/protonup-qt
GNU General Public License v3.0
1.16k stars 39 forks source link

Steamplay filter not working properly anymore and all games interpreted as "native" #369

Closed BigCojones closed 2 months ago

BigCojones commented 2 months ago

Please fill out following when reporting a new bug:

Describe the bug

After installing the steam play filter in my library doesn't work (The blue penguin). All games have become "native". Turning off the "Enable steam play for other titles" doesn't help. The filter does remove mac osx only games, so it seems that every game which has a windows executable is now being seen as "native to linux" by steam.

To Reproduce
Steps to reproduce the behavior:

Just try to press the penguin icon in your steam library

Expected behavior
The filter toggle should only show the truly native linux apps on steam. Especially after turning off the "enable steam play for other titles" option

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

sonic2kk commented 2 months ago

This sounds like it's related to your Steam library. It sounds like the issue you're describing is when you click the Penguin icon in the top-right of your library, which is meant to filter games that run on Linux, it's displaying all games in your library.

However, it's not working correctly for you, or at least not as expected.

If so, this has nothing to do with ProtonUp-Qt. This is an issue with the Steam Client. ProtonUp-Qt is a third-party tool for installing compatibility tools. You might want to report this to Valve's issue tracker for Steam for Linux @ ValveSoftware/steam-for-linux.

All compatibility tools, including Proton, are maintained by separate people and are entirely unaffiliated with ProtonUp-Qt, see #352.

BigCojones commented 2 months ago

It was working before I installed protonup-qt, which is why i'm reporting it, installation broke it...

You don't have the same problem?

sonic2kk commented 2 months ago

I had the same behaviour before I ever installed ProtonUp-Qt, yes. All games can use Proton are listed as native Linux. Actually, I had this from before ProtonUp-Qt was created I think, back in 2019 time in the early days of Proton.

If you never installed any Proton version / compatibility tool before using ProtonUp-Qt, maybe installing them caused the behaviour.

I don't see how ProtonUp-Qt could cause this. It doesn't modify the Steam Client in this way. It can update the config.vdf that controls what compatibility tool a game will use, but the behaviour you're describing is something the Steam Client would check for. It's not really ProtonUp-Qt's domain.

For what it's worth, the Penguin button only says "Show only games that run on Linux", which doesn't explicitly mean native games. However I would agree with what you said that turning off Steam Play should only show native games.

sonic2kk commented 2 months ago

Possibly related upstream issues related to Proton games showing with native titles:

BigCojones commented 2 months ago

Yeah, I see what you are saying. It did install the proton-experimental. And yes was my first time installing proton.

So this doesn't go away and you've lived with this ever since first installing proton? :D

I do kinda understand it when i'm "enabling steam play for all other titles" that it would show them there, even tho you kind of lose the whole purpose of that filter. But when you turn off "steam play for other titles" it should go away at least by then. Not for the simple fact that you have proton installed.

My use case is very specific for using proton as this is shitty hardware and no vulkan. The true linux native games are my first choice and now they are buried. FML

So if you have had this and have lived with this ever since installing proton, I will make do the ticket for Valve.

So this doesn't go away at all? :D

sonic2kk commented 2 months ago

So this doesn't go away and you've lived with this ever since first installing proton? :D

To the best of my memory, yup. Games that run with Proton get mixed in with native titles, I haven't had a way to filter native-only titles for as long as I can remember.

If installing Proton caused the issue, you could try uninstalling all compatibility tools and seeing if that fixes the problem.

But I don't believe this issue is directly caused by ProtonUp-Qt. If you find otherwise please do comment but based on my memory and quick research, it seems like this the Steam Client and not ProtonUp-Qt.

I can't remember off the top of my head, but the ProtonUp-Qt games list may let you sort the columns by native titles.

sonic2kk commented 2 months ago

I'll see if I can confirm on a machine without ProtonUp-Qt but with compatibility tools later tonight to see how this filtering works in that scenario, which should narrow down if this is specific to ProtonUp-Qt, but I don't believe it is as I am fairly sure this behaviour has been this way before ProtonUp-Qt existed.

BigCojones commented 2 months ago

Yeah let me know.

I'm totally willing to issue a new ticket to Valve as those you put were pretty old and are requesting a "feature". From my perspective it's a bug as when you turn off the "enable steam play for other titles" the filter should work as before... Now it seemingly doesn't, and all that is needed is to have proton installed on your system.

sonic2kk commented 2 months ago

Checked on a machine that has never had ProtonUp-Qt installed on it, and it shows the same behaviour. Games that run with Proton as well as native titles (installed and uninstalled) are displayed together when that Penguin button is pressed.

It seems to me that this has nothing to do with ProtonUp-Qt as such, but may be related to Proton being installed. Perhaps with all versions of all compatibility removed (the official Valve builds of Proton listed in the Steam library and the community compatibility tools at /path/to/steam/installation/compatibilitytools.d) you may be able to return to the old behaviour.

In my opinion, with Steam Play disabled, this option should only show native titles. With Steam Play enabled, as the option is designed to show games that "run" on Linux, the existing behaviour is probably fine, and there should be a separate option in the library filter options (the button beside the search bar).

It's probably worth commenting on an existing Steam for Linux issue, or creating a new one, as this appears to be general Steam behaviour and not something in the control of ProtonUp-Qt.


For what it's worth, if you'd like to see if a game runs natively, there are two ways, although not nearly as convenient as filtering.

  1. In the Properties dialog for a given game, in the Compatibility section, check the "Force the use of a specific Steam Play compatibility tool" and from the dropdown that appears, check if it lists "Steam Linux Runtime 1.0" (or maybe even "Steam Linux Runtime 3.0" in future). If it does, it is a native title.

    image

  2. From the Steam Library, click on a game to open its expanded "Game" view (the view with the green "Play" button or blue "Install" or "Launch" button), and on the right-hand side beside the Favourite button, click on the "ℹ️" information button. Along the bottom of the shelf that appears, native titles will either display no text, or will display that they are using a native compatibility tool, such as the Steam Linux Runtime 1.0 (or 3.0 in future) or Steam-Play-None. Titles using Compatibility Tools will tell you that they run via Steam Play, what tool they are using to run, and who selected it (you or Valve Testing). Below are screenshots showing a native game, a native game using the Steam Linux Runtime 1.0, and a Windows game that uses Proton Experimental to run.

    image image image


In the Game Menu, ProtonUp-Qt will list Steam Deck Compatibility information, which does note some games Verified/Playable as native. However, Valve will often mark a game with a native port as Verified/Playable but have that game use Proton, usually to allow games with bad native ports to run well on Steam Deck out of the box. So this is not really a great way to see all native games unfortunately.

There may be some way to create a Python script to parse appinfo.vdf and extract a list of games which use native ports. I believe some information about OS is stored here.


And as a small aside, your use-case for native titles is to run games on your hardware which has limited Vulkan support, right? You can use Proton without Vulkan; not all titles require Vulkan, and you can force Proton to fall back to Wine's OpenGL-based wined3d renderer with PROTON_USE_WINED3D=1 %command% in the launch options. Do note, however, that not only performance, but compatibility may be heavily reduced, including issues with artifacting and so on. This may vary greatly by what OpenGL version your hardware supports as well as driver support (generally from worst to best supported is Nvidia -> Intel -> AMD). I can't find any information on a minimum OpenGL version for wined3d.

BigCojones commented 2 months ago

Thank you for your conscientious response.

It does seem that it is impossible to revert back to the old behavior. I have uninstalled all versions of proton, steam runtime (which you have to remove manually from every individual game that you had it set to, before you can uninstall), i set every game to not use compat manually, uninstalled protonup, set every game to not use compat manually, the compat.d folder and even removed the whole steam package and reinstalled and that didn't work. In fact it is now downloading the runtime and proton automatically (after reinstall) even tho i don't have the steam play for all other titles enabled. I'm at the point where a full system reinstall seems like the only way to get it back to the original behavior. Which is definitely buggy behavior imho.

In my use case i'm experimenting with how usable old crappy hardware is (lol) as i got a couple of old laptops. I am aware of the forcing wine3d method, but the results weren't that great and have only a couple of games on steam that i might want to use wine on, so i much rather use lutris for that and keep my native games easily accessible through the filter as i have a lot of native indie games that work perfectly fine with this laptop.

I appreciate your methods, but going through every single individual game manually is way too much work, as i have hundreds. :D Most already in a single folder, but not all. And going through every game one by one seems unneccesary as the original behavior of the filter did that already. The info button thing doesn't work when i don't have the enable steam play option set/haven't selected any compat layer...

The computer i'm running has opengl 2.1 and wine does work, but obviously not great. There is even a gallium3d driver, if i would change distros/current distro would release a new version, so the gaming is better than i would have hoped for. Luxtorpeda wasn't the ticket tho and had a chat with him, because the launcher used vulkan and he gave me an updated version with opengl, only with 3.3 so that didn't work either on this laptop. :D But i can run all the luxtorpeda games outside steam and can manually install the engines etc. it is fine. The filter option was the most important one for my use case.

I think in the future after i get the filter working again through whatever means, i might try doing steam compat so, that i never enable steam play for all other titles, but only force it manually on individual games, and maybe even only use luxtorpeda, roberta etc. (not proton, so maybe can even avoid installing it) and maybe that won't break it. :)

But i thank you for your efforts. I think it's worthy of a ticket to valve, because i can't revert back the to the original filter behavior excluding full system reinstall.

PS. I don't know if there's a opengl lower limit for wine this laptop has 2.1 and it works. Not great, but that's more likely because of weak gpu, but i don't see why a stronger gpu from the same era (desktop etc.) wouldn't be even quite useful running wine translation.especially since galliium3D works with with gpu's as old as this (intel gma x4500m). Gallium3d works even on this laptop, but not many stable distros ship that newer mesa driver which forces it, but that could flip the whole situation.

BigCojones commented 2 months ago

https://github.com/ValveSoftware/steam-for-linux/issues/10769

Made a new ticket. Being hella frustrated with this. But I think we can close this. Thanks for your help. :)

BigCojones commented 2 months ago

Don't close it yet. :smile:

So i got the filter working again. Had to delete all persistent files after uninstalling steam package and after reinstallation it seemed like it still left some persistent files and didn't even fix the filter, but after some time steam started an update and regained the filter, but it messed up my library to some degree. Creating duplicate folders and removing tags from games etc. But i can live with it and reorganize.

So anyway. It seems like i can use your app without breaking the filter if i don't set the global steam play for all titles and only force steam play manually on select titles. I'm just now using roberta to install the dig and the filter still functions (fingers crossed).

So my question is, because i don't really want to activate wine for steam (which would be optimum for non vulkan HW) and break the filter and i have seen that you don't want to add wine as a compat tool for steam, is there any compat tool now in protonup with which i can force wined3d (like above) without having to dl proton from steam. (Which would probably break the filter) Is proton-tkg my best bet for non vulkan translation and can i force it somehow like i could with steams own proton?

I realized i can't just use lutris for wine with steam since it seemingly relies on steam play for all titles and can't install without proton installed. Or can i force wine on steam through lutris using your app? I don't really understand how the lutris side of your app functions or how it's supposed to be used etc. And are the lutris compat tools (supposedly) only for other storefronts, and which version of translation you use on them, but not specifically steam...

(You can change this into a new ticket, but i hope you get what i'm getting at)

BigCojones commented 2 months ago

It seems proton-tkg has this. You can force wine3d, wintricks and even gallium from the user_settings.py file.

And i can install games individually without having to enable the global steam play, which keeps the filter functioning as wanted.

Except do i need to have steam runtime 3.0?

This is all new software to me. Ill do some testing...

sonic2kk commented 2 months ago

Glad you got it working!

So anyway. It seems like i can use your app without breaking the filter if i don't set the global steam play for all titles and only force steam play manually on select titles

Thanks for going through all the trouble of testing. It seems to me anyway that this breakage is a problem on Valve's end when you install a compatibility tool. It is permanently unable to differentiate. I wonder if Steam modifies anything in config.vdf that, if manually cleared out, would work (such as if no tools had any compat tool mappings). It might also be in appinfo.vdf, which is in binary format. Either way, a user shouldn't have to do this.

and i have seen that you don't want to add wine as a compat tool for steam

It is not about "not wanting to", it is that you can't. This simply does not work. You cannot use vanilla Wine with Steam and have it behave like Proton; you need some sort of wrapper script, and you'd need to do legwork to tell it where to define the prefixes. Proton is a lot more than simply Wine, and a lot more than simply Wine with DXVK and so on bundled in; there is a dedicated Proton script that Steam runs to do all of the heavy lifting to bring all of the components together, apply game-specific workarounds, define where and how to create Proton prefixes.

If Wine could be used as a compatibility tool we could add it, but there is no compatibility tool which I am aware of that allows you to use vanilla Wine with Steam.

is there any compat tool now in protonup with which i can force wined3d

You can most likely use any Proton flavour. GE-Proton or Proton-tkg will allow you to force wined3d with the same launch option that Proton uses (since they are just custom builds of Proton, after all).

I realized i can't just use lutris for wine with steam since it seemingly relies on steam play for all titles

If you're referring to launching Steam titles from Lutris, then I believe this is correct as well. At the very least this has tripped me up before as well! For Steam games, Lutris essentially just runs them from Steam with steam://run/appid.

Or can i force wine on steam through lutris using your app?

You cannot, and this is not really something ProtonUp-Qt controls. ProtonUp-Qt is for downloading and managing (removing, displaying some extra information, and for Steam only, updating which games use which compatibility tools)

I don't really understand how the lutris side of your app functions or how it's supposed to be used etc

ProtonUp-Qt allows you to download compatibility tools for Steam, Lutris, Heroic, and Bottles (and Flatpak versions of these launchers as well). The Lutris side works the same as the Steam side, it simply allows you to download tools into the Lutris-specific directories so that you can select those tools to be used with games on Lutris. Just like how you can install GE-Proton from ProtonUp-Qt for Steam and then select it in the Steam Play tool list from the Steam Client, you can download Wine-GE from ProtonUp-Qt for Lutris and then select it for games in Lutris.

I don't believe Lutris allows you to select which tools for Steam games, or if it does on the UI, it doesn't (and most likely cannot) respect this, as Lutris simply tells Steam to launch the game, and Steam decides which compatibility tool to use based on what is set in the Steam Client.

The Lutris side is just for installing tools (such as Wine flavours like Wine-GE or runtimes like specific DXVK versions). It's as simple as that :-)

(Also, for what it's worth, I'm just a user and occasional contributor to ProtonUp-Qt :-))

And i can install games individually without having to enable the global steam play, which keeps the filter functioning as wanted.

When self-compiling Proton-tkg, I believe this is correct. Does it also allow you to define things like this on-the-fly?

Except do i need to have steam runtime 3.0?

Yes, but Steam will install this for you if you launch a tool that needs it.

Proton requires* on the Steam Linux Runtime. All versions of Proton 5.13 and up (and anything based on this or newer) will require the Steam Linux Runtime. As of Proton 8, I believe this is Steam Linux Runtime 3.0. When you launch a game that requires a Steam Linux Runtime version, the Steam Client will download it automatically before the game launches. For example, if you're using an older version of Proton that requires Steam Linux Runtime 2.0, Steam will download this when you click "Play". It will hang at something like "Preparing to launch" in your library.

Steam determines which runtime is needed based on a file in each compatibility tool's containing folder called, toolmanifest.vdf. This is a Valve text-based VDF (Valve Data Format) file which is very similar to JSON. This toolmanifest.vdf defines how Steam should use the compatibility tool to launch a game, such as the command to wrap the game launch command in under the "commandline" field. Most interesting to us, this file can define any dependencies the tool requires with "require_tool_appid". This field takes an AppID that basically tells Steam "before you can use this tool, you need to download a tool with this AppID". GE-Proton8-32 defines 1628350 which is Steam Linux Runtime 3.0. If you paste that AppID into your library search bar you should also find it.

Side note: All Steam Linux Runtimes and Proton versions have AppIDs.

*Proton does not actually need the Steam Linux Runtime to function strictly speaking, but you should always use it and unless you take deliberate action you will always be using the Steam Linux Runtime with Proton because tools that launch games will go out of their way to ensure you are using it by default. Steam will always download it because it's defined as required in the toolmanifest.vdf, but Proton can actually run without it. However the experience is not ideal, and may not work at all if your system libraries do not match those Proton is built against (too old, too new, or your distro names them differently). It is a bit like how some native games to not run properly on newer distros, because they are built for Ubuntu 12.04. The Steam Linux Runtime solves this problem - you can force Steam Linux Runtime 1.0 as a compatibility tool from the Steam Client for native games to fix this issue, and it is the exact same issue you can run into with Proton if you do not use the Steam Linux Runtime. All that said, you have to go out of your way to not use the Steam Linux Runtime with Proton. Even other launchers using Proton such as Lutris or Heroic, or Steam tools like SteamTinkerLaunch, will attempt to find and use the Steam Linux Runtime.

BigCojones commented 2 months ago

I appreciate you putting the time in to explain. :)

Yeah, i figured as much that you can't just run wine and need the proton wrapper after getting a bit more familiar with all of this. :)

Also now found how to configure wine on Lutris as well. :)

I did some more testing and I can in fact dl and use proton/linux runtime without breaking the filter and they work if i force it only for individual games. It's just mainly the global activation of "steam play for all titles" that breaks it. And now i'm dumbfounded why that is something most videos/tutorials on using steam compat tell you to do as a "prerequisite", when it clearly is not. Completely unnecessary as you will most likely config. the individual game you want to run. I don't understand why anybody would want to lose the functionality of that filter and make all games "native", because obviously you know that you can try it on any windows game anyway. You can just have the filter off and view your whole library and then force the game individually, which isn't that much of hassle if you have to press install anyway imho. :D

Figured out also that my distro is running quite old dependancies, so i had to use quite old versions of proton/tkg. But got some old games working pretty well, maybe even better than i was hoping. I had trouble downloading older versions of proton-tkg using the app (I didn't want to make a ticket and become more trouble :D ) so downloaded manually from the tkg repo. But yeah it works and i can still use protonup-qt to manage all of that, even if installed manually. :)

I plan on looking at making gallium work at some point to see if there's a noticeable boost. But yeah, at least proton-tkg has gallium/wined3d/winetricks directly in the user.settings python file, so that seems the easiest way of messing with that. Might look into proton-ge in the near future.

But yeah i was getting 60 fps in some old games like anachronox, Sin gold when windowed etc. Which is kind of all that i could have hoped for with this piece of hardware, even though not every game i tested worked well like arcanum was choppy as shit. This HW is a test for kind of "worst case scenario" with intel gma and opengl 2.1 :D

But my main idea here is to see if i can use old hardware as a dedicated older games setup and this is giving me a lot of confidence. Like you could have old hardware running linux setup instead of having windows xp or 7 and still be able to play your games. I think this usecase is not even that rare, but many still think they have to have windows for their retro box. Especially after windows 10 drops support I think there's gonna be a lot of boxes to make use of this. All pre 2017/W11 compatible/vulkan HW etc.

But because running crappy hw it basically means imo that the native linux games will most likely run the best (most of the time on older hw) and then the native source ports/engine recreations and only then wine with older select games etc. (Not your whole dang library :D). So that's why the filter is so important in this usecase. :)

But yeah this is solved imho. Just don't set the global "Steam play for all titles" and just manually configure your games one by one and the filter will work. You can then use the official proton/linux runtime or any other compat layer from protonup-qt, without breaking the filter. :)

Edit: Also just tested uninstalling games and after you untick the "force steam play" option, the filter will stop recognizing it, so it works as expected. I think still that making all the titles be seen as "native" is still unwanted for many, but especially that you can't revert it back easily by unticking it is pretty horrible UI.

I have one more question:

Based on what you said about the runtime requirement. Does it really wrap all the required dependencies in the runtime? As in i can use newer versions, without having to install them on my whole system?

The "problem" i'm having atm. is that my distro (hopefully updating soon to newer ubuntu base) is still based on ubuntu 22.04 and that basically means wine 6.0 preinstalled and giblc 2.31 or whatever which means the newest proton-tkg build i can run is 5.15/5.13 or whatever. So i don't want to go through the hassle of updating all of those dependancies and risk bricking my system atm. :D Rather just wait for the update.

So does the runtime include all of the necessary dependancies within it so you can just run newer stuff, without having to install all of it system wide? Or do i still need to have them on the system?

I guess i could just test this with newer than proton 5.13... Which I've been using 5.13, since i figured that should work the easiest...

EDIT: This seems to be the case. :) Got it working with all 2.0 soldier versions. And realize it doesn't matter if you have wine at all on your system as proton wraps it within itself. No game would launch with 3.0 sniper, but that seems to be a common issue and games just hang on launching. I have no idea why that is, because my ubuntu base is current with the debian base it's based on. I got it to launch one time running steam through the terminal, but overall seems super shaky on my system... But whatever, at least i have some tinkering capability with the 2.0 ones. :)

Oh it seems proton 8.0 requires Vulkan 1.3, so that's my cut off point then. :D

sonic2kk commented 2 months ago

So does the runtime include all of the necessary dependancies within it so you can just run newer stuff, without having to install all of it system wide? Or do i still need to have them on the system?

If you mean for Proton, then yes, it includes all of Proton's dependencies. For native games, the answer is yes the vast majority of the time. A lot of native games won't run without the Steam Linux Runtime on newer systems (To the Moon doesn't work without the Steam Linux Runtime) and in very rare cases, some don't work with it (APICO used to crash with it, but this was patched after the developer worked with the community to fix it).

The Steam Linux Runtime is a container for Steam games to run it, meaning users don't have to worry about installing dependencies, and developers only have to target the Steam Linux Runtime instead of targeting a distribution such as Ubuntu 12.04 like they did when Steam Machines were first introduced.

And realize it doesn't matter if you have wine at all on your system as proton wraps it within itself.

Yes, Proton comes with Wine pre-installed, with various patches. Proton does not use system Wine, and Valve's Wine fork is very different from upstream Wine (You can check it out at ValveSoftware/Wine).

No game would launch with 3.0 sniper Oh it seems proton 8.0 requires Vulkan 1.3

These might be related. Proton 8.0 requires SLR 3.0 Sniper, and also Vulkan 1.3 because of increased DXVK and vkd3d-proton requirements (the translation layer for D3D9/10/11 -> Vulkan and D3D12 -> Vulkan, respectively). It may be that Sniper doesn't work for you with Proton because of this.

If you're referring to native games, you can get native games to use SLR 3.0, but it isn't advertised by Valve yet. You're better off sticking to 1.0 for now for native titles, and if you need 2.0, you'll have to use an older Proton version.

sonic2kk commented 2 months ago

As this is an issue with the Steam Client, this issue can probably be closed I think.