Testé sur Ubuntu 16.04, 18.04. (Je sais qu'il est trop tard pour répondre mais cette solution est pertinente aujourd'hui)
$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
SONY TV
AUO LCD Monitor
J'ai deux moniteurs attachés. L'un avec l'ordinateur portable et l'autre est un écran externe. Dès que le moniteur externe est branché ou débranché, cette commande reflète le changement. Vous devez continuellement interroger. Suppression du --short
option donne des informations plus détaillées.
Vous pouvez interroger l'état avec la tâche d'arrière-plan suivante :
$ while true;
> do
> hwinfo --monitor --short;
> sleep 2;
> done >> monitor.log &
Le while true
boucle s'exécute une infinité de fois. Le sleep 2
met en pause chaque itération de la boucle pendant 2 secondes. Et la sortie de hwinfo --monitor --short
est ajouté à monitor.log
. Ce fichier journal peut vous donner l'historique des activités du plug-in et du plug-out du moniteur.
FYI:J'utilise un script python d'arrière-plan (démon) utilisant la commande ci-dessus (et d'autres similaires) pour détecter si quelqu'un fait des plug-ins et des plug-outs HW avec les systèmes du laboratoire informatique. Si c'est le cas, je reçois des notifications appropriées indiquant que quelqu'un a débranché/rebranché un moniteur, une souris ou un clavier presque en temps réel !
Plus d'informations sur hwinfo
la commande est ici. Sa page de manuel est également une bonne source.
sudo get-edid
n'a pas fonctionné pour moi. (EDIT :fonctionne maintenant sur un autre ordinateur, Lubuntu 14.10 ; je blâmerais les différences de BIOS, mais c'est une supposition aléatoire...)
Quoi qu'il en soit sous X, xrandr --verbose
imprime le bloc EDID. Voici un moyen rapide et sale de l'extraire et de passer à 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 = "";
}'
Inspiré de la réponse de Beni, cela lira les données EDID en utilisant xrandr
et extraire les noms des moniteurs selon la spécification EDID, sans avoir besoin d'outils externes comme 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
)
Utilise awk
pour extraire précisément le nom du moniteur uniquement , et pas de déchets supplémentaires de l'EDID, d'où des "nombres magiques" comme 000000fc00
, 26
et 0a
. Utilise enfin xxd
pour convertir de l'hexadécimal en ASCII, en imprimant un nom de moniteur par ligne.
Sur la base de cette solution, j'ai créé un script pratique pour changer de moniteur, qui peut également être utilisé pour répertorier simplement les informations du moniteur :
$ 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