# 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. ```bash 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: ```bash 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 M1–M7 mit Formatabsprache 6. `ffmpeg` nimmt auf, wandelt in H.264, verpackt in MPEG-TS und schickt es als RTP hinüber ## Tests ```bash 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.