Testato su Ubuntu 16.04, 18.04. (So che è troppo tardi per rispondere, ma questa soluzione è rilevante oggi)
$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
SONY TV
AUO LCD Monitor
Ho due monitor collegati. Uno con il laptop e l'altro è un display esterno. Non appena il monitor esterno viene collegato o scollegato, questo comando riflette la modifica. Hai continuamente bisogno di sondaggi. Rimozione del --short
opzione fornisce informazioni più dettagliate.
Puoi eseguire il polling dello stato con il seguente lavoro in background:
$ while true;
> do
> hwinfo --monitor --short;
> sleep 2;
> done >> monitor.log &
Il while true
il ciclo viene eseguito infinite volte. Il sleep 2
mette in pausa ogni iterazione del ciclo per 2 secondi. E l'output di hwinfo --monitor --short
viene aggiunto a monitor.log
. Questo file di registro può fornirti la cronologia delle attività dei plug-in e plug-out del monitor.
Cordiali saluti:sto usando uno script python in background (daemon) usando il comando sopra (e altri simili) per rilevare se qualcuno sta facendo alcuni plug-in e plug-out HW con i sistemi nel laboratorio informatico. In tal caso, ricevo notifiche appropriate che qualcuno ha collegato/collegato un monitor, un mouse o una tastiera quasi in tempo reale!
Ulteriori informazioni su hwinfo
il comando è qui. Anche la sua pagina man è una buona fonte.
sudo get-edid
non ha funzionato per me. (EDIT:ora funziona su un altro computer, Lubuntu 14.10; darei la colpa alle differenze del BIOS ma è un'ipotesi casuale...)
Comunque sotto X, xrandr --verbose
stampa il blocco EDID. Ecco un modo rapido e sporco per estrarlo e passare a parse-edid
:
#!/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 = "";
}'
Ispirato dalla risposta di Beni, questo leggerà i dati EDID usando xrandr
ed estrarre i nomi dei monitor secondo la specifica EDID, senza bisogno di strumenti esterni come parse-edid
:
#!/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
)
Utilizza awk
per estrarre con precisione solo il nome del monitor , e nessuna spazzatura extra dall'EDID, quindi "numeri magici" come 000000fc00
, 26
e 0a
. Infine usa xxd
per convertire da esadecimale ad ASCII, stampando un nome di monitor per riga.
Sulla base di questa soluzione ho creato un pratico script per cambiare monitor, che può essere utilizzato anche per elencare semplicemente le informazioni sul monitor:
$ 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