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 listmussP2P-GOundP2P-clientaufführen) wpa_supplicantmit erreichbarem Control-Socketffmpeg- Rootrechte (der Control-Socket gehört root)
- Ein DHCP-Client (
dhclient,udhcpcoderdhcpcd) – 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
wpa_supplicantmeldet uns als Wi-Fi-Display-Quelle an- Wi-Fi Direct sucht Geräte; Fernseher melden sich als „Bildschirm“
- Zuerst öffnet sich der Steuerkanal auf Port 7236 – der Fernseher meldet sich nämlich von sich aus, sobald die Gruppe steht
P2P_CONNECTbaut die Direktverbindung auf, DHCP liefert die Adresse- Der Fernseher ruft an; es folgt der Handshake M1–M7 mit Formatabsprache
ffmpegnimmt 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.