In diesem Gast-Blogbeitrag von Integrated Computer Solutions (ICS) befassen sich die Autoren mit den Feinheiten der Spiegelung von Displays mit unterschiedlichen Auflösungen unter Verwendung von Yocto auf dem beliebten DART-MX8M-PLUS SoM von Variscite, das auf dem NXP i.MX8M Plus SoC basiert. Sie navigieren durch die Komplexität der Compositor-Auswahl und betonen die Effizienz einer vereinfachten Lösung.

Von Lisandro Pérez Meyer und Michael Dingwall, ICS

Hatten Sie schon einmal einen dieser Momente, in denen Ihre routinemäßige Einrichtung eingebetteter Geräte einen unvorhersehbaren Ruck bekommt? Vor kurzem sind wir bei einem Projekt auf ein solches Szenario gestoßen, bei dem der Kunde die Bombe platzen ließ: „Wir haben ein LVDS-Display, aber wir möchten, dass die Benutzer nach Belieben einen HDMI-Monitor anschließen können, um eine gespiegelte Darstellung der Anwendung zu erhalten.“

Klingt einfach, oder? Nicht so schnell. Sicher, in der X-Server-Ära war es ein Kinderspiel, dieses gespiegelte Display zu erhalten. Man richtet die richtige Konfiguration ein und voilà, der X-Server würde das Hauptdisplay nahtlos auf das neu angeschlossene Display spiegeln. Es würde so aussehen:

Grafik 1

Graphic 1

 

Aber mit der technischen Entwicklung – bye, bye X! – wurde dem ein Strich durch die Rechnung gemacht, was verhindert, dass der zweite Monitor die gleiche Auflösung wie der Hauptmonitor verarbeiten kann. Infolgedessen sehen Sie vielleicht etwas wie das hier:

Grafik 2

Graphic 2

Nicht gut. Zum Glück gibt es eine Lösung: Verwenden Sie die native Auflösung jedes Monitors und passen Sie den Inhalt des Fensters an. Auf diese Weise können Sie etwa Folgendes erreichen:

Grafik 3 

 

Graphic 3

Ah, das sieht viel besser aus! Aber bis wir diese Lösung gefunden hatten, mussten wir viel ausprobieren und mit verschiedenen Compositors experimentieren.

Reise von der Komplexität zur Einfachheit

Für die heutigen Techniker ist X ein alter Hut. Bei den beliebten Prozessoren der NXP i.MX8-Familie dreht sich jetzt alles um Wayland, ein Protokoll, das zwischen einem Compositor und einem oder mehreren Clients tanzt. Weston, die Referenzimplementierung von Wayland, ist sicherlich für viele Situationen geeignet. Aber wenn Sie Qt für Ihr Projekt verwenden, sollten Sie den Qt Wayland Compositor in Betracht ziehen.

Im Allgemeinen wird er Ihnen das Leben leichter machen. Aber – es gibt immer ein Aber – die Standardspezifikation von Wayland erlaubt es den Clients nicht, ihre Positionierung zu bestimmen. Das ist die Aufgabe des Fenstermanagers, der Teil des Composers ist.

Glücklicherweise kann das Wayland-Protokoll erweitert werden. Mit der IVI-Erweiterung (In-Vehicle Infotainment) können Clients eine ID angeben, damit der Composer weiß, wo das Fenster platziert werden soll. Wir fanden das vielversprechend – aber es stellte sich heraus, dass es auf Layouts auf dem primären Bildschirm ausgerichtet ist.  Sicher, wir könnten den Composer ändern, aber das ist ein zusätzlicher Zeitaufwand, den wir lieber nicht betreiben möchten.Stattdessen könnten wir zwei Fenster erstellen und sie vom Composer dort platzieren lassen, wo sie hingehören. Da wir Qt verwenden, versuchen wir es zunächst über den Qt IVI Compositor.

Fehlanzeige. Es hat sich herausgestellt, dass das nicht möglich ist, denn die Anforderungen legen zwar fest, dass der Benutzer einen HDMI-Monitor anschließen können muss, aber sie definieren nicht, welcher Monitor oder mit welcher Auflösung. (Derzeit kann Qt nur dann mit mehreren Displays umgehen, wenn die Auflösungen in einer Konfigurationsdatei fest kodiert sind).

Also, wir kehren zu Weston zurück, da es eine IVI-Erweiterung hat – Weston IVI-Shell.

Und … wieder einmal kein Glück. Zumindest standardmäßig verarbeitet der Weston Compositor nur Layouts auf dem primären Bildschirm. Das bedeutet, dass wir den Compositor modifizieren müssten, um die IVI-Shell verwenden zu können. Das ist zwar möglich, würde aber viel zusätzliche Zeit in Anspruch nehmen, also werden wir weiter nach Alternativen suchen.

Was ist mit Sway? Dieser Tiling-Wayland-Compositor könnte genau das Richtige sein – und da wir Yocto auf unserem Variscite DART-MX8M-PLUS-Board verwenden, das auf NXP i.MX 8M Plus basiert, ist er eine echte Option. Durch die Kombination mit wl-mirror konnten wir den Aufwand umgehen, zwei Fenster zu erstellen.

Die Spannung steigt, als wir diesen Ansatz ausprobieren.

Es ist definitiv praktikabel (juhu!) aber ein bisschen zu kompliziert für unseren Geschmack (buh!). Wir sind also auf der Suche nach einer schlankeren Lösung. Wie wäre es, wenn wir das gesamte Display-Verfahren mit nur einem einzigen Fenster vereinfachen würden?

Ein einziges Fenster

Weston kann mit mehreren Displays umgehen. Wenn ein neues Display angeschlossen wird, erweitert Weston den Desktop rechts neben dem ursprünglichen LVDS-Display. Stellen Sie sich also Folgendes vor: ein einziges Fenster mit einer Breite, die der kombinierten Breite des LVDS- und des HDMI-Displays entspricht, und einer Höhe, die der des größeren Displays entspricht. Stellen Sie sich vor, dass die Anwendung mühelos dieselben Inhalte sowohl auf dem LVDS- als auch auf dem HDMI-Bereich anzeigt und nahtlos auf Interaktionen reagiert. Klingt zu schön, um wahr zu sein, oder?

LVDS-HDMI

Nun, Überraschung – es funktioniert wie ein Zauber! Bei diesem raffinierten Ansatz übernimmt Qt die Schwerstarbeit, informiert uns über die Bildschirmgrößen und passt sich im Handumdrehen an. Wir haben das DART-MX8M-PLUS für unsere Untersuchungen verwendet, aber diese Lösung funktioniert mit jedem i.MX8-basierten SoM von Variscite. Dieser Ansatz erfordert zwar möglicherweise einen Speicherbereich, der größer ist als die Summe der beiden Displays – ein kleiner Nachteil – aber wir müssen nicht am Code des Compositors herumpfuschen, um die Displays zu spiegeln. Das ist ein Erfolg!

Obwohl wir die ganze Zeit über die Tools für eine „richtige“ Lösung hatten – das Jonglieren mit mehreren Displays, das Manövrieren von Fenstern im Compositor – erwies sich die Entscheidung für eine unkomplizierte Lösung letztendlich als schneller und genauso effektiv. Manchmal ist es wirklich entscheidend, es einfach zu halten.

Über Integrated Computer Solutions (ICS): 

ICS entwickelt erstklassige Softwareanwendungen und Touchscreen-Schnittstellen für eingebettete und vernetzte medizintechnische, industrielle und kommerzielle Produkte.

Über die Autoren:

Lisandro Pérez Meyer und Michael Dingwall sind Softwareingenieure bei ICS (www.ics.com).