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:

  • Multi-user: Share a single remote host hardware with friends or colleagues, each streaming their own content (gaming, productivity, or anything else!)
  • Headless: Create virtual desktops on demand, with automatic resolution and FPS matching, without the need for a monitor or dummy plug
  • Advanced Input Support: Enjoy seamless control with mouse, keyboard, and joypads, including Gyro and Acceleration support (a first in Linux!)
  • Low latency: Uses the Moonlight protocol to stream content to a wide variety of supported clients.
  • Linux and Docker First: Our curated Docker images include popular applications like Steam, Firefox, Lutris, Retroarch, and more!
  • Fully Open Source: MIT licensed, and we welcome contributions from the community.

Interested in how this works under the hood? You can read more about it in our developer guide or deep dive into the code.

  • mrvictory1@lemmy.world
    link
    fedilink
    English
    arrow-up
    12
    ·
    4 months ago

    I tried to do sth similar with limited success using Steam remote play. This is great but I have 2 questions:

    • Did you look into memory deduplication?
    • Is client software sunshine or custom software?
    • abeltramo@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      29
      ·
      4 months ago

      Great questions!

      Did you look into memory deduplication?

      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?

      Is client software sunshine or custom software?

      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…

      • mrvictory1@lemmy.world
        link
        fedilink
        English
        arrow-up
        10
        ·
        4 months ago

        For the Steam library I suppose?

        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

  • Norah - She/They@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    8
    ·
    4 months ago

    Does this automatically use nvidia-patch in the container drivers to unlock as many NVENC streams as possible? I believe, from their documentation, that it’s possible to use the patch with docker, with an unpatched host.

    Otherwise, is this something that could be implemented? I’m happy to submit a feature request if needed :)

    • abeltramo@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      6
      ·
      4 months ago

      The patches aren’t included by default because I’m not sure about the legality of them and I really don’t want to get into troubles over this. I should research a bit more into this though.

    • acockworkorange@mander.xyz
      link
      fedilink
      English
      arrow-up
      3
      ·
      4 months ago

      I’m really curious about the motivation behind such permissive licensing too.

      The project is yours, you can always distribute a commercially licensed version of it regardless. GPL or any other license will never be a hindrance.

      The only thing a permissive license does is allowing everyone else to issue commercial versions of it without even sharing source code.

  • binomialchicken@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    5
    ·
    4 months ago

    Does the server have to run headless, or can one person still run games locally on it while another has a remote session? That is, would I be able to play on the monitor/mouse/keyboard directly attached, while my partner has a session on a laptop?

    • abeltramo@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      5
      ·
      4 months ago

      Yep that’s perfectly possible, the sessions that will run under Wolf will be completely isolated from the host. Besides, that’s how I run it on my desktop dev machine!

  • LifeBandit666@feddit.uk
    link
    fedilink
    English
    arrow-up
    1
    ·
    4 months ago

    I’ve passed my display through to a VM in Proxmox for transcoding and now I can’t get the GUI for that VM.

    Is this something that would allow me to connect to that VM on another PC and use a virtual desktop?

    If so, I may have to have a play with it. I mean I’m happy away using SSH but why not have UI if I can?

    • abeltramo@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      4 months ago

      Yep, this is one of the main reasons why I started this project in the first place: I wanted to stream games from the same VM where Jellyfin is running.

  • Upronn@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    4 months ago

    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?

    • abeltramo@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      4 months ago

      Is each “game entry” in moonlight a shared instance?

      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.

      How would I go about making a generic linux desktop from a given Linux distro?

      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.

  • TMP_NKcYUEoM7kXg4qYe@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    4 months ago

    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.

    • abeltramo@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      4 months ago

      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…