Virtuelle Displays und Headless-Game-Streaming unter Linux — ohne EDID-Hacks
Warum Sunshine unter Linux kein echtes virtuelles Display hat, welche EDID-/Modeline-Hacks man heute braucht — und wie punktfunk eines bei Bedarf erzeugt, passend zum Client.
Du willst einen Linux-Gaming-PC auf ein anderes Gerät streamen — aber der PC läuft headless, oder die Auflösung des Clients passt nicht zum angeschlossenen Monitor. Bei Sunshine und Moonlight wird das schnell zum Kampf mit Dummy-Steckern, EDID-Overrides und handgeschriebenen Modelines. Hier steht, warum das so ist — und wie punktfunk diese ganze Ebene überflüssig macht.
Warum Sunshine unter Linux kein echtes virtuelles Display hat
Unter Windows kann sich Sunshine mit einem Indirect-Display-Treiber koppeln (dem bekannten IddSample) und so bei Bedarf einen virtuellen Bildschirm erzeugen. Unter Linux gibt es dafür kein eingebautes Gegenstück — Sunshine erfasst das Display, das der Compositor ohnehin bereitstellt. Ohne physischen Monitor, oder mit einem Monitor in der falschen Auflösung, gibt es schlicht keine brauchbare Fläche zum Erfassen.
Die Hacks, zu denen man heute greift
Um auf einem headless oder unpassend konfigurierten Linux-Host ein streambares Display zu bekommen, hat die Community einen ganzen Werkzeugkasten zusammengetragen:
- Physische Dummy-HDMI-/DisplayPort-Stecker, die einen angeschlossenen Monitor samt EDID vortäuschen.
- EDID-Overrides (eigene EDID-Blobs,
drm.edid_firmware), um eine Auflösung zu erzwingen. - Das `evdi`-Kernelmodul (DisplayLinks virtueller Display-Treiber) für einen Fake-Output.
- Selbst gebaute `cvt`-/`gtf`- + `xrandr`-Modelines für nicht standardisierte Auflösungen und Bildraten.
- Drittanbieter-Daemons wie `sunshine_virt_display`, die Teile davon automatisieren.
- Connect-/Disconnect-Skripte, die physische Ausgänge umschalten, damit nur der virtuelle erfasst wird.
Wo es bricht
Nichts davon ist first-class, also scheitert es auf bekannte Weise:
- Schwarzer Bildschirm nach dem Neustart, wenn Dummy-Stecker oder EDID-Override nicht erneut greifen oder sich der Seat ändert.
- CRTC-Neuzuweisung auf NVIDIA und Wayland-Compositorn wie Hyprland, die den virtuellen Output mitten in der Sitzung verschiebt oder verwirft.
- Unterschiede je Compositor — was auf reinem KMS läuft, läuft nicht auf wlroots oder Hyprland; X11 und Wayland brauchen jeweils eigene Tricks.
- Auflösung und Bildrate, die fast zum Client passen — mit schwarzen Balken oder erzwungener Skalierung als Folge.
Wie Windows und der Apollo-Fork das umgehen
Es ist nicht so, dass virtuelle Displays unter Linux unmöglich wären — Sunshine bringt nur keines mit. Windows hat den IddSample-Treiber, und der Apollo-/Artemis-Fork von Sunshine hat ein eingebautes virtuelles Display ergänzt. Beide zeigen das Modell: Der Host soll den Bildschirm bei Bedarf erzeugen, passend zum Client — nicht einen physischen ausleihen.
Wie punktfunk das löst — kein Dummy-Stecker, keine Modeline-Rechnerei
punktfunk behandelt das virtuelle Display als festen Bestandteil jeder Sitzung. Verbindet sich ein Client, erzeugt der Host einen virtuellen Output in genau der Auflösung und Bildrate des Clients und baut ihn am Sitzungsende wieder ab — mit RAII-Cleanup, sodass nach einem Absturz oder Neustart nichts zurückbleibt.
Da Linux keine einheitliche, compositor-übergreifende API dafür hat, liefert punktfunk pro Compositor ein Backend und wählt automatisch das passende:
- KWin —
zkde_screencast-Outputs, mit Custom-Modes für Bildraten über 60 Hz. - gamescope — headless in exakt WxH@Hz gestartet, dessen PipeWire-Node direkt erfasst.
- Mutter / GNOME — der D-Bus-
RecordVirtual-Monitor (headless validiert, Zero-Copy). - Sway / wlroots —
swaymsg create_outputmit Custom-Mode und Portal-Capture.
Das Ergebnis ist ein echter Headless-Host: ein Mini-PC oder ein zweitverwerteter Rechner ohne angeschlossenen Monitor, der in genau der Auflösung streamt, die dein Smartphone, Tablet, TV oder Laptop anfordert. Kein Dummy-Stecker, kein EDID-Blob, keine xrandr-Modeline-Mathematik und kein schwarzer Bildschirm nach dem nächsten Neustart.
Ausprobieren
Wenn du bisher mit EDID-Hacks jonglierst, um eine Headless-Linux-Kiste zu streamen, ist punktfunk genau dafür gebaut, diese Ebene verschwinden zu lassen. Hol dir den nativen Linux-Client, koppele ihn mit dem Host und lass ihn das Display für dich erzeugen.