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

82 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 M1M7 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.