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
NW.js app can't run on Steam Linux Runtime (libcups) #585
Comments
It'll be a huge help if you can provide "To reproduce" instructions, like the instructions I provided in #579. At a minimum:
It might be worth buying a Steam Deck to investigate and reproduce these issues. |
If this is similar to #579, then it's probably possible to reproduce this on a Linux system that is not a Steam Deck, with: right-click -> Properties -> Compatibility -> Force the use of -> Steam Linux Runtime. Game Dev Tycoon (239820) is an example of a NW.js app that is (or was) known to work in that environment (I know because we had to add some more libraries to make it work, similar to #579). But I think that's using an older version of NW.js, which is probably why it didn't have #579. As with #579, the bottom line here is that having someone else build a binary in a non-Steam-Runtime environment, and then dropping it into a Steam Runtime environment and hoping that it still works, is not really something that can ever be reliable. The benefit of the container runtime used on Steam Deck is that after an app or game works in that restricted environment, it'll probably work on all Linux distributions, for a long time - but the cost is that it needs to be made to work in that restricted environment in the first place. |
I tried Janosik (1412170), the first free NW.js game I could find, and that works fine in the Steam Linux Runtime environment. Its I also tried removing everything except |
I tried to run it with compatibility setting (Steam Linux Runtime), and it runs fine on my linux virtual machine ubuntu 22.04.
Yeah, I think so. It uses the nw.js 0.66.1 files to package the app. |
There shouldn't be, except for whether they use it by default or only as an opt-in. Native Linux games on Deck use Steam Linux Runtime by default, and native Linux games on all other Linux platforms only use Steam Linux Runtime if you specifically ask for it. For historical reasons, on desktop you get the legacy I don't actually have access to a Steam Deck myself at the moment, but my colleagues do. I'll ask someone to try Janosik on Deck and report back. Failing that, if you can give us a key for your specific game (email |
#579 fixed the issues I had for my game that was not launching on the SteamDeck as well. Some players reported me several issues still like not being able to open the game still, or some screen glitches when the game was trying to go full screen on game starts. I just wanted to share the info, and hope that it helps. |
Ah, I might see what has happened. If your game has gone through Steam Deck compatibility testing and the testers reported that the native Linux version didn't work (because of #579), then it might have been flagged to run the Windows binaries via Proton by default, instead of the native Linux version. This is necessary because some games offer a native Linux build but it doesn't actually work (or only works on the developer's machine), so sometimes running the Windows build via Proton is more reliable. If that happens, then the thing to do is to force the compatibility setting to Steam Linux Runtime (which will install the native Linux version of your game), test that, and if successful ask your Valve representative for re-testing. |
FYI it's Proton 7.0 and 8.0 (based on Wine 7.0 and 8.0 respectively). There was never a Proton release versioned 0.x, the oldest version of Proton is 3.something. |
In https://steamdb.info/app/1244040/info/ I see that @prominentdetail's app Crocotile has "recommended_runtime: native", so the Steam Deck is probably already trying to use the native Linux binaries via Steam Linux Runtime? But I could be wrong. (SteamDB is unofficial, but seems to be usually reliable on these things.) CrossCode, https://steamdb.info/app/368340/info/ is an example of a NW.js game that has been flagged to run under Proton, with "recommended_runtime: proton-stable". (Maybe its developer should ask for re-testing after the changes we made in #579, but if its Windows build works acceptably on Deck via Proton, that's good enough for now.) Janosik, https://steamdb.info/app/1412170/ is an example of a NW.js game that has not yet been tested on Steam Deck and therefore has no specific configuration either way. For comparison, Into the Breach, https://steamdb.info/app/590380/info/, is a non-NW.js game that works well as a native Linux game on Deck. Whatever game @sleepingpandagames mentioned probably has the same configuration as CrossCode? @sleepingpandagames, would you mind telling me the Steam app ID of your game so I can compare? |
Indeed.. I was on the go so I did not check. Sorry for misinformation.
Sure! My game Steam app ID is 1271910, https://steamdb.info/app/1271910/ One quick note though. Looking at how well Windows build work on Linux using Proton, is it still worth it to provide a Linux build for our games? I'm always afraid things break with every new versions of NW.JS, tbh. |
As I suspected, it's like CrossCode: "recommended_runtime: proton-stable" on Deck. From its name, I would guess that the meaning of that flag might change from Proton 7 to Proton 8 at some point in the future, when Proton 8 has been more heavily tested, but I don't have any special insider knowledge that can confirm or deny that. If the Linux build is known-good on Deck after #579, you could ask for it to be re-tested as a native Linux game. I'm not a game developer, so you'd know the procedure for that better than I do!
That's up to you and what you're willing to test/support as the game developer. It could go either way: a new version of the NW.js Linux binaries could regress in the native Linux "Steam Linux Runtime" container, but equally, a new version of the NW.js Windows binaries could start using a Windows API that Proton doesn't yet implement correctly. Any time you're relying on a third party to build your game's binaries, you're also relying on them to provide updated binaries that still work in your target environment. The only thing we can recommend for native Linux games is using binaries that have been compiled in the Steam Runtime SDK, against the libraries that the Steam Runtime guarantees to provide - but I realise that for a web runtime like NW.js, which is basically an entire web browser, that's not necessarily practical. |
A colleague has confirmed that this works on Deck, forcing the Steam Linux Runtime compatibility tool, and with or without overwriting its copy of NW.js with the NW.js v0.66.1 x86_64 binaries linked above. The should be similar to @prominentdetail's app - obviously the actual app/game content will be different, but this issue is about whether the NW.js runtime starts up, and if you're all using the same prebuilt binaries then that should be generic across all apps/games? (In case it becomes important later, my colleague was using the latest stable versions as of today: SteamOS BUILD_ID=20230313.1, VERSION_ID=3.4.6 with Steam client 1679680416.) |
For completeness: I also tried overwriting
If I understand the way this works correctly, any other NW.js v0.66.1 game should be the same md5sums as this, except that This also worked on my desktop (Debian 12 prerelease and Steam beta, just in case that's important) and on my colleague's Deck. |
From what I can see on SteamDB, it doesn't seem to be the same binaries as in |
Ah, it looks more like the contents of nwjs-sdk-v0.66.1-linux-x64.tar.gz; but using that browser engine (again renaming |
I've received a key for Crocotile 3D from @prominentdetail and it seems to start up fine on Steam Linux Runtime under Ubuntu 22.04. I'll see if my colleague can reproduce the issue on a Deck. |
It seems to be working fine on Deck too. My colleague reports that it starts up fine, and runs in Steam Linux Runtime by default. (Again, this is SteamOS BUILD_ID=20230313.1, VERSION_ID=3.4.6 with Steam client 1679680416.) @prominentdetail, if a user of your app is unable to launch it on Deck, some things that could help are:
If the user is sufficiently familiar with Linux to be able to access desktop mode and navigate the filesystem, it would be useful to see what they have in If they can get a log that would be even better.
That symptom matches #579, which should no longer be a problem since 2 days ago. |
[edited previous comment to add some debugging steps if your user is sufficiently familiar with Linux] |
Thanks for the help! I'm waiting to hear back from a user about whether they can get it to work or not given the new information. I'll let you know when I hear from them. |
Is there any more recent feedback, or can we assume that this was a duplicate of #579 and therefore fixed now? |
I never heard back from the user. However, I did resubmit my app to be tested on steamdeck, and valve said it launched fine. |
Thanks, I think this is a duplicate of #579 then. Please could you or @kisak-valve close it? |
I was told to open a new issue.
I'm having same issue as this:
#579
My users that use SteamDeck can't open my app: (I don't have SteamDeck, so I can't test it myself).
My app # is 1244040
Here is a past report I made to nw.js:
nwjs/nw.js#8032
I also opened a support ticket with valve in the past and an employee told me they get an error: " libnw.so: undefined symbol: cupsEnumDests "
My app uses nw.js v0.66.1
I'm not sure how to continue, since I don't own a SteamDeck.
The text was updated successfully, but these errors were encountered: