Skip to content

A magical game streaming and remote desktop tool for Linux

Notifications You must be signed in to change notification settings

colinmarc/magic-mirror

Repository files navigation

Magic Mirror 🪞✨

GitHub Actions Workflow Status Discord Server Release Client Release

This is a game streaming and remote desktop tool for Linux, featuring:

  • Headless, offscreen, multitenant rendering
  • No system dependencies; no desktop environment, dummy plug, docker, pipewire, etc required
  • Native linux containerization for running apps (the equivalent of unshare(1))
  • Up to 4k streaming (with support for 10-bit HDR in progres)
  • Very low latency (about 1 frame, plus network)
  • Local cursor rendering
  • Client support for macOS

Warning

Alpha software! Please submit any issues you encounter. Run the server with --bug-report to generate detailed logs and record videos to attach to your report.

Quickstart

Grab the latest release (link above), and run it on a server with a GPU:

$ cat > steam-bigpicture.toml <<EOF
command = ["steam", "-gamepadui"]
xwayland = true
EOF
$ ./mmserver --bind "<your local ip>:9599" -i steam-bigpicture.toml

You can replace steam with your app of choice, or even a full nested desktop environment like Sway.

And then on the client (after installing ffmpeg):

$ ./mmclient "<ip>:9599" steam-bigpicture --codec h265 --resolution 1080

This will work over the local network, or a private IP space like Tailscale. To serve over the public internet, TLS is required. See mmserver.default.toml for more detail on that and other configuration options.

For instructions on building the server and/or client yourself, see BUILD.md.

System Requirements

The following is required to run the server:

  • Linux 6.x (for Ubuntu, this means Mantic or Noble)
  • (For AMD/Intel cards) Mesa 24.1.x or later
  • (For NVIDIA cards) Vulkan drivers version 550 or later
  • XWayland (for X11 apps)

The following is required to run the client:

  • Ffmpeg 6.x

Encoder support

Hardware encoding, based on Vulkan Video, is needed to get the best performance and latency. CPU-based encode is available as a fallback, but it's much slower.

To see if your GPU supports video encoding, see the following matrix for your vendor: AMDNVIDIA

Note that with the ffmpeg feature, linking against a system-installed ffmpeg is supported, which may allow you to use specific CPU-based codecs not considered in this table.

Codec CPU AMD NVIDIA Intel1
H.264 ✔️ ✔️
H.265 ✔️ ✔️ ✔️
AV1 ✔️

Footnotes

  1. I don't have an Intel GPU available to test, and it's difficult to find information online about driver/card support for hardware encode. Please let me know how it goes!

About

A magical game streaming and remote desktop tool for Linux

Resources

Stars

Watchers

Forks

Packages

No packages published