Files
2026-08-22 20:34:42 +02:00

3.1 KiB
Raw Permalink Blame History

Miracast-Sender für Linux

Spiegelt den Bildschirm auf einen Fernseher, der im Screen-Mirroring-Modus auf eine Verbindung wartet. Am Fernseher muss nichts eingetippt werden.

sudo ./miracast-cast check     # Voraussetzungen prüfen
sudo ./miracast-cast scan      # Fernseher suchen
sudo ./miracast-cast cast      # verbinden und spiegeln

Warum das hier bessere Chancen hat als die Android-App

Damit ein Fernseher eine Miracast-Sitzung annimmt, muss sich der Sender als Wi-Fi-Display-Quelle ausweisen ein besonderes Kennzeichen in den WLAN-Suchpaketen. Auf Android ist das CONFIGURE_WIFI_DISPLAY und bleibt Systemapps vorbehalten; genau daran scheitert die App dort.

Unter Linux lässt sich dasselbe über wpa_supplicant setzen:

SET wifi_display 1
WFD_SUBELEM_SET 0 0006 0010 1c44 0032
                       │    │    └── 50 Mbit/s Durchsatz
                       │    └─────── Port 7236 für die Steuerverbindung
                       └──────────── Typ „Quelle“, Sitzung verfügbar

Deshalb sollte der Fernseher uns hier als das erkennen, was wir sind.

Voraussetzungen

  • WLAN-Karte, die Wi-Fi Direct beherrscht (iw list muss P2P-GO und P2P-client aufführen)
  • wpa_supplicant mit erreichbarem Control-Socket
  • ffmpeg
  • Rootrechte (der Control-Socket gehört root)
  • Ein DHCP-Client (dhclient, udhcpc oder dhcpcd) in der Wi-Fi-Direct-Gruppe holt sich der Rechner darüber seine Adresse

Verwaltet NetworkManager die WLAN-Karte, muss er sie loslassen:

nmcli device set wlan0 managed no
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -C /run/wpa_supplicant

Nützliche Schalter

Schalter Wirkung
--source test schickt ein Testbild statt des Bildschirms gut zum Ausprobieren
--source x11 / --display :0 bestimmter X11-Bildschirm
--source kms für Wayland-Sitzungen (braucht erweiterte Rechte)
--bitrate 12 Bitrate in Mbit/s
--max-height 720 begrenzt die Auflösung, spart Funkbandbreite
--peer AA:BB:… direkt eine bekannte MAC ansprechen, ohne Suche
-v ausführliche Ausgabe samt RTSP-Verkehr

Wie es abläuft

  1. wpa_supplicant meldet uns als Wi-Fi-Display-Quelle an
  2. Wi-Fi Direct sucht Geräte; Fernseher melden sich als „Bildschirm“
  3. Zuerst öffnet sich der Steuerkanal auf Port 7236 der Fernseher meldet sich nämlich von sich aus, sobald die Gruppe steht
  4. P2P_CONNECT baut die Direktverbindung auf, DHCP liefert die Adresse
  5. Der Fernseher ruft an; es folgt der Handshake M1M7 mit Formatabsprache
  6. ffmpeg nimmt auf, wandelt in H.264, verpackt in MPEG-TS und schickt es als RTP hinüber

Tests

python3 -m unittest discover -s tests -v

Der Durchlauf in tests/test_end_to_end.py baut einen Fernseher nach, der sich wie ein echtes Gerät verhält: Er ruft an, führt den kompletten Handshake und empfängt anschließend echtes Video, das mit ffprobe geprüft wird. Nicht abgedeckt ist die Wi-Fi-Direct-Verbindung selbst dafür braucht es WLAN-Hardware.