Erkennen Sie HDMI und starten Sie die GUI

7

Wir erstellen eine Anwendung, die einen Servermodus und einen GUI-Modus unterstützt. Jetzt sollten der XServer und die Anwendung gestartet werden. Wenn ein HDMI-Kabel angeschlossen ist, sollte sonst nur der Server ausgeführt werden.

Was ist der beste Weg, um HDMI zu erkennen? Lesen Sie die Auflösung und wenn es nicht die Standard-HDMI-Auflösung ist, ist es angeschlossen? Aber das wäre nicht möglich, wenn der PI bereits gebootet hätte, nicht wahr?

Sören
quelle
Es kann einfacher sein, den Runlevel mit dem Befehl runlevel zu testen. Wenn das Ausführen in Runlevel 5 ein von der GUI unterstütztes Setup implizieren würde. Dann können Sie die GUI als Teil des GUI-Starts starten.
Steve Robillard
@SteveRobillard Die Überprüfung des Runlevels wäre A) abgeschrieben, B) nicht unbedingt ein Hinweis darauf, ob X ausgeführt wird. Ich habe es nicht überprüft, aber ich wette, was mit einem GUI-System ohne angeschlossene Anzeige passiert, ist, dass X startet, keine Anzeige findet und beendet wird. Der Runlevel (oder das nicht abgeschriebene Äquivalent) bleibt jedoch
unverändert.
... Sie können definitiv detaillierte Informationen von der Ausgabe des X-Servers erhalten - tatsächlich wäre die Ausgabe von systemctl status ______wahrscheinlich die einfachste und entscheidendste Sache, die hier analysiert werden kann. Wahrscheinlich gibt es eine Python-API: P Und um den X-Server nach Anzeigen und Auflösung abzufragen (siehe auch man xargs).
Goldlöckchen

Antworten:

10

tvserviceIn Raspbian ist ein Befehlszeilenprogramm integriert, das den Status des HDMI anzeigt.

Um den vollständigen Status zu ermitteln, können Sie den folgenden Befehl verwenden : tvservice -s. Auf meinem RPi wird derzeit Folgendes ausgegeben:

state 0x40001 [NTSC 4:3], 720x480 @ 60.00Hz, interlaced

Die Zustände (die ich gesammelt habe) sind wie folgt:

  • 0x40001 Nicht initialisiert und das HDMI-Kabel ist nicht angeschlossen
  • 0x40002 Nicht initialisiert, aber HDMI-Kabel angeschlossen
  • 0x120002 Standby Modus
  • 0x120005 HDMI getrennt
  • 0x120016 Aktiv

Wenn Sie weniger an den zusätzlichen Details interessiert sind, ist das tvservice -nParsen möglicherweise etwas einfacher. Es gibt den aktuellen Namen des angeschlossenen Geräts an. Beispiel:

[E] No device present

Wenn die Konnektivität berührungslos ist, ist das -MFlag möglicherweise hilfreich. Es überwacht Ereignisse, die den HDMI-Anschluss betreffen.

Quellen :

Bearbeiten:

Wie Ghanima in den Kommentaren betonte, ist tvservice auch in Arch unter verfügbar /opt/vc/bin/tvservice.

Jacobm001
quelle
2
Nebenbei bemerkt, es ist nicht nur ein Raspbian erhältlich. Arch hat es zu tun, es sitzt in /opt/vc/bin/tvserviceund kommt als Teil des raspberrypi-firmware-tools- Pakets, das standardmäßig installiert ist.
Ghanima
2

Der Befehl tvservice erkennt nicht konsistent, wenn HDMI getrennt wird. Angenommen, Sie starten den Pi mit HDMI und ziehen dann das HDMI-Kabel manuell ab. Der Befehl tvservice meldet weiterhin, dass ein HDMI-Gerät angeschlossen ist. In den Befehlen -n, -s usw. wird weiterhin der zuletzt angeschlossene Monitor über HDMI gemeldet.

Schorschi
quelle