ValveSoftware / steam-runtime

A runtime environment for Steam applications
Other
1.19k stars 86 forks source link

Rogue Heroes: Ruins of Tasos does not run #548

Open junefish opened 1 year ago

junefish commented 1 year ago

Compatibility Report

System Information

I confirm:

Have added to the launch options but no log file is being generated ![Screenshot](https://user-images.githubusercontent.com/19216250/205713219-79e1911c-d33d-4ca0-b679-0b746353beaf.png) ## Symptoms

Game does not launch (button switches to "Stop" for about a second and then back to "Play" with no window opening)

Reproduction

kisak-valve commented 1 year ago

Hello @junefish, your issue is with the Steam Linux Runtime - Soldier container environment and Pressure Vessel which sets up that container. It comes down to your home folder being a subdirectory of /usr/local, and there's a note at https://github.com/ValveSoftware/steam-runtime/blob/60f438709eff5ccb7a6fc5c609ae832d58edbe42/doc/steamlinuxruntime-known-issues.md#usrlocal that this is a known incompatible folder location.

This is not a game-specific issue, or a Proton issue. It is not something that can be sanely solved besides relocating your home folder, but there is a workaround suggested in https://github.com/ValveSoftware/steam-runtime/issues/288.

junefish commented 1 year ago

That's weird, because other games run fine with Proton (e.g. Among Us, Wingspan), but I will take your word for it!

Following this comment, I ran mount --bind /usr/local/home/junefish/.local/share/Steam /data/games. Now if I ls /data/games I see the contents of my steam folder.

I then tried running Rogue Heroes again and it downloaded some updates before once again not opening. Should I try fully relocating my Steam library? Or is it the Steam installation that's the problem?

Thanks!

smcv commented 1 year ago

Following https://github.com/ValveSoftware/steam-runtime/issues/288#issuecomment-717207328_, I ran mount --bind /usr/local/home/junefish/.local/share/Steam /data/games. Now if I ls /data/games I see the contents of my steam folder.

For this to work, all environment variables that refer to your home directory would have to be using paths outside /usr/local, and Steam would have to think it was run from a path outside /usr/local. Steam does not have any special way to know that the same file is available with more than one path.

This would be more likely to work if you followed the layout that essentially all Linux distributions use by default, with your home directory's realpath being /home/junefish or similar, and your "official" home directory in /etc/passwd also set to /home/junefish. You could use bind-mounts to arrange for /home and /usr/local to be on the same disk, if you want.

smcv commented 1 year ago

other games run fine with Proton

Old Proton versions (before 5.13) didn't use the container runtime. Are you perhaps using an old Proton version like 5.0 for those games?

junefish commented 1 year ago

Old Proton versions (before 5.13) didn't use the container runtime. Are you perhaps using an old Proton version like 5.0 for those games?

I thought for sure I was using somewhere between 6.8 & 7.0 for Among Us, but now it's not launching with 7.0-5. Perhaps I was mistaken.

This would be more likely to work if you followed the layout that essentially all Linux distributions use by default, with your home directory's realpath being /home/junefish or similar, and your "official" home directory in /etc/passwd also set to /home/junefish. You could use bind-mounts to arrange for /home and /usr/local to be on the same disk, if you want.

Is there a way to use bind-mounts to let Steam think my home directory is /home/junefish, without actually relocating my home directory from /usr/local/home/junefish? I've read some tutorials and documentation about mount --bind but I'm still not well-versed enough to know how to fix this. Thanks for your patience!

smcv commented 1 year ago

Is there a way to use bind-mounts to let Steam think my home directory is /home/junefish, without actually relocating my home directory from /usr/local/home/junefish?

It's not straightforward, so please make sure you have backups first, and don't make any changes you are not comfortable with. I'm trying to be helpful, but this is at your own risk.

The easy part is to make your home directory show up in the filesystem hierarchy in both places, so that either of these paths works equally well for software that does not treat /usr as special. It's usually best to do this using an /etc/fstab entry so that it is set up during every boot, perhaps something like this:

/usr/local/home /home none bind 0 0

or

/usr/local/home/junefish /home/junefish none bind 0 0

depending on whether you want to do this for all users' home directories, or just yours. And then either mount /home (or mount /home/junefish, as appropriate), or reboot.

The harder part is to make Steam (and any other software that cares about this difference, like Flatpak) think that the version in /home is the canonical path, so that it will launch games using a path like /home/junefish/.local/share/Steam/steamapps/common/Some Game/game.exe in preference to /usr/local/home/junefish/.local/share/Steam/steamapps/common/Some Game/game.exe. I can't give you a full list of places to edit, because it depends on how you set up your system, and if you already figured out how to put your home directory below /usr/local/home instead of the usual /home then you are probably doing various other bits of unconventional setup.

This would likely be easier if you are willing to change your "official" home directory in /etc/passwd to be /home/junefish. A side bonus of that is that you'll see considerably shorter paths in user interfaces! If you don't want to do that for whatever reason, a less reliable way to achieve parts of the same result would be to make sure environment variable HOME=/home/junefish is set whenever Steam is launched.

After that, it will also be necessary to change other environment variables and filesystem paths that previously pointed to /usr/local/home/junefish/... so that instead, they say /home/junefish/.... For instance, if XDG_CONFIG_HOME is set to /usr/local/home/junefish/.config, you'll want to change that to /home/junefish/.config.

For Steam specifically, there are several symbolic links in /home/junefish/.steam ( which will point to paths like /usr/local/home/junefish/..., which you will need to re-create to point to the equivalent path /home/junefish/.... The most important are ~/.steam/steam and ~/.steam/root, which should both point to the "real" path of Steam's main installation directory, /home/junefish/.local/share/Steam in your case.

You'll probably also need to edit /home/junefish/.steam/root/config/libraryfolders.vdf to use the shorter paths.

smcv commented 1 year ago

See also https://github.com/ValveSoftware/steam-for-linux/issues/10096