Closed zeerooth closed 6 months ago
so executing run-steam steam-tui
works for some of my use-cases. I only really play a handful of games so this hasn't been a major sticking point for me.
I see 2 major ways to address this.
Let me know if you think this would address your issues
Yes, I think that'd work great!
I think that that steam -silent -applaunch <appid>
or steam steam://rungameid/<appid>
should be used by default if steam is running instead of currently used runscript
in steamcmd.
It's because I found out why my games are stuck on the launching...
phase - it seems that if app_launch
fails in steamcmd it doesn't properly return any errors and simply exits with an error code 0, which means what steam-tui
is unable to detect if an app was actually launched or not, see:
❯ steamcmd +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +@sStartupScript
Redirecting stderr to '/home/radek/.local/share/Steam/logs/stderr.txt'
Looks like steam didn't shutdown cleanly, scheduling immediate update check
[ 0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation - version 1660762488
-- type 'quit' to exit --
Loading Steam API...OK
"@ShutdownOnFailedCommand" = "1"
"@NoPromptForPassword" = "1"
"@sStartupScript" = ""
Steam>runscript /home/radek/test.launch
Logging in user '####' to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
app_update "105600" -validate
Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
Update state (0x5) verifying install, progress: 15.63 (109429880 / 700338209)
Update state (0x5) verifying install, progress: 94.18 (659576994 / 700338209)
Update state (0x5) verifying install, progress: 96.62 (676682291 / 700338209)
Success! App '105600' fully installed.
app_run 105600
Game process added : AppID 105600 "/home/radek/.local/share/Steam/linux32/reaper SteamLaunch AppId=105600 -- '/home/radek/.local/share/Steam/steamapps/common/Terraria/Terraria.exe'", ProcID 24583, IP 0.0.0.0:0
chdir /home/radek/.local/share/Steam/steamapps/common/Terraria
CHIDDeviceListSDL(): Couldn't load libSDL2-2.0.so.0, not enumerating devices
Game process removed: AppID 105600 "/home/radek/.local/share/Steam/linux32/reaper SteamLaunch AppId=105600 -- '/home/radek/.local/share/Steam/steamapps/common/Terraria/Terraria.exe'", ProcID 24583
quit
❯ echo $?
0
However, if there is an error reported by steamcmd itself, it'll correctly return an error exit code, see:
❯ steamcmd +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +@sStartupScript
Redirecting stderr to '/home/radek/.local/share/Steam/logs/stderr.txt'
[ 0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation - version 1660762488
-- type 'quit' to exit --
Loading Steam API...OK
"@ShutdownOnFailedCommand" = "1"
"@NoPromptForPassword" = "1"
"@sStartupScript" = ""
Steam>runscript /home/radek/test.launch
Logging in user '#####' to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
app_update "812810" -validate
Update state (0x0) unknown, progress: 0.00 (0 / 0)
Success! App '812810' fully installed.
app_run 812810
ERROR! AppId 812810 launch failed (Missing executable)quit
❯ echo $?
13
Dun dun duuuuuuun!
The LaunchOptionIndex
argument of app_launch
must be used to select the OS flavour of the game. (Source)
Maybe out of the question, but under app_info_print
for the corresponding app, the "\<AppID>" > "config" > "launch" > "<#>" > "config" > "oslist" value determines which launch option is for which OS.
The final part is to link these two binaries used by Steam to launch games to the working directory of SteamCMD:
ln -s ~/.local/share/Steam/ubuntu12_32/{reaper,steam-launch-wrapper} ~/.steam/steamcmd/linux32
As for games with other Steam dependencies, for all I know, it may be possible to make a clean Steam install and run SteamCMD in it. I would assume that many of them would have to be updated by the client rather often, so if you find where to run it or what else to link to its working directory, it may be possible to use Steam DRM (alongside a full client install) too. (edit: superseded by newer comment)
Copy steamconsole.so into your Steam install's ubuntu12_32 folder and run steam -textclient
for a surprise.
This console seems to be able to open games in the proper Ubuntu environment, but the Steam auth service isn't running so most games will refuse to start. I think that to have proper control over things you end up needing to play the role of the steam executable (or steamclient.so???).
Copy steamconsole.so into your Steam install's ubuntu12_32 folder and run
steam -textclient
for a surprise.This console seems to be able to open games in the proper Ubuntu environment, but the Steam auth service isn't running so most games will refuse to start. I think that to have proper control over things you end up needing to play the role of the steam executable (or steamclient.so???).
Here's what I learned so far through my own research, testing and asking around.
Running SteamCMD (or, rather, Steam with -textclient
) this way is no different than running SteamCMD without forcing the install directory, provided a full Steam installation is present. SteamCMD finds the existing Steam client installation, works in it and inherits all libraries and custom library folders, so don't force the install directory unless you absolutely have to.
(edit: confused it with steamclient.so
is only responsible for VAC, to my knowledgesteamservice.so
). Basically, you need either the full Steam client, or a re-implementation like SteamLite (Windows-only) in order for games to communicate with Steam.
TL;DR: The original proposal in this issue is indeed the optimal solution.
I have this as a fallback if the script doesn't work
Hi! I've tried to use
steam-tui
for a fair while now and unfortunately it seems like most often than not games are borked and refuse to launch. For example, lately I've tried to make 4 linux native games work with different launch scripts, both on NixOS and Ubuntu and this is the result:CHIDDeviceListSDL(): Couldn't load libSDL2-2.0.so.0, not enumerating devices
I managed to get around that by preloading the SDL2 library packaged by steam and running the binary directly withLD_LIBRARY_PATH=~/.steam/bin32/:$LD_LIBRARY_PATH ~/.local/share/Steam/steamapps/common/Terraria/Terraria
but it threw an exception anywayException: System.TypeInitializationException: The type initializer for 'Microsoft.Xna.Framework.FNAPlatform' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object
. On Ubuntu it terminates with[S_API FAIL] SteamAPI_Init() failed; create pipe failed.
. I gave up on that one. Works on steam GUI.ERROR! AppId 812810 launch failed (Update required)
but when I runapp_update 812810
there's nothing to update. Running the binary directly runs the game in 0x0 window which well, makes it pretty unplayable. Works on steam GUI.launching...
if steam is running in the background.error while loading shared libraries: libsteam_api.so: cannot open shared object file: No such file or directory
. Again, steam-tui gets stuck inlaunching...
phase. And again, works through steam GUI.All in all, I don't know if it's only happening to me, but based on my experience and the discussions I've read online it seems like
steamcmd
is pretty ill-equipped for launching games beside simple servers, as it doesn't manage the libraries correctly and probably isn't even properly maintained (looking at the tiny documentation and non-existent support). To make user experience better, I'd simply offload the game launch phase straight to steam GUI and with-silent -nobrowser
which seems to work, at least for me, 100% of the time (and this should also auto detect and start games with steam proton). However, that's just my opinion for now - I'd like to hear if anyone else encountered such errors and if you were able to solve it, if it's possible at all.