-
-
Notifications
You must be signed in to change notification settings - Fork 41
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
Add steamtinkerlaunch source #86
Comments
Should be possible, I have to do some testing soon. |
Any news on this? |
Sadly, no. But I had a look at it, would be nice to have though I'm not sure how easy it is to do.
I think it only works with the Flatpak version of Steam, which the Steam Deck does not use.
That's probably the best solution for now. Support for ProtonUp-Qt will take a while. |
Hi, I contribute to SteamTinkerLaunch every so often and sometimes check in with the community around it. I thought I'd chime in: SteamTinkerLaunch can be installed in a couple of different ways: Package manager, manually (both root and non-root, though non-root is very much untested), Flatpak Steam as noted, and on Steam Deck it is installed non-root but with some special magic to get it to work on Steam Deck. The script performs checks to see if it is running on Steam Deck and disables things like the notifier and tray icon and whatnot (I believe the Steam Deck is missing some packages to get this to work). When installed from the package manager, SteamTinkerLaunch is usually installed to To install on Steam Deck, the user must run the shell script from the command line (e.g. For more information please see the SteamTinkerLaunch Installation wiki. This also notes some hard and optional dependencies requires by SteamTinkerLaunch. The most notable one that some distributions will likely not meet is requiring a Yad version that is not ancient 😅 I think SteamTinkerLaunch would be an excellent addition to ProtonUp-Qt, I actually found this issue coming to suggest it myself! But if it's to be added I think it would be best if it's able to be installed for Steam Deck, for Flatpak Steam and for a regular Linux desktop, and I see a few hurdles with this. Given the functionality already present in ProtonUp-Qt I could see checking if the user is using Flatpak Steam and installing the SteamTinkerLaunch Flatpak in that case being relatively straightforward 😄 For Steam Deck, that might be a bit less trivial, as it has to be installed in a specific way as mentioned above. I suppose some kind of hardcoded check could be done for SteamOS? There's also the issue that Steam Deck is only supported in SteamTinkerLaunch >= v10. Flatpak support may be partially available for v10, but the only official release with Flatpak support is v11. That brings us to installing on a regular Linux desktop, which I could see being a little more troublesome. Probably, the solution here would be to do a non-root manual install of SteamTinkerLaunch. The trouble is, this is almost entirely untested, ProtonUp-Qt would probably have to do the heavy lifting of adding SteamTinkerLaunch to the path, and also requires the user to set their language to a corresponding SteamTinkerLaunch translation file with the command Finally, SteamTinkerLaunch package manager packages tend to be a bit all over the place, with some offering latest Git builds and some offering stable builds. SteamTinkerLaunch tends to have reasonable gaps between releases with not really any "bugfix" releases, so there can be very desirable features only available in Git releases for a few months. For that reason it might be nice to provide an option to use a "Git" release of SteamTinkerLaunch for users as well. I know that's a lot but I wanted to give as much background as possible on how SteamTinkerLaunch installs work and provide ideas on how one might go about adding it 😄 I'm a bit handy with Python but not yet familiar with how ProtonUp-Qt works. if this isn't a priority I could take a look at adding it, but if anyone is already working on it or wanting to work on it please go ahead. I might not be able to figure out how to add it anyway 😅 EDIT: Started some initial work on a fork getting a SteamTinkerLaunch source added. Not sure how far I'll get but right now I'm able to get it to download SteamTinkerLaunch at least. That's one step out of the way 😅 Now I just gotta implement the steps I outlined above. Hopefully I can get there! |
Thank you for the detailed information.
A simple
Does it do anything else than copying some files over to
That's what we want to do. I think ProtonUp-Qt should only install compatibility tools per user.
We should be able to map the country code e.g. de-DE to german.txt automatically, otherwise fall back to english.
Can we store it in
Showing/downloading the Git repo as zip in addition to the release archive isn't a problem.
I had a look at the installation wiki a few days ago and it was quite overwhelming ;)
That's great! Any progress is welcome. If there's something specific to ProtonUp-Qt that doesn't work right, I can implement it afterwards. |
Thank you for the responses! That answers a lot of the questions I was trying to figure out last night 😅
That's a good point and I'd like to clarify a little. The This symlink points to wherever SteamTinkerLaunch is downloaded to. However, running any SteamTinkerLaunch command for the first time, including For SteamTinkerLaunch Flatpak I believe this is all taken care of, I remember some discussion about running it automatically when the feature was in development. I don't have Flatpak Steam on any of my machines but our Steam Flatpak wiki page (written up by a major contributor of Flatpak support) seems to imply that it's all taken care of "automagically" :-) Looking at the Flatpak yml to my untrained eye it seems like it runs
Just to confirm, as I'm unfamiliar with some of these more technical directory structures, this is separate from Thank you very much! |
Creating symlinks and creating new files is possible from inside the Flatpak if the Flatpak app has the needed permissions to the folders (actually creating symlink doesn't even require permissions as the target doesn't need to exist/be visible for the app).
For the ProtonUp-QT Flatpak: We need to give permission to this folder so that STL can create it.
I don't think we have to do much here other than launching the users default app store (e.g. Discover, GNOME Software) and open the STL page.
|
To my knowledge there isn't really a "standard" folder where SteamTinkerLaunch is installed on Steam Deck, basically wherever the user downloads it and runs the script from is the "install" folder on Deck 😄 I verified this on my Steam Deck with SteamTinkerLaunch installed. The symlink points to where I downloaded SteamTinkerLaunch on my Deck, and I couldn't find any STL folder outside of We could put it in Thanks again for all your insight and help 👍 |
My bad, when you install SteamTinkerLaunch on Deck, it actually creates a folder at There are various other dependencies (I guess Yad AppImage for example) which are in |
Woohoo, I was successfully able to implement a basic SteamTinkerLaunch source! For now I have only tested a Linux Desktop scenario, which would be the non-root manual installation I mentioned earlier. I tested on my laptop which didn't have SteamTinkerLaunch installed before and I was able to download and install it with ProtonUp-Qt! It also successfully added the script to the path so SteamTinkerLaunch can be used as a launch option! I still need to test Steam Deck, and partially related, I haven't even touched anything related to Flatpak permissions or STL Flatpak installation yet. I also have not fully tested the code that sets the language for SteamTinkerLaunch. Currently STL is downloaded and extracted to
Regardless of platform, we then add STL as a compatibility tool with From initial testing on the desktop this seems to work. However there is still some more work to do:
I'm happy with the progress that I've made so far. Once I've tested to make sure it works on Steam Deck and gotten some form of Flatpak support added, I'll get up a PR for review! The development effort is going on here for anyone interested. |
Awesome!
Maybe we can use
When we know all directories, I will add the permissions in the next release.
ProtonUp-Qt checks if STL is selected as a compatibility tool in the Steam game settings. It won't detect if it's just used as a command line option. ProtonUp-Qt/pupgui2/pupgui2.py Line 171 in 8c66d08
We can check if the command line contains stl , might be a bit hacky but should do the trick.
Adding following should do work: #constants.py
STEAM_BOXTRON_FLATPAK_APPSTREAM = 'appstream://com.valvesoftware.Steam.Utility.steamtinkerlaunch'
#pupgui2.py line 323
btn_dl_stl = QPushButton('Steam Tinker Launch')
layout1.addWidget(btn_dl_stl)
btn_dl_stl.clicked.connect(lambda: os.system('xdg-open ' + STEAM_STL_FLATPAK_APPSTREAM))
Thank you, that will be a great addition to ProtonUp-Qt and probably help a lot of people getting started with Linux gaming/Steam Deck! |
Thanks for all the help. I added the lines in the appropriate files to hopefully enable Flatpak support. Sadly it seems I was a little preemptive with proclaiming launch option support. For some reason I thought We could have a hardcoded list of shell profile files that correspond to each shell type. For example: I haven't yet tested on Steam Deck but I have some preliminary checks for it in place, I'll do some testing on Deck and report back once I have some good news 😄 GitHub is a little temperamental with trying to download SteamTinkerLaunch, it doesn't have a |
We can define a line to be added to the
I believe we have no other option. Opening a message asking the user to
Can't we use Alternatively, instead of adding the folder to PATH, we can create a symlink to
Yeah, there is a limit to how many requests you can make without specifying a Auth Token. You can get a personal access token from GitHub settings and write it to the environment variable
Awesome! |
Thank you!
We could, but There's no reason we couldn't download and extract to that folder that has all the STL files, but here's my thought process:
Prefix doesn't stand for anything, it's just the name that was given to the folder with the SteamTinkerLaunch install.
I didn't know about those files, though on desktop these files are not sourced (by Zsh at least) until the user logs in again. For Steam Deck, the
I actually really like this idea, but Steam Deck doesn't have On my laptop running Arch, A somewhat hacky solution would be to do some checks, though I don't even know if these would work:
Replacing I found this StackOverflow question which didn't really have a resolution, about a shell agnostic way of getting initialization files. Also this StackOverflow answer about So covering Bash with And of course before this, we'd check if that line is already in the files we're adding to, on Steam Deck and Linux Desktop (checking on PATH may not be enough in case there are different folders or whatever, checking for the path that we just installed to is more effective in my mind).
I wholeheartedly agree, doing this kind of heavy-lifting for the user would be ideal. |
So I just finished testing on Steam Deck and it works! SteamTinkerLaunch is able to perform a regular install and I'm able to launch games with it. Of course, there is still no launch option support since I haven't worked out a path forward (no pun intended) to add STL to the system path :-) I haven't been able to test Flatpak support yet but the code is there for it and it should hopefully work. To recap, here is currently what works:
Currently here is what does not work
So right now, the only problems left (assuming the download issue is a rate-limiting issue) is adding SteamTinkerLaunch to the path for the user, and once that's solved then there should be an option to install a Git release of STL. Once it can install a stable build it should just be a case of changing how STL is downloaded, the install process should be identical. After this I should be able to get a PR up for review 🥳 |
We can add the line in all shell rc files that exist. That way the user can use different shells.
Yes, probably the ...rc files are a better option
Great! I had a look at your code, should work fine inside Flatpak. 1e8c640 can be omitted. The Authorization header is already set for the requests.Session
One solution might be to get a list of commits from |
Ah! Not sure why I didn't think of this specifically, I think this solution is good. I'll work on adding STL to the path this way, hopefully it'll be straightforward enough 🙂
I figured, but that should be fine as STL Flatpak doesn't advertise support for using STL as a launch option. That should be managed by STL Flatpak I think 😄 Though it would be nice, I don't think it's up to ProtonUp-Qt to manage this if the feature itself isn't officially supported.
Ah! No worries, that was mostly just for testing. Thanks for the confirmation, I'll be sure to remove it before getting a PR up.
Sorry if I was unclear but I meant a Git download as in downloading the latest Git release, as in a release of STL from the latest Git commit which doesn't have a release yet (for example, I see ProtonUp-Qt has this option in its "About" menu: Maybe STL git should only be shown if this is enabled? In that case I guess downloading from the latest Git would be a case of Using the most bleeding-edge build of STL can be really beneficial as often there can be relatively significant gaps between releases, and sometimes users are asked to help test features in the latest master. So I would be keen to find a way to implement this 😄 |
So I've got STL adding to the path working. I tested with Bash, Zsh and Fish. It should also add to
Something occurred to me: Is there a way to specify a custom deletion method for compatibility tools? With something like Proton-GE you only have to remove the compatibility tool from
Also, unlike other compatibility tools, there is no real support for having multiple versions of STL installed at once. I'm not sure if maybe Boxtron/Roberta is also like this, but it is expected that a user will only have one version of STL installed at any given time. One benefit of having integration with ProtonUp-Qt means a user can upgrade/downgrade more easily 🙂 If we really wanted to manage multiple versions, we could run There is also the case of upgrading SteamTinkerLaunch. When upgrading we should basically do all the uninstallation steps except for removing the Is there an advisable way of setting "custom" uninstall/upgrade methods for compatibility tools? I noticed that ProtonUp-Qt was always marking STL as "unused". I did some digging into this and games using SteamTinkerLaunch as a compatibility tool seem to be marked as using I'm not too sure where this name comes from I'm afraid. If I select "SteamTinkerLaunch" from that dropdown, the game no longer uses any compatibility tool. It seems the cause of STL showing up as unused is a name mismatch. So next up is fixing this, then looking into adding some sort of upgrade/downgrade/remove path 😄 |
Actually, what I meant was that the Flatpak version of ProtonUp-Qt cannot read the global
I agree.
I don't think this is a problem.
Ideally, each
Probably because the internal name is different from the folder name which ProtonUp-Qt uses. In the game list it will also show the internal names if they differ. |
Hmm, this might have a few implications for other parts of the code actually but I'm not totally sure.
Once I get the ctmod working when running from source I'll do some AppImage and Flatpak testing 😄
For a non-root manual install, f you download a new release of SteamTinkerLaunch and the folder name changes, you have to run When installing via package manager/flathub/system-wide with
Sounds good 😄
The name set in one of the |
That's true. ProtonUp-Qt skips the checking altogether, when running inside Flatpak. Not sure how we can fix this.
I think |
So if a user tries to install Boxtron for example when running ProtonUp-Qt Flatpak and they're missing dependencies for Boxtron, is it up to the user to know that they are missing those dependencies? Basically if they install something like Boxtron and it won't run, the expectation is that the user should know that they don't have Boxtron's dependencies? If so, though not great, we can place the expectation on the user for SteamTinkerLaunch too. This isn't a worry for Steam Deck as the STL core dependencies are downloaded and set up through some Steam Deck-specific magic (and there are limitations here, such as having to use the Yad AppImage which doesn't support WebKit, so no built-in STL wiki browsing). The main issue here is for desktop users that want to install SteamTinkerLaunch but may be missing dependencies. We could add a list of dependencies to the information section of the Description of the ctmod though. Most distros will have most SteamTinkerLaunch's dependencies as they are fairly standard, the biggest exception being Does this compatibility skip apply to every compatibility tool? Sorry, I'm not totally familiar with the code so I'm not sure if it just skips the
There is a potential solution, though imo it's less than ideal: If we're running in a Flatpak, instead of checking Even if the above does work, this solution is less than ideal because there is the potential for fish configuration files to be left over if Fish is no longer installed. To get around this we could wrap the Fish path checks in a try/except, so if subprocess fails to call fish we can just assume the user doesn't actually have Fish installed. |
It's not an expectation, but rather a limitation by the Flatpak version. I'm not sure how one would do that.
If ProtonUp-Qt is running as Flatpak, it will just ignore the return value of
Can we include/download yad next to STL?
That's the way to go. Detecting if dependencies are installed outside the Flatpak is hard/requires more permissions than ideal and executing commands from inside Flatpak that run outside the Flatpak sandbox is not possible afaik.
Can we just add it to the path configuration file and don't care whether they are actually used? |
We could download yad and point STL to it, it allows for pointing to custom yad binaries. However I'm not sure if it's possible to build a portable non-root Yad and point SteamTinkerLaunch to it. There are also Yad AppImages but I believe these have limitations over a system Yad install. The STL Steam Deck wiki notes that the Yad AppImage used there doesn't have WebKit support, and the Custom Yad wiki page notes that there are custom AppImages available with WebKit support, but they are big and STL doesn't officially support or maintain them. I think maybe having a Yad AppImage with full WebKit support is probably the ideal but as mentioned this AppImage is apparently quite large and it seems like the repo for the custom Yad AppImage just hosts the scripts to compile it yourself, meaning we'd have to compile it with downloading STL. I'm not sure how to proceed on this front.
As far as I know with the Fish shell (though I'm not too familiar with it), that's not very easy. It seems like it may be possible to add it to the |
So I looked into resolving the mismatch between STL's internal name ( From what I looked into with GE-Proton and Proton-tkg, it seems like generally the internal name for compatibility tools is rarely different. But for some reason, STL uses a different internal name. Though this could be changed on STL side this wouldn't have any effect on older releases. I hope this isn't too forward but is there a way ProtonUp-Qt could add support for setting different internal names for ctmods? Or perhaps there's a different way to go about this. |
Currently, the display name is just set to the folder name: Line 368 in 430c116
Ideally, we wouldn't use a global function which just returns a list of folder names, but instead each ctmod would return a curated list of its own compatibility tools. I haven't gotten to implement it yet though. |
Thanks, I'll look into implementing something to fix this counting problem. I did some more research and it seems there may indeed be a way to set the path for fish from a text file rather than from Fish. I don't think this is an "intended" way but it might work. I'll do some playing around with it later and see if I can figure something out. It seems like we can simply write out to a file Still not totally sure how to fix the Yad/general dependency checking problems but I'll come back to that :-) |
I was able to implement adding to the Fish paths by writing to the I refactored the SteamTinkerLaunch-git ctmod to show branches instead of just Next up is implementing a fix for counting which games are using STL as a compatibility tool! I had a couple of other ideas I wanted to raise:
Not sure how to proceed with the dependency checking stuff from ProtonUp-Qt Flatpak. There's probably not much we can do really, SteamTinkerLaunch's dependencies are documented, though I am somewhat hesitant to just leave it up to the user to know what dependencies they need. On one hand a user should know what they're installing so should ideally know what STL is before installing it blindly through ProtonUp-Qt, and they should at least visit the STL docs to understand how to use it. In that regard, they should know that STL will need some additional dependencies. And the Steam Deck case is already covered by STL where it manages dependencies. On the other hand, it would be undesirable to have issues opened on this repo from users saying "STL doesn't work", or users trying to install STL through ProtonUp-Qt and it doesn't work, so they just abandon it and can't use STL. Though I still think it's a bit of a less-than-ideal approach, we could add a list of all the hard dependencies into the description. That way users can install it themselves - If they were missing the dependencies when running normally, they'd have to install them on their own. This way, we're telling users in the description of the ctmod what dependencies they need. Perhaps something along the lines of:
Thanks for all the patience over the last week. Your input has been vital, and hopefully this should be ready soon 🙂 |
PR is up!!!! I think further discussion should take place there 😄 |
(steamtinkerlaunch author here) Wow, thank you both @DavidoTek and @sonic2kk for the implementation and excellent collaboration! You rock! ❤👍 |
Great work guys! |
I did not understood much of what was going on, but it was a joy to follow through it this last week . |
Woohoo! This was just merged into main with 7ce49a5! Hope this turns out to be a useful addition, it was a lot of fun getting to contribute. Huge thanks to everyone here, the positive feedback here after the PR was opened was super encouraging 😃 You're all awesome! I hope anyone that uses the source finds it as useful as I did during tests on my Steam Deck. Happy tinkering! |
Yes, I too think it is a very useful addition for ProtonUp-Qt and was lots of fun. Thanks for all you support! 🥳 It's currently available in the AppImage release over here, a Flatpak update will follow soon. @everyone Feel free to do some testing and report any bugs/issues below. |
Steam should recognize the path after a re-login or reboot. I've released a new version, the SteamTinkerLaunch installer should work now: https://github.com/DavidoTek/ProtonUp-Qt/releases |
The installation is stuck at 99% on the Steam Deck (flatpak): |
Same problem here. Left the Deck installing STL for an hour but it wouldn't pass from "Extracting... 99%". |
When running ProtonUp-Qt 2.7.4 appimage I get this error in the console attempting to install steamtinkerlaunch: could not convert string to float: '0.40.0' It never appears to attempt to begin downloading. I'm running steam native on Kubuntu. Same occurs if I pick the git or regular versions. Edit: definitely has to do with yad. My yad version is 0.40.0. Edit: Resolved by removing the system yad and building per the docks: https://github.com/v1cont/yad#building-git-version |
You probably installed ProtonUp-Qt from the Discover app store, right? Can you @outerwinnie @BioIron open the Konsole app on the Deck and type following line:
Can you then send me the output text it shows when trying to install SteamTinkerLaunch? |
The code cannot handle version numbers with two decimal points. Fixed.
Yes, version |
Yes, i install it from the Discover app store. Here you have the output text:
|
Uh oh, looks like the check for writing to fish is wrong. It's only meant to be written to if that file exists but maybe the check needs adjusted (though it worked on my deck before without fish during development...) |
I had installed STL from Discover app indeed, but i uninstalled it soon after. I did not try to install the STL from protonup while the Discover app one was installed too (if that helps with anything).
|
Just in case you aren't aware as a few people that have left reviews aren't, STL from Discover is for Flatpak Steam. It says so on the page too. ProtonUp-Qt will install SteamTinkerLaunch for regular Steam (which is what the Steam Deck uses) Also the long percentages output is likely for SteamTinkerLaunch downloading all its dependencies, which only happens on Steam Deck. |
Probably caused by this line:
or should be replaced by and . Actually, the second part can be omitted. I will test and patch it.
UPDATE: Patched, 6919131 |
I guess this can be closed now. Added support for installing Steam Tinker Launch with v2.7.5, few bug fixes and improvements will be available in v2.7.6. |
I agree, thanks for allowing support and the awesome collaboration 🎉 Hoping to be able to give back a bit to other parts of ProtonUp-Qt as well going forward, I'll keep my eye out for anything I can contribute to 😉 |
I can confirm, with more than an emote now, than i had successfully installed STL without any issue in my Deck. |
I find installing 3rd party compatibility tools cumbersome on the steam deck, steamtinkerlaunch is no exception. Protonup-qt is a massive help. Could steamtinkerlaunch be added to the sources?
https://github.com/frostworx/steamtinkerlaunch
The text was updated successfully, but these errors were encountered: