GNU/Linux >> Belajar Linux >  >> Linux

Linux mengambil nama monitor

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

Linux
  1. Pantau sistem Linux Anda di terminal Anda dengan procps-ng

  2. Cara Memantau Aktivitas Pengguna Di Linux

  3. Monitor Proses setara untuk Linux?

  1. Gunakan sar untuk memantau sumber daya di Linux

  2. Ubah Monitor Default Konsol Linux

  3. Linux:perutean berdasarkan nama domain

  1. Pantau Java Anda di Linux dengan jconsole

  2. Pantau server Linux Anda dengan Checkmk

  3. Cara Memantau Sistem Linux dengan Perintah Sekilas