Diuji pada Ubuntu 16.04, 18.04. (Saya tahu sudah terlambat untuk menjawab tetapi solusi ini relevan hari ini)
$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
SONY TV
AUO LCD Monitor
Saya memiliki dua monitor terpasang. Satu dengan laptop dan yang lainnya adalah layar eksternal. Segera setelah monitor eksternal dicolokkan atau dimatikan, perintah ini mencerminkan perubahan tersebut. Anda terus-menerus perlu polling. Menghapus --short
opsi memberikan informasi yang lebih detail.
Anda dapat memilih negara bagian dengan pekerjaan latar belakang berikut:
$ while true;
> do
> hwinfo --monitor --short;
> sleep 2;
> done >> monitor.log &
while true
loop berjalan berkali-kali tak terbatas. sleep 2
menjeda setiap iterasi loop selama 2 detik. Dan output dari hwinfo --monitor --short
ditambahkan ke monitor.log
. File log ini dapat memberi Anda riwayat aktivitas plug-in dan plug-out monitor.
FYI:Saya menggunakan skrip python latar belakang (daemon) menggunakan perintah di atas (dan yang serupa lainnya) untuk mendeteksi jika seseorang melakukan beberapa plug-in dan plug-out HW dengan sistem di lab komputer. Jika demikian, saya mendapatkan notifikasi yang sesuai bahwa seseorang mencolokkan/menghubungkan monitor, mouse, atau keyboard hampir secara real-time!
Info selengkapnya tentang hwinfo
perintah di sini. Halaman manualnya juga merupakan sumber yang bagus.
sudo get-edid
tidak bekerja untuk saya. (EDIT:sekarang berfungsi di komputer lain, Lubuntu 14.10; saya akan menyalahkan perbedaan BIOS tapi itu tebakan acak...)
Pokoknya di bawah X, xrandr --verbose
mencetak blok EDID. Berikut adalah cara cepat dan kotor untuk mengekstraknya dan diteruskan ke 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 = "";
}'
Terinspirasi oleh jawaban Beni, ini akan membaca data EDID menggunakan xrandr
dan ekstrak nama monitor sesuai dengan spesifikasi EDID, tanpa memerlukan alat eksternal apa pun seperti 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
)
Menggunakan awk
untuk secara tepat mengekstrak nama monitor hanya , dan tidak ada sampah tambahan dari EDID, karenanya "angka ajaib" seperti 000000fc00
, 26
dan 0a
. Akhirnya menggunakan xxd
untuk mengonversi dari hex ke ASCII, mencetak satu nama monitor per baris.
Berdasarkan solusi ini saya membuat skrip praktis untuk mengganti monitor, yang juga dapat digunakan untuk mendaftar info monitor saja:
$ 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