loki-47-6F-64 / sunshine

Host for Moonlight Streaming Client
GNU General Public License v3.0
1.76k stars 155 forks source link

How to add Epic Store games as non-DRM? #287

Open redromnon opened 2 years ago

redromnon commented 2 years ago

Since Sunshine has no way to auto-detect games, one has to add the games manually.

Steam has commands to get games to launch easily. But Epic does not. So how should I add the game in Applications in such a way that that the game launches as an Epic game and not a DRM-free game?

TheSunCat commented 2 years ago

If you're on Windows, you can create a desktop shortcut for an Epic Games Store game and go to its properties to see the command used by the shortcut to launch it. Hope this helps :)

redromnon commented 2 years ago

If you're on Windows, you can create a desktop shortcut for an Epic Games Store game and go to its properties to see the command used by the shortcut to launch it. Hope this helps :)

You may know that Epic Games uses a URL shortcut as the launch command. I have already tried pasting it in the command section in the Application section.

But the stream closes as soon as I launch the game from the Moonlight client dashboard.

redromnon commented 2 years ago

I have attached the screenshot for reference - SunshineScreenshot

AeliusSaionji commented 2 years ago

Try start com.epicgames.launcher://apps/....

redromnon commented 2 years ago

Try start com.epicgames.launcher://apps/....

Still doesn't work. Says "GeForce Experience returned error: (Error 0)".

AeliusSaionji commented 2 years ago

ah, this was a tricky one.

I assume you're running sunshine as a service, yes?

Unfortunately, sunshine running as the system level user for the service will execute all games as the system level user. This is actually a pretty big problem with the way sunshine is currently set up.

Luckily, if steam is already running as your user, it will respond to game "URLs" with the existing process under your user.

Unluckily, epicgames isn't doing this. The epic URLs seem to not start under the user process when sunshine invokes them.

Luckily, you can bodge it through steam.

Make a shortcut to epicgamealauncher.

"C:\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe"

Add it to steam as a non steam game. Edit the properties. Rename it to the desired game. Add the epic games URL to the launch options.

It should look like this

image

Now in steam, create a desktop shortcut for this entry. Look at the shortcut. image Copy the steam url. Add the steam url to sunshine as a detached command. steam steam://rungameid/.... image

Now it should work- but only if steam was already running.

halcyonhippo commented 2 years ago

Probably not good for me to speculate, but have you looked at the 'legendary' project (https://github.com/derrod/legendary) at all? It is a CLI for launching games from the Epic Games Store. I cannot speak as to whether or not it will work for Sunshine.

I just learned about the Sunshine project about an hour ago and need to get it set up on my computer. My end goal is to have a Streaming option from Linux for my EGS games, as I have just been using SteamLink for most things. However, EGS is proving to be a pain due to how walled-off it is.

Hopefully I will have some time over this week to test Sunshine+legendary out. I'll report back on my findings, but do note that they will be for Linux.

redromnon commented 2 years ago

Probably not good for me to speculate, but have you looked at the 'legendary' project (https://github.com/derrod/legendary) at all? It is a CLI for launching games from the Epic Games Store. I cannot speak as to whether or not it will work for Sunshine.

I just learned about the Sunshine project about an hour ago and need to get it set up on my computer. My end goal is to have a Streaming option from Linux for my EGS games, as I have just been using SteamLink for most things. However, EGS is proving to be a pain due to how walled-off it is.

Hopefully I will have some time over this week to test Sunshine+legendary out. I'll report back on my findings, but do note that they will be for Linux.

Yes, I'm very familiar with Legendary. I use Heroic Games Launcher (that's based on Legendary) on my Linux machine.

I have considered using either Legendary or Heroic as a Plan B if Sunshine+Epic doesn't work out.

halcyonhippo commented 2 years ago

Ahh, yes Heroic Games Launcher is what I am using myself. I was able to get Heroic to dump the Legendary launch command and tried to put that in Steam (my guinea pig since I don't have Sunshine installed yet), but that did not work. It seems Legendary cannot properly identify my 'installed games' when executed via Steam. However, directly running the dumped Legendary command on the command line does indeed launch the game without issue.

legendary launch 514e4ea2498048bbb989bbe5766ac00f --wine "/path/to/wine/bin/wine64" --wine-prefix "/path/to/prefix/Games/EdgeOfEternity"

Adding the --dry-run flag gave me a dump for how to launch the authenticated game directly:

wine64 game.exe -AUTH_LOGIN=unused -AUTH_PASSWORD=<the_session_password_from_legendary> -AUTH_TYPE=exchangecode -epicapp=<app_name> -epicenv=Prod -EpicPortal -epicusername=<my_epic_username> -epicuserid=<my_epic_user_guid> -epiclocale=en

This command successfully launches the game from steam, but it contains session-specific identifiers. I assume these identifiers change whenever my session expires, so this shortcut will quit working after a short while.

Just wanted to report what I found so far in case it helps you get a little further.

redromnon commented 2 years ago

Any luck with using batch files that contain the launch Epic command?

halcyonhippo commented 2 years ago

Any luck with using batch files that contain the launch Epic command?

Wrapping the legendary launch command in a shell script did let Steam launch the game successfully. I did not try Epic directly as that lives in a separate wine prefix than where each of my games live. Legendary is required for my setup.

I apologize for being off-topic with my Steam talk, but I wanted to reply to say thanks for the suggestion to wrap it in a script! TO return to topic, I do want to see how this goes with Sunshine still, but it's going to be another day or two before I can get that installed to try out. I did not want to leave you hanging.

AeliusSaionji commented 2 years ago

Could @redromnon confirm for us if

redromnon commented 2 years ago

Could @redromnon confirm for us if

  • You are on Windows
  • You are using the service?

Yes, I'm on Windows and using Sunshine to stream my games to my Linux machine.

AeliusSaionji commented 2 years ago

It makes a difference if you're using the Windows service or just running sunshine directly, and we need to know which you're doing.

If you are using the service, then there's a clear Windows specific permission issue that unfortunately linux testing won't really have relevance to.

redromnon commented 2 years ago

It makes a difference if you're using the Windows service or just running sunshine directly, and we need to know which you're doing.

If you are using the service, then there's a clear Windows specific permission issue that unfortunately linux testing won't really have relevance to.

I've installed Sunshine through the install-service bat file that came with the zip folder.

Hope this makes it clear.

AeliusSaionji commented 2 years ago

Yep! That service is being executed with system level permissions under a system user. Any process you start through sunshine will inherit that context.

This is basically just a bug sunshine needs to fix (or rather, changing the user context is a feature that needs implementing now that we have a service).

Until then, we only have workarounds. The launch-through-steam workaround I shared above I can confirm works. You can try legendary/heroic and see what happens, but I doubt they will.

halcyonhippo commented 2 years ago

Hmm, this makes sense. Legendary uses the following python lines to acquire the user.json file which is created to store your EGS auth tokens when doing the initial legendary setup via the command 'legendary auth':

self.path = os.path.expanduser('~/.config/legendary') ... self._user_data = json.load(open(os.path.join(self.path, 'user.json')))

If you can manipulate the environment variables the python command os.path.expanduser() utilizes to resolve '\~' on Windows, or figure out '\~' resolves to for a system service, you may be able to get Legendary to work.