Arduino UNO Q – Kein Videosignal über USB-C DisplayPort Alt Mode wegen falschem bevorzugtem Displaymodus

Arduino UNO Q – Kein Videosignal über USB-C DisplayPort Alt Mode wegen falschem bevorzugtem Displaymodus

Kurzfassung

Ich hatte ein Problem mit meinem Arduino UNO Q: Das Board bootete korrekt in Debian und war vollständig per SSH/Netzwerk erreichbar, aber über USB-C DisplayPort Alt Mode wurde auf keinem Monitor ein Bild angezeigt.

Der Monitor zeigte immer nur:

No Signal

und ging danach in den Standby-Modus.

Nach weiterer Fehlersuche stellte sich heraus, dass der Displayausgang grundsätzlich funktioniert. Das Problem war der automatisch gewählte bevorzugte Displaymodus des Monitors:

1024x600 @ 59.85 Hz

Dieser Modus wurde von Linux korrekt erkannt und auch als aktiv gesetzt, erzeugte aber über mein USB-C-Hub-/HDMI-Setup kein nutzbares Bildsignal.

Sobald ich manuell folgenden Modus erzwungen habe:

1920x1080 @ 60 Hz

war sofort ein Bild sichtbar.


Hardware / Setup

Verwendete Hardware:

  • Board: Arduino UNO Q
  • Betriebssystem: offizielles Arduino Debian Image
  • Kernel:
Linux dashboard 7.0.0-g122c2c22d838

Display-Verkabelung:

Arduino UNO Q
→ USB-C DisplayPort Alt Mode
→ USB-C-Hub mit HDMI-Ausgang
→ HDMI-Monitor

Getestete Hardware:

  • Anker 332 USB-C Hub 5-in-1
  • weiterer USB-C-Hub mit HDMI-Ausgang
  • HAMTYSAN 10.1" HDMI-Monitor mit 1024x600
  • normaler HDMI-PC-Monitor
  • mehrere HDMI-Kabel

Beide Monitore funktionieren an einem normalen Windows-PC problemlos.


Ursprüngliches Fehlerbild

Der UNO Q bootete normal. Folgende Dinge funktionierten:

  • Debian Linux
  • SSH
  • WLAN
  • USB
  • Xorg
  • LightDM
  • XFCE

Trotzdem zeigte der Monitor immer:

No Signal

Das System war also vollständig erreichbar, aber lokal war kein Bild sichtbar.


Erste Diagnose

Die Grafikdiagnose sah zunächst so aus, als wäre alles korrekt initialisiert.

modetest und xrandr zeigten:

DP-1 connected
link-status: Good
DPMS: On
EDID erkannt

Der bevorzugte erkannte Modus war:

1024x600 @ 59.85 Hz

xrandr zeigte sinngemäß:

Screen 0: minimum 320 x 200, current 1024 x 600, maximum 16383 x 16383
DP-1 connected primary 1024x600+0+0
   1024x600      59.85*+
   1920x1080     60.00
   1280x720      60.00
   ...

Aus Linux-Sicht war der Monitor also verbunden, EDID wurde gelesen, und ein aktiver Displaymodus war gesetzt. Trotzdem blieb der Bildschirm schwarz beziehungsweise zeigte „No Signal“.


Entscheidender Fund

Per SSH habe ich dann folgenden Befehl ausgeführt:

sudo env DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 \
xrandr --output DP-1 --mode 1920x1080 --rate 60

Danach war sofort ein Bild sichtbar.

Damit war klar:

  • Der USB-C-/DisplayPort-Alt-Mode-Ausgang funktioniert grundsätzlich.
  • Der HDMI-Hub kann ein Bild ausgeben.
  • Der Monitor kann ein gültiges Signal empfangen.
  • Der UNO Q Displayausgang ist sehr wahrscheinlich nicht defekt.

Das eigentliche Problem war offenbar der automatisch gewählte bevorzugte Modus:

1024x600 @ 59.85 Hz

Dieser Modus wurde von Linux zwar als gültig erkannt und aktiviert, führte aber in meiner USB-C-DisplayPort-Alt-Mode-zu-HDMI-Kette zu keinem sichtbaren Signal.

Der Standardmodus:

1920x1080 @ 60 Hz

funktioniert dagegen zuverlässig.


Xauthority-Problem bei xrandr über SSH

Zuerst habe ich versucht:

sudo DISPLAY=:0 XAUTHORITY=/var/lib/lightdm/.Xauthority xrandr

Das funktionierte in einem Zustand, schlug später aber fehl mit:

Authorization required, but no authorization protocol specified
Can't open display :0

Die richtige Xauthority-Datei habe ich über den laufenden Xorg-Prozess gefunden:

ps aux | grep -E "Xorg|X " | grep -v grep

Ausgabe:

/usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch

Deshalb war der funktionierende Befehl:

sudo env DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 \
xrandr --output DP-1 --mode 1920x1080 --rate 60

Dauerhafter Workaround

Damit ich den Befehl nicht nach jedem Start manuell per SSH ausführen muss, habe ich ein Script angelegt:

sudo nano /usr/local/bin/fix-display-mode.sh

Inhalt:

#!/bin/sh

sleep 4

env DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 \
/usr/bin/xrandr --output DP-1 --mode 1920x1080 --rate 60

exit 0

Dann ausführbar gemacht:

sudo chmod +x /usr/local/bin/fix-display-mode.sh

Danach habe ich einen systemd-Service erstellt:

sudo nano /etc/systemd/system/fix-display-mode.service

Inhalt:

[Unit]
Description=Force working display mode on DP-1
After=lightdm.service
Wants=lightdm.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/fix-display-mode.sh
RemainAfterExit=yes

[Install]
WantedBy=graphical.target

Service aktiviert und gestartet:

sudo systemctl daemon-reload
sudo systemctl enable fix-display-mode.service
sudo systemctl start fix-display-mode.service

Statusprüfung:

systemctl status fix-display-mode.service

Der Service läuft erfolgreich:

Active: active (exited)
ExecStart=/usr/local/bin/fix-display-mode.sh (code=exited, status=0/SUCCESS)

Nach einem Reboot erscheint das Bild nun automatisch.


Skalierung / DPI-Anpassung

Nach dem Erzwingen von 1920x1080 war das Bild sichtbar, aber die Oberfläche war zu klein. Deshalb habe ich in XFCE die DPI auf 144 gesetzt, was ungefähr einer 1,5-fachen Skalierung entspricht.

Dafür musste zuerst dbus-x11 installiert werden:

sudo apt install dbus-x11

Dann habe ich die DPI gesetzt:

sudo -u arduino DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 \
xfconf-query -c xsettings -p /Xft/DPI -n -t int -s 144

Prüfung:

sudo -u arduino DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 \
xfconf-query -c xsettings -p /Xft/DPI

Ausgabe:

144

Fazit

Das ursprüngliche Problem sah zunächst aus wie ein kompletter Ausfall des Videoausgangs, weil der Monitor nur „No Signal“ angezeigt hat.

Tatsächlich funktionierte der Displaypfad aber grundsätzlich. Das Problem war der automatisch ausgewählte bevorzugte EDID-Modus:

1024x600 @ 59.85 Hz

Dieser wurde von Linux erkannt und als aktiv gesetzt, erzeugte aber über mein USB-C-DisplayPort-Alt-Mode-zu-HDMI-Setup kein nutzbares Signal.

Das Erzwingen von:

1920x1080 @ 60 Hz

behebt das Problem.

Mögliche Ursachen:

  • EDID-/Preferred-Mode-Problem
  • Timing-Inkompatibilität mit 1024x600 @ 59.85 Hz
  • Problem bei USB-C DisplayPort Alt Mode zu HDMI-Konvertierung
  • Kernel-/DRM-/Bridge-Treiber-Verhalten beim automatischen Moduswechsel

Der aktuelle Workaround besteht darin, nach dem Start von LightDM automatisch per xrandr den funktionierenden Modus 1920x1080 @ 60 Hz zu setzen.

Ich hoffe ich konnte damit etwas weiterhelfen.

Falls jemand eine bessere Lösung findet, darf er gerne dieses Thema erweitern oder einfach den genannten Lösungsweg für sich probieren, falls er oder sie, ebenfalls auf die genannten Probleme stößt.

Glückwunsch :waving_hand:
Chapeau. Nicht schlecht für einen ersten Forenbeitrag :+1:

Du könntest Deinen Beitrag auch in Englisch in der UNO Q Sektion posten (Mit Hinweis auf diesen Post im deutschen Teil).

Grüße Uwe

Danke dir für dein Feedback. Hab ich soeben gemacht :grin:

Ich habe Ihren anderen Beitrag zum selben Thema gelöscht, @lxnx382 . Das Veröffentlichen mehrerer Beiträge in verschiedenen Threads verstößt gegen die Regeln des Arduino-Forums [Guidelines - Arduino Forum]. Der Grund dafür ist, dass doppelte Beiträge die Zeit derjenigen verschwenden, die helfen möchten. Jemand investiert möglicherweise viel Zeit in die Recherche und das Verfassen einer ausführlichen Antwort zu einem Thema, ohne zu wissen, dass jemand anderes dies bereits in einem anderen Thema getan hat. Wiederholtes Veröffentlichen mehrerer Beiträge kann zu einer Sperrung des Forums führen. Bitte erstellen Sie zukünftig für jedes Thema einen eigenen Thread. Dies entspricht den grundlegenden Regeln der Forenetikette, wie im [Leitfaden „**So nutzen Sie dieses Forum optimal**“](How to get the best out of this forum) erklärt. Dieser Leitfaden enthält viele weitere nützliche Informationen. Bitte lesen Sie ihn. Vielen Dank im Voraus für Ihre Mitarbeit.

Sorry PerryBebbington
I have ask lxnx382 to make a copy of this post in the UNO Q sektion to have more visibility.

thanks Uwe
Moderator

I don't know what to suggest then, other than to ask @pert for his input and decision.

Der Grund, warum wir „crossposting“ nicht zulassen, ist, dass dies Diskussionen fragmentieren kann. „Crossposting“ verschwendet oft die Zeit der Forenhelfer, die sich bemühen, in einem Forumsthema Hilfe zu leisten, ohne zu erkennen, dass ihre Bemühungen redundant sind oder durch die Aktivitäten im parallelen Forumsthema überflüssig werden.

In diesem speziellen Fall kann der Forenbeitrag als eigenständiges Dokument zum Wissensaustausch dienen und nicht nur als Diskussionsgrundlage. Wir könnten den oben beschriebenen Schaden vermeiden, indem wir „crosspost“ zulassen, das Duplikatthema aber sofort schließen, um weitere Antworten zu verhindern.

Sollte dies geschehen, müsste der letzte Absatz so angepasst werden, dass die Leser zur Diskussion auf das ursprüngliche Forumthema in der Kategorie International > Deutsch verwiesen werden.

@lxnx382 ,

Entschuldigung für die Verwirrung zwischen den Moderatoren. Ich habe deinen englischen Beitrag wiederhergestellt und oben einen Kommentar hinzugefügt, der auf dieses Thema für Antworten verweist.

Ich danke dir, das scheint die richtige Lösung zu sein.

Thanks all.
Uwe