VGA mit DualScreen am Raspi – zweiter Anlauf

Nachdem ich meinen Raspi irgendwann von Jessie auf Stretch aktualisiert habe, war mein USB2VGA-Adapter von DisplayLink nutzlos geworden. Der auf die armhf-Architektur portierte DisplayLink-Treiber steht für Stretch nicht zur Verfügung.

Ich hatte mich schon damit abgefunden, dass mein zweiter Monitor für immer dunkel bleiben würde, bis ich letzte Woche durch Zufall auf rasppishop.de das Gert VGA666-Board gesehen habe.

Gert VGA666-Board

Dort wurde die DualScreen-Funktionalität erwähnt und ich vertraute blind. Ein Bekannter warnte mich schon, dass er bei anderen Händlern gelesen hätte, dass es nicht so ohne weitere funktionierte.

Gestern konnte ich dann mein Gert VGA666 zusammenbauen, welches als Bausatz daher kommt. Man bekommt eine Platine, ein paar Widerstände und eine Buchsenleiste für die GPIO-Pins und natürlich eine DSub-VGA-Buchse. Man könnte das Gebilde auch komplett ohne den Bausatz nachbauen, denn die Schaltung ist kein Geheimnis. Infos gibts unter anderem über GitHub unter PiSupply. Das Löten erfordert keine besonders hohen Löterfahrungen und geht recht schnell mit Hilfe der Bestückungsanleitung aus dem Git.

Danach musste mein TekBerry-Gehäuse dran glauben, damit der VGA-Port seinen Weg nach draußen findet. Die notwendigen Treiber sind im Raspian bereits implementiert. Man muss das nur noch in der config.txt das DPI-Interface aktivieren und entsprechend einstellen. Jetzt kann man wahlweise HDMI, Composite oder eben VGA als primäre Anzeige verwenden. Mein Monitor am VGA lief sofort ohne Bildfehler, somit war meine Lötarbeit erfolgreich.

Nun kommt der schwierige Teil – nativ kann der der Raspberry auch im Jahr 2018 noch kein DualScreen. Man kann zwar zwischen Display per HDMI, SPI, DPI (VGA) und Composite wählen, aber es gibt in der Firmware per default nur ein Framebuffer-Device, sprich eine Adresse und einen Speicherbereich für die grafische Anzeige. Es gibt einen „workaround“ mit dem man wohl mittels omxplayer ein Video auf den zweiten Screen „zaubern“ kann, aber eben keinen Desktop. Wenn man sich in den Foren berichte zum Gert VGA666 durchließt, stößt man immer wieder an diese Grenze.

DualScreen am Raspi mit Beta-Firmware

Durch Zufall habe ich dann im Raspberry-Forum einen Beitrag von JamesH gefunden, der eben genau an dieser Problematik getüftelt hat, da auch mit den „originalen“ SPI-Touch-Displays kein DualScreen möglich ist. Er hat sich hingesetzt und die Firmware modifiziert, damit diese einen weiteren Framebuffer bereitstellen kann – also einen autarken zweiten Screen erzeugt, der dann über andere Software angesteuert werden kann.

Gesagt getan – Downgrade des Kernels auf meinem Raspi (es muss nämlich die Kernel-Umgebung exakt zur Firmware passen) und dann Kernel und Firmware von Jamesh in meinen Raspi gespielt. Ein paar Änderungen an der config.txt vorgenommen und dann den Raspi neu gestartet – jetzt wacht der zweite Monitor schon mal aus dem PowerSafe auf – bekommt also Signal aus dem Raspi.

Xorg – eine manuelle Konfig muss her

Nun blauäugig wie ich war habe ich meine „alte“ DualScreen-xorg.conf genommen und ein bißchen drin rumgeändert – aber es lief nicht. Der zweite Schirm bleibt schwarz – als primary Display zeigt er eine vermurkste  Grafik – irgendwas passt also nicht. Ein Test mit fbi (FrameBuffer Imageview) zeigt, dass ohne xorg beide Framebuffer sauber arbeiteten – aber warum klappt es mit meiner xorg.conf nicht?

Auch dieses Rätsel konnte ich heute nach nochmaligem Nachdenken und probieren rausfinden. Während USB2VGA-DisplayLink auf dem zweiten Monitor eine Farbtiefe von maximal 16-Bit erwartet, kam das Gert-Board damit nicht zurecht. Es möchte genau wie der HDMI-Port mit 24-Bit angesteuert werden. Nach Änderung der xorg.conf hat es sofort meinen zweiten Bildschirm erkannt und ich konnte (wie beim DisplayLink) dort einen zweiten Desktop mit zweitem Launcher und eigener Browserinstanz starten.

Wer, anders als ich, einen erweiterten Desktop nutzen möchte, kann in der xorg.conf Xinerama aktivieren. Alternativ dürfte auch Clone möglich sein, habe ich nicht getestet, weil ich es nicht brauche).

Nachtrag: ich nutze jetzt seit einigen Wochen Xinerama am Raspi mit HDMI und GERT-VGA – was soll ich sagen: ich bin sehr begeistert, denn es funktioniert tadellos und ohne merkliche Leistungseinbußen auf dem Raspi 3B+. 

Upgrade des Raspian-Systems

Damit bei einem Update des Systems der Bootloader und der Kernel im Beta-Status bleiben, muss man vor einer Systemaktualisierung die entsprechenden Pakete auf „hold“ setzen:

user@pi:~ $ sudo aptitude hold raspberrypi-bootloader
user@pi:~ $ sudo aptitude hold raspberrypi-kernel

Danach werden bei einem apt update und apt upgrade die beiden Pakete ausgelassen, aber das restliche System wird trotzdem aktuell gehalten.

Ich gehe davon aus, dass irgendwann der Kernel-Hack offiziell in das Raspbian einfließen wird.

Code-Schnipsel
config.txt
[...]

# GERT VGA666
dtoverlay=vga666
enable_dpi_lcd=1
#display_default_lcd=0    ## =1 macht den VGA-Ausgang zum primären Monitor
dpi_group=2
dpi_mode=35
start_x=1
max_framebuffers=2
framebuffer_priority=2   ## =2 macht den HDMI-Port zum primären Monitor wenn die Beta-Firmware eingespielt ist
xorg.conf
Section "Device"
 Identifier "hdmi"
 Driver "fbturbo"
 Option "fbdev" "/dev/fb0"
EndSection

Section "Device"
 Identifier "vga"
 Driver "fbturbo"
 Option "fbdev" "/dev/fb1"
EndSection

Section "Monitor"
 Identifier "Terra"
 Modeline "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync
 Option "PreferredMode" "1280x1024_60.00"
 Option "DPMS" "true"
EndSection

Section "Screen"
 Identifier "vga"
 Device "vga"
 Monitor "Terra"
 DefaultDepth 24
 SubSection "Display"
 Depth 24
 Modes "1280x1024"
 EndSubSection
EndSection

Section "Screen"
 Identifier "hdmi"
 Device "hdmi"
 Monitor "Terra"
 DefaultDepth 24
 SubSection "Display"
 Depth 24
 Modes "1280x1024"
 EndSubSection
EndSection

Section "ServerLayout"
 Identifier "default"
 Screen 0 "hdmi" 0 0
 Screen 1 "vga" RightOf "hdmi"
# Option "Xinerama" "on"
# Option "Clone" "on"
EndSection