-
Notifications
You must be signed in to change notification settings - Fork 175
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changing a game (Dota 2) between soldier and sniper runtimes doesn't take effect reliably #9835
Comments
Because this is a transient situation, I will be unable to reproduce it after today, but hopefully Valve developers will be able to reproduce it on-demand by swapping the runtime used for a non-public test title. |
We saw similar issues when "Proton Experimental" changed from being 7.0-based (running on soldier) to 8.0-based (running on sniper, but some people found that it was briefly still trying to run on soldier). Those are believed to have been fixed already (at least in the beta client), but it seems those fixes were not comprehensive. |
After opening the developer console with |
That may explain all those games/demos getting symbol versions issues (and even missing symbols) from the binaries in the steam runtime itself: they would be built into the "sniper" steam runtime, but the client would try to run them in the old steam runtime, then blowing up. In my steam directory tree, I can see the "heavy" steam runtime, made for the steamwebhelper, the normal steam runtime, running some parts of the the client itself, but that's it, no sniper or soldier runtimes anywhere. To fix dota2, I downloaded the "pressure-vessel"-ized versions of the "sniper" steam runtime (not the one for the client beta, the "normal" one), and made symbolic links from dota2 linux runtime directory to binaries into this very "pressure-vessel"-ized "sniper" steam runtime. It means this dota2 update is too early or the "stable" steam client will need an emergency update to run this new dota2. Revert this dota2 update until the "stable" steam client gets the switching of steam runtimes tested and working. |
You should not need to make any symbolic links between SteamLinuxRuntime_sniper and Dota 2: that is not how any of these runtimes are meant to work. Please don't encourage others to use that workaround. As I said above, the recommended workaround for this is: after letting Steam update Dota 2, completely exit from Steam, then re-run it. It will hopefully download "Steam Linux Runtime - sniper" into your Steam library automatically, either immediately or when you try to run Dota 2 (but I cannot verify that, because I already had sniper installed). If not, running After that, launching Dota 2 should work correctly (it will launch via sniper). If not, please report a separate issue with full details. |
Okay, I'll try to remove the symbolic links and the environment variable for libthai (without LIBTHAI_DICTDIR or /usr/share/libthai with its data, libthai will crash dota2 in many places). Hopefully, LIBTHAI_DICTDIR is properly setup before starting dota2 (and I suspect similar issue with ALSA_CONFIG_DIR and XLOCALEDIR). |
@smcv Nope, same issue. Then I manually installed the "sniper" steamruntime 1628350. But nope, dota2 is not run in the "sniper" steamruntime. |
Greetings.
|
Please get the output that Steam produces when you run Steam from a terminal, and run Dota 2 from there. There should be lines of output that look like this:
I want to see what replaces If it contains If it contains If it does not contain either of those then there is something weirder going on, possibly related to this bug. |
@manticore-projects: The output you quoted is unfortunately not enough for me to tell whether you are seeing this bug, or something different. Please look a bit further back in the output from Steam, look for the same lines I described in my previous comment, and copy/paste that information. |
When the sniper container runtime is used correctly, it runs the game in a container where |
Unfortunately this does not seem to be a 100% reliable workaround. On one of my test systems, this was enough to make Steam use the correct container runtime for Dota 2, but on a different test system, restarting Steam was not enough. Forcing sniper to be installed by running |
On the system where restarting Steam worked around this issue (Dota 2 correctly starts in sniper), I'm seeing the same thing as quoted here. But on the system where I can still reproduce this issue (Dota 2 incorrectly starts in steamlinuxruntime), in my
(I'll attach full logs in a moment) So I wonder whether there is a conflict happening between two different sources of information: a new record that says "Dota 2 should use SteamLinuxRuntime_sniper", and an older record that says "Dota 2 should use steamlinuxruntime". Doing @sylware, it would probably be useful if you attach your whole |
For comparison, a system where this is working correctly for me (it happens to be Ubuntu 22.04). This is what should ideally be happening everywhere. Some particularly interesting parts are, in Steam's output to the terminal:
and it's interesting to note that not being able to load
In
Full logs |
And here's a system that exhibits this issue (it happens to be Debian 12, but that might not matter). Surprisingly, Dota 2 starts up OK for me even though it's in the wrong runtime, for whatever reason - but this is a situation where it "shouldn't" work correctly, and someone less lucky than me would probably see it fail. I didn't test whether gameplay was possible, only that it got far enough to show the red logo on a black background, and then pressed Alt+F4 and waited for it to exit. In Steam's output:
and some particularly interesting lines from
Full logs |
Nope, dota2 is not launch with (with your paths not mine): /home/desktop/SteamLibrary/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point |
Please copy/paste your equivalent of the information in #9835 (comment), and attach the logs. Just saying "not the same" is never going to be enough information for anyone to be able to diagnose why your system is behaving differently. |
https://paste.c-net.org/SapphireSantos There, dota2 is running ok with the symlinks and the libthai environment variable into the sniper steamruntime. |
forgot the compat_log.txt: |
This is not quite the same situation as what I reported: here, Dota 2 is not being run under a compat tool at all (not sniper as it should be now, but also not soldier + scout, which was the default for several months). Have you changed some setting in order to achieve this? |
I have never changed anything for years. Ofc, my client[beta] is configured with all my options, I didn't change anything. |
But this is how it looks to me too. Arch Linux, Steam package from Repo. |
|
|
It seems that @sylware and @manticore-projects were both lucky enough not to see a practical impact from this until now, even though Dota 2 was already not running in the intended environment. This failure mode might have the same root cause as what I reported above, or it might be different-but-related, or it might be an entirely separate thing. I don't have access to internals of the Steam client, so I cannot debug this: a Steam client developer will probably need to ask for more information. |
On the system where I was still seeing scout + soldier after a Steam restart, this was because I had overridden Dota 2 with: "Compatibility -> Force the use of a specific Steam Play compatibility tool -> Steam Linux Runtime" (which should have been equivalent to the default behaviour until now), and this override was not cleared when Dota 2 switched to requiring sniper. Clearing that override by unchecking "Force the use of a specific Steam Play compatibility tool" made it behave correctly. In this situation, because "Steam Linux Runtime" (scout + soldier) is not compatible with sniper, I think ideally Steam would forcibly remove the override when a game switches to sniper as its required runtime. |
Wait, I don't have proton enabled via the settings (like I don't have any shader cache), don't you tell me you cannot run dota2 with proton disabled??? |
Dota 2 does not require Proton. It's a native Linux game. However, it does rely on some of the same mechanisms that are used behind the scenes to run Proton. |
Now what? |
On ValveSoftware/Dota-2#2390, @manticore-projects wrote:
with a screenshot of: global Steam Settings -> Compatibility -> Run other titles with -> set to Proton Experimental. This is surprising to me, but maybe it will be the information that a Steam client developer needs to understand what has gone wrong. If you had chosen to use Proton for Dota 2 specifically (in Properties -> Compatibility -> Force the use of ...), then that would mean that Steam would replace the native Linux version of Dota 2 with the Windows version, and run it under Proton. I would have understood it if that worked around this issue. However, that's not what you've done in that screenshot! Instead, you've told Steam to use Proton Experimental for games that don't have a native Linux version. I don't know why that would change the Steam client's behaviour when running games that do have a native Linux version, like Dota 2. @manticore-projects, some things that would probably be useful to know about this situation:
Your updated |
In ValveSoftware/Dota-2#2390 (comment), @jn64 wrote:
That's not guaranteed to work, especially in the long term, but if it happens to work on your system then it's OK as a short term workaround. Please remember that you have changed this setting: after the underlying Steam client bug gets fixed, you will probably need to turn off "Force the use of ..." so that the game will run in sniper as it is meant to. |
@smcv: First of all, big thank you for helping! (Although I must say that all this stuff is extremely confusing on how it just happened and also how it was caused.) Please find the log attached. It looks like I run on Sniper (who came up with that name in the context of Dota!) now. I have no idea, how and why since I only changed those two option. After changing, nothing extra was downloaded. Hope this helps.
|
Disabling the Compatibility Options leads to the same crash as before. |
OK, then with your workaround of enabling Proton for Windows-only games (!?), Dota 2 is working for you the way it is intended to work. That's progress! I don't know why that workaround would be necessary or successful for you, but I don't have access to Steam client source code - I can only hope that a developer who does have that access will see this information and think "aha! now I understand what's happening", and use that as a basis for a proper fix.
To confirm, when you say "disabling the Compatibility Options", I think you mean: Steam menu -> Settings -> Compatibility -> disable (uncheck) "Enable Steam Play for all other titles", leaving "Enable Steam Play for supported titles" activated (checked). Is that true? Or if that's not what you did, then what? Please be specific, small details can matter here. When you have done this, does it take you back to the same command-line that I quoted in #9835 (comment)? If different, then please copy/paste what you do get - just that one line starting with
The Steam Runtime is a general Steam-on-Linux feature and is used (in different forms) by all games, not just Dota 2. Its branches have always used TF2 characters as codenames. So far we have had scout, heavy, soldier and sniper; spy was an internal prototype that never got released, and medic is another internal prototype for a possible future version. There are not so many TF2 characters left, so the naming convention for versions beyond medic is likely to change to the boring but practical |
If that's what you meant, then I was unable to reproduce that issue. If what you meant is: Steam menu -> Settings -> Compatibility -> disable (uncheck) "Enable Steam Play for supported titles" then I can reproduce that, and I have reported it separately, as #9852. I think that is a separate Steam client bug which does not match this issue (similar symptom, but a different root cause). This might also be what @sylware is seeing, or @sylware might be seeing some third, different thing. |
Your system information
Please describe your issue in as much detail as possible:
When the configuration for a new version of a game changes to run in a different Steam Linux Runtime by default, Steam does not immediately respond to that change, and instead continues to run it with the old configuration. The result is that the new game runs in the old runtime, which is not expected to work, and can lead to crashing or other brokenness (example).
Steps for reproducing this issue:
What I saw was this command-line (paths abbreviated and newlines added here for readability):
Notice that it says
soldier
andscout-on-soldier
, which is incorrect for the new version of Dota 2.Workaround
On my test systems I was able to work around this as follows:
This resulted in me seeing the correct command-line in Steam's output, something like this:
Notice that this time, it says
sniper
, which is correct for the new version of Dota 2.Related issues
#9852 is about what happens if the "Enable Steam Play for supported titles" option has been disabled. The symptoms are similar to this issue but the root cause is different. The workaround for #9852 is to make sure the "Enable Steam Play for supported titles" option is enabled.
#9844 is also related.
The text was updated successfully, but these errors were encountered: