Testováno na Ubuntu 16.04, 18.04. (Vím, že je na odpověď příliš pozdě, ale toto řešení je dnes relevantní)
$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
SONY TV
AUO LCD Monitor
Mám připojené dva monitory. Jeden s notebookem a druhý je externí displej. Jakmile je externí monitor připojen nebo odpojen, tento příkaz odráží změnu. Průběžně musíte hlasovat. Odstranění --short
možnost poskytuje podrobnější informace.
Dotazování stavu můžete provést pomocí následující úlohy na pozadí:
$ while true;
> do
> hwinfo --monitor --short;
> sleep 2;
> done >> monitor.log &
while true
smyčka běží nekonečněkrát. sleep 2
pozastaví každou iteraci smyčky na 2 sekundy. A výstup hwinfo --monitor --short
je připojen k monitor.log
. Tento soubor protokolu vám může poskytnout historii aktivit zásuvného modulu a zásuvného modulu monitoru.
FYI:Používám skript python na pozadí (démon) pomocí výše uvedeného příkazu (a dalších podobných) ke zjištění, zda někdo provádí nějaké HW zásuvné moduly a zásuvné moduly se systémy v počítačové laboratoři. Pokud ano, dostávám příslušná upozornění, že někdo odpojil/připojil monitor, myš nebo klávesnici téměř v reálném čase!
Další informace o hwinfo
příkaz je zde. Jeho manuálová stránka je také dobrým zdrojem.
sudo get-edid
nefungovalo mi to. (EDIT:nyní funguje na jiném počítači, Lubuntu 14.10; vinil bych rozdíly v BIOSu, ale to je náhodný odhad...)
Každopádně pod X, xrandr --verbose
vytiskne blok EDID. Zde je rychlý a špinavý způsob, jak jej extrahovat a předat do 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 = "";
}'
Inspirováno Beniho odpovědí, toto přečte data EDID pomocí xrandr
a extrahujte názvy monitorů podle specifikace EDID, bez potřeby jakýchkoli externích nástrojů, jako je 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
)
Používá awk
přesně extrahovat název monitoru pouze a žádné další odpadky z EDID, proto „magická čísla“ jako 000000fc00
, 26
a 0a
. Nakonec používá xxd
pro převod z hex na ASCII tisk jednoho názvu monitoru na řádek.
Na základě tohoto řešení jsem vytvořil praktický skript pro přepínání monitorů, který lze také použít k jednoduchému výpisu informací o monitoru:
$ 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