-
-
Notifications
You must be signed in to change notification settings - Fork 480
[Exp]: UMU support #3724
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
[Exp]: UMU support #3724
Conversation
Using this branch, I noticed the umu runtime isn't downloaded at ~/.config/heroic/tools/runtimes from the Lutris API when the checkbox Use UMU as Proton runtime is checked. Is this intended or are users supposed build it and put it in that directory themselves? |
wait: haveToWait, | ||
gameSettings: settings, | ||
protonVerb: 'run', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
By the way, if you omit the verb, umu will default to using waitforexitandrun
verb which will block users from running more than 1 game in the same prefix. However, if heroic wants to allow users to run more than 1 game, then you could default to runinprefix
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we use waitforexitandrun
only for game executables to ensure we run in proper env. There is no reason for users to use same prefix for more than one game.
waitforexitandrun
acts as a safeguard to avoid situations where wineserver instance runs with fsync and the game needs that disabled.
that feature is not implemented yet, i simply just made it work again and haven't done anything on top of that yet |
I used one of the Alien Breed games that I know UMU has a fix installing physx. This is my result:
If I do the same in the main branch, the error doesn't happen. Something changed that makes running games with proton without the experimental feature fails to create a prefix (if the prefix is already there it works).
I wonder if this is an issue with UMU not knowing the game? because with proton 9 it shows the game title just fine (and it knows it's
|
constructor( | ||
filename: string, | ||
max_value_lifespan: number | null = 60 * 6, | ||
options?: { invalidateCheck?: (data: ValueType) => boolean } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should update the JSDoc above the method with this new option so it's more clear what it's used for
at least from the usage of this in this PR I'm not sure I understand why it's needed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I made invalidateCheck
to allow us to add additional checks on data. Useful for making sure we invalidate cache only when online for example. In case of umuId store, we use that to make a cache invalid only if the id wasn't found previously.
Hello, I don't know if this is a known issue or not, but UMU doesn't seem to work for sideloaded games on Linux. Everything works fine on the main Heroic branch. |
hmmm I cannot reproduce this, I sideloaded a game, all the process done with proton 9.5 and the UMU support enabled and it worked just fine can you share the logs when it fails? |
I still have the issue that, after installing a game (or deleting its prefix), if I launch it with Proton-GE without UMU it fails to launch (the first log in this message #3724 (comment)) |
Log for the game : cSENNjXteRS3ky69W8w9Ue-lastPlay.log It's a game that I download from Itch.io if you want to test in the same condition : https://sirtartarus.itch.io/after-the-curtain-call Additional information: Umu works fine for games from EGS. So I don't think it's a problem with my system. |
I just tried it and it worked fine for me. what I did was:
I have all these turned off
but I don't know why it works for you in the main branch and not in this branch |
I found the source of my problem. |
I think Heroic should attempt to search the user's PATH and prefer the system package if it's installed like Lutris does to avoid possible crashes. Because when using this branch and adding a DRM free game, the game will fail to launch when setting UMU as the runtime when the user already has a system umu-launcher installation that they built or packaged from their distro that is several commits ahead of the release fetched from the Lutris API. Here's the traceback: In the log, To fix this, just search the users PATH, prefer the one installed if found and otherwise use the one provided by Heroic. Here's the relevant snippet in Lutris: https://github.com/lutris/lutris/blob/master/lutris/util/wine/proton.py#L28 |
useful for use cases where we want to make sure that data won't be removed when offline etc.. in case of ULWGL we invalidate entries that are null
export function getUmuPath() { | ||
//TODO: figure out how to use searchForExecutableOnPath here | ||
|
||
const paths = ['/app/share', '/usr/local/share', '/usr/share', '/opt'] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the next release of umu-launcher, these values need to change because the system package is now distributed as a Python module. For this case, just search PATH for umu-run
instead of umu_run.py
:
const paths = ['/app/bin', '/usr/local/bin', '/usr/bin']
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Auto-installation is broken for two different reasons right now
It'd also be great to get Winetricks working, I'll see what can be done in that regard
@@ -302,14 +316,6 @@ async function prepareWineLaunch( | |||
} | |||
} | |||
|
|||
// Log warning about Proton | |||
if (gameSettings.wineVersion.type === 'proton') { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should probably still log this if UMU isn't enabled
- `isInstalled('umu')` was missing an await - `isUmuSupported` would return false if UMU wasn't installed, so the auto-install would never actually install UMU if it was missing
This seems to completely break it, not sure why yet but it's not necessary anyways
Running it with "" makes it try to run a file called "", which we don't want
When running winetricks against a non existent prefix, Heroic will create a prefix with a Steps to reproduce:
Or when the user selects a umu created prefix for the game, Heroic will create a Steps to reproduce:
In both of these cases, can we have Heroic not create the |
Also, Heroic is currently running winetricks inside the container when getting the dll or font list which has the risk of updating the runtime. In this case, I believe it should be safe to simply run winetricks outside the container when getting the font or dll list and only running winetricks inside the container when the user selects to install a verb. But if this is too much work, umu can have another environment variable to allow skipping runtime updates and Heroic can just set it in this case. |
I pushed a potential fix, could you retest ? |
Just retested and, yes, the bug is fixed. |
Since Open-Wine-Components/umu-launcher@7e00027 updates to the runtime can be disabled. So to prevent the runtime from being updated when using winetricks, just set |
Also, because Heroic is calling umu separately for the font and dll list, it looks like it can lead to the runtime being downloaded and installed multiple times if umu is not already installed for the user. Steps to reproduce:
Like I mentioned, I think this can be avoided by not calling winetricks for the fonts and dlls through umu. Or maybe to just get dll or font list in sequence instead async? |
I don't understand why we would need to disable runtime updates? |
Good find, I will fix it heroic side but it might be worth including some sort of lock file system in umu itself |
I just checked the code, they aren't running in parrallel |
The runtime is an environment to run games, so I think the runtime should only be updated during the process of launching a game, not when running winetricks verbs. I think it would be pretty annoying/confusing if the runtime gets updated when the user just wants to modify the wine prefix. |
A file lock system was merged in Open-Wine-Components/umu-launcher@a505a90 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The feature works as expected
Experimental feature with UMU support. The feature is enabled by default.
Requires user to manually putumu-run
inside$XDG_CONFIG_HOME/heroic/tools/runtimes/umu
based on: #3480
Use the following Checklist if you have changed something on the Backend or Frontend: