Weston, VNC Server

Im März letzten Jahres habe ich auf der Konferenz "Embedded Recipes" über unsere Arbeiten am Wayland-Kompositor Weston gesprochen und die gleichzeitige Nutzung mehrerer Backends demonstriert, wobei eine Weston-Instanz ihre Inhalte über unterschiedliche Pfade ausgibt, z.B.:

  • mit dem DRM-Backend auf einem lokalen Monitor,
  • mit dem neuen VNC-Backend über das Remote Framebuffer Protocol an einen anderern Rechner, auf dem ein VNC-Client läuft,
  • mit dem neuen PipeWire-Backend an eine separate PipeWire-Anwendung, die das Bild z.B. zum Video-Streaming oder zur Aufnahme in eine Datei komprimieren kann.

Der Mainline-Zustand

Während die nötigen Bausteine für Multi-Backend-Unterstützung und die Ausgabe über das PipeWire-Backend bis auf bereits integrierte vorbereitende Änderungen (!577, !1067, !1078) immer noch unter Review bzw. in Arbeit sind (!578, !879, !1071, multi-backend-pipewire), ist das VNC-Backend mittlerweile in den main-Branch aufgenommen worden (!880, !1022, !1021, !1070).

Das erlaubt es, einen Weston-Kompositor ohne lokale Anzeige laufen zu lassen, mit dem man sich z.B. über Port 5900 mit einem VNC-Client verbinden kann. Dank der verwendeten Neat VNC Server-Bibliothek werden Verschlüsselung per TLS und Authentifizierung über den lokalen Nutzeraccount unterstützt:

weston --backend vnc --width 1024 --height 768 --vnc-tls-cert tls.crt --vnc-tls-key tls.key

Die Vorbereitung von TLS-Schlüssel und -Zertifikat funktioniert genau so wie beim bereits vorher von Weston unterstützten RDP-Backend, mit dem die Ausgabe über das Remote Desktop Protocol an Windows-Rechner übertragen werden kann (Auszug aus der "man weston-vnc"):

openssl genrsa -out tls.key 2048
openssl req -new -key tls-key -out tls.csr
openssl x509 -req -days 365 -signkey tls.key -in tls.csr -out tls.crt

Ausblick

Neben der Multi-Backend-Funktionalität sind weitere Änderungen am VNC-Backend im Flug, die den VNC-Client zur Reduktion der Latenz den Cursor selbst zeichnen lassen (#67, !984), die Nutzung des OpenGL-Renderers mit dem VNC-Backend erlauben (!881), oder die Konfiguration der Framebuffergröße vereinfachen (!1072).

Wir arbeiten weiter daran, die ausstehenden Änderungen für Reviewer einfacher handhabbar zu machen und Stück für Stück in Form zu bringen, um schließlich auf dem main-Branch einen Weston Kompositor zu haben, der gleichzeitig auf dem lokalen Monitor ausgeben und via VNC ferngesteuert werden kann:

weston --backend drm,vnc --vnc-tls-cert tls.crt --vnc-tls-key tls.key

Noch etwas weiter in der Zukunft liegen mögliche Verbesserungen der Hardware- Beschleunigung. So könnte etwa Neat VNC die Renderbuffer vom Weston GL-Renderer direkt übergeben bekommen und hardwarebeschleunigte JPEG- oder h.264-Kompression implementieren.