GNU/Linux >> Znalost Linux >  >> Linux

Linux načte názvy monitorů

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

Linux
  1. Monitorujte svůj systém Linux ve svém terminálu pomocí procps-ng

  2. Jak sledovat aktivitu uživatele v Linuxu

  3. Ekvivalent Process Monitor pro Linux?

  1. Použijte sar k monitorování zdrojů v Linuxu

  2. Změňte výchozí monitor konzole Linux

  3. Linux:směrování založené na názvech domén

  1. Monitorujte svou Javu na Linuxu pomocí jconsole

  2. Monitorujte svůj Linux server pomocí Checkmk

  3. Jak monitorovat systém Linux pomocí příkazu Glances