Getestet auf Ubuntu 16.04, 18.04. (Ich weiß, es ist zu spät für eine Antwort, aber diese Lösung ist heute relevant)
$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
SONY TV
AUO LCD Monitor
Ich habe zwei Monitore angeschlossen. Eines mit dem Laptop und das andere ist ein externes Display. Sobald der externe Monitor ein- oder ausgesteckt wird, spiegelt dieser Befehl die Änderung wider. Sie müssen ständig abfragen. --short
entfernen Option liefert detailliertere Informationen.
Sie können den Status mit dem folgenden Hintergrundjob abfragen:
$ while true;
> do
> hwinfo --monitor --short;
> sleep 2;
> done >> monitor.log &
Die while true
Schleife läuft unendlich oft. Die sleep 2
pausiert jede Iteration der Schleife für 2 Sekunden. Und die Ausgabe von hwinfo --monitor --short
wird an monitor.log
angehängt . Diese Protokolldatei kann Ihnen den Aktivitätsverlauf von Monitor-Plug-Ins und -Plug-Outs liefern.
FYI:Ich verwende ein Python-Hintergrundskript (Daemon) mit dem obigen Befehl (und anderen ähnlichen), um festzustellen, ob jemand einige HW-Plug-Ins und Plug-Outs mit den Systemen im Computerlabor macht. Wenn dies der Fall ist, erhalte ich entsprechende Benachrichtigungen, dass jemand einen Monitor, eine Maus oder eine Tastatur in nahezu Echtzeit ein-/ausgesteckt hat!
Weitere Informationen zu hwinfo
Befehl ist hier. Seine Manpage ist auch eine gute Quelle.
sudo get-edid
hat bei mir nicht funktioniert. (EDIT:funktioniert jetzt auf einem anderen Computer, Lubuntu 14.10; ich würde BIOS-Unterschiede dafür verantwortlich machen, aber das ist eine zufällige Vermutung ...)
Jedenfalls unter X, xrandr --verbose
druckt den EDID-Block. Hier ist eine schnelle und schmutzige Methode, um es zu extrahieren und an parse-edid
weiterzugeben :
#!/bin/bash
xrandr --verbose | perl -ne '
if ((/EDID(_DATA)?:/.../:/) && !/:/) {
s/^\s+//;
chomp;
$hex .= $_;
} elsif ($hex) {
# Use "|strings" if you dont have read-edid package installed
# and just want to see (or grep) the human-readable parts.
open FH, "|parse-edid";
print FH pack("H*", $hex);
$hex = "";
}'
Inspiriert von Benis Antwort werden die EDID-Daten mit xrandr
gelesen und extrahieren Sie die Monitornamen gemäß der EDID-Spezifikation, ohne dass externe Tools wie parse-edid
erforderlich sind :
#!/bin/bash
while read -r output hex conn; do
[[ -z "$conn" ]] && conn=${output%%-*}
echo "# $output $conn $(xxd -r -p <<< "$hex")"
done < <(xrandr --prop | awk '
!/^[ \t]/ {
if (output && hex) print output, hex, conn
output=$1
hex=""
}
/ConnectorType:/ {conn=$2}
/[:.]/ && h {
sub(/.*000000fc00/, "", hex)
hex = substr(hex, 0, 26) "0a"
sub(/0a.*/, "", hex)
h=0
}
h {sub(/[ \t]+/, ""); hex = hex $0}
/EDID.*:/ {h=1}
END {if (output && hex) print output, hex, conn}
' | sort
)
Verwendet awk
um genau nur den Monitornamen zu extrahieren , und kein zusätzlicher Müll von der EDID, daher "magische Zahlen" wie 000000fc00
, 26
und 0a
. Verwendet schließlich xxd
um von Hex in ASCII umzuwandeln, wobei ein Monitorname pro Zeile ausgegeben wird.
Basierend auf dieser Lösung habe ich ein praktisches Skript zum Umschalten von Monitoren erstellt, das auch zum einfachen Auflisten von Monitorinformationen verwendet werden kann:
$ monitor-switch --list
Connected monitors:
# DFP5 HDMI HT-R391
# DFP7 DVI-I DELL U2412M
$ monitor-switch --list
Connected monitors:
# DisplayPort-1 DisplayPort DELL U2412M
# DisplayPort-3 DisplayPort DELL U2415
# HDMI-A-2 HDMI LG TV