After 3 years in the making I’m excited to announce the launch of Games on Whales, an innovative open-source project that revolutionizes virtual desktops and gaming. Our mission is to enable multiple users to stream different content from a single machine, with full HW acceleration and low latency.
With Games on Whales, you can:
Interested in how this works under the hood? You can read more about it in our developer guide or deep dive into the code.
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don’t control.
Rules:
Be civil: we’re here to support and learn from one another. Insults won’t be tolerated. Flame wars are frowned upon.
No spam posting.
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it’s not obvious why your post topic revolves around selfhosting, please include details to make it clear.
Don’t duplicate the full text of your blog or github here. Just post the link for folks to click.
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
No trolling.
Resources:
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
Does it support multiple screen/displays?
It does! It’ll automatically create new virtual displays on demand when a new client connects and it’ll match the client resolution and framerate.
How so you force steam to run multiple instance of the same game ?
Or just multiple different games at once?
As others have pointed out below it’s going to run multiple separated instances of Steam with the limitations that Valve impose (there’s not much we can do there). This project is not limited to Steam though, you could easily run another session from a different device with something like Lutris or Pegasus.
I tried to do sth similar with limited success using Steam remote play. This is great but I have 2 questions:
Great questions!
For the Steam library I suppose? There’s been some discussions around it both in Discord and Github #83 #69 It’s something that I should definitely research further but I’d really like to address it even if it’s just something that might be done outside of our container… Would you like to help us?
Wolf is an implementation of a full Moonlight backend from scratch; there’s has been many reasons for this but mostly it’s because Sunshine has a lot of global and intertwined state and it would be very hard to add support for multiple independent users. I try to contribute upstream where possible; for example I’ve helped merging our custom library for virtual inputs so that users of Sunshine could also benefit from the new virtual joypad implementation and support for Gyro, Acceleration and so on…
I meant RAM deduplication. https://duckduckgo.com/?q=linux+same+page+merging&t=fpas&ia=web
For on disk deduplication, Steam supports user-specified locations for installing games and dependencies like Steam Linux Runtime. 2 users can theoretically use the same Steam library at the same time. To evade issues, auto updates should be disabled in the Steam clients. Steam doesn’t support completely disabling updates afaik, the best is setting update period to 3.00-4.00 AM. DXVK cache files must be located outside the Steam library folder. Otherwise if 2 people play the same game with Proton at the same time, cache files may be corrupted. (the default is the folder with game exe) Info on changing cache file location: link
Looks awesome! Any idea if this will run on WSL?
Excellent work! I am glad to see this project coming along nicely.
I tested it a while back and was looking forward to updates. I have a few questions:
Is each “game entry” in moonlight a shared instance? If a player loaded it up, would they share save files with others that have already played? Also what would happen if two players loaded the app at the same time?
How would I go about making a generic linux desktop from a given Linux distro?
Quite the opposite, at the moment each Moonlight client will have a completely isolated session and they can play different games. This obviously defeats co-op which is something that I’d like to work on by adding proper user management and a remote UI in the next release.
In our latest images we have default support for Sway, you could easily expand that base Dockeer image with all the apps you need or make a different image with the DE that you’d like to use. The project is very open ended and only a few base components are needed in order for any image to be streamed to a remote client.
This sounds awesome but not sure it would apply to my use case. Maybe you could elaborate.
What I want is to have 1 pc be a host for all the tvs in my house (4, master bedroom, guest room, office, and living room) each room has a video output and a usb cable with a hub that has keyboard and mouse and maybe a controller for games.
So far what I have is all the displays are mirrored and the keyboard and mice and joysticks work in each room but all the displays show the same thing.
It would be rad if each one was a vm and had its own front ends so you could watch plex in one room while someone plays Dave the diver in another.
Sounds like this is exactly what this is capable of: you run Wolf on one beefy machine, and then you connect to it from multiple clients to play games or run a full desktop remotely!
It’s probably a skill issue but don’t really know how to setup desktop streaming. I’ve tried
[[apps]]
title = "Desktop"
[apps.video]
source = "pipewiresrc capture-screen-cursor=true capture-screen=true"
But it just shows black screen.
Might be worth to open up an issue on Github or a thread on Discord. I haven’t tested
pipewiresrc
but there’s probably some clue in the Wolf logs. Besides, have you mounted the host XDG_RUNTIME_DIR, passed the right env variables and so on?For streaming the host desktop Sunshine might be a better fit btw…