GNU/Linux >> Linux の 問題 >  >> Linux

Linux はモニター名を取得します

Ubuntu 16.04、18.04 でテスト済み。 (答えるには遅すぎることは承知していますが、この解決策は今日関連しています)

$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
                   SONY TV
                   AUO LCD Monitor

2台のモニターを接続しています。 1 つはラップトップで、もう 1 つは外部ディスプレイです。外部モニターが接続または接続解除されるとすぐに、このコマンドは変更を反映します。継続的にポーリングする必要があります。 --short の削除 オプションでより詳細な情報が得られます。

次のバックグラウンド ジョブで状態をポーリングできます:

$ while true;
>  do
>   hwinfo --monitor --short;
>   sleep 2;
>  done >> monitor.log &

while true ループは無限回実行されます。 sleep 2 ループの各反復を 2 秒間一時停止します。そして hwinfo --monitor --short の出力 monitor.log に追加されます .このログ ファイルは、監視プラグインとプラグアウトのアクティビティ履歴を提供できます。

参考までに:上記のコマンド (および他の同様のコマンド) を使用してバックグラウンド (デーモン) python スクリプトを使用して、コンピューター ラボのシステムで誰かが HW プラグインとプラグアウトを行っているかどうかを検出しています。もしそうなら、誰かがモニター、マウス、またはキーボードをプラグアウト/プラグインしたという適切な通知をほぼリアルタイムで受け取ります!

hwinfo に関する詳細情報 コマンドはこちら。その man ページも良い情報源です。


sudo get-edid 私にはうまくいきませんでした。 (編集:別のコンピューター、Lubuntu 14.10 で動作するようになりました。BIOS の違いのせいだと思いますが、それはランダムな推測です...)

とにかくXの下では、xrandr --verbose EDID ブロックを印刷します。これを抽出して 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 = "";
}'

Beni の回答に触発されて、これは xrandr を使用して EDID データを読み取ります parse-edid のような外部ツールを必要とせずに、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
)

awk を使用 モニター名のみを正確に抽出するのみ 、および EDID からの余分なガベージがないため、000000fc00 のような「マジック ナンバー」 、 260a .最後に xxd を使用 16 進数から ASCII に変換し、1 行に 1 つのモニター名を出力します。

このソリューションに基づいて、モニターを切り替えるための便利なスクリプトを作成しました。これは、モニター情報を簡単に一覧表示するためにも使用できます。

$ 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. Linux コンソールのデフォルト モニターを変更する

  2. Linux:ドメイン名に基づくルーティング

  3. Linuxのプロセスモニターに相当しますか?

  1. procps-ngを使用してターミナルでLinuxシステムを監視します

  2. Linuxでユーザーアクティビティを監視する方法

  3. Linuxでリソースを監視するためにsarを使用する

  1. Linuxでjconsoleを使用してJavaを監視する

  2. CheckmkでLinuxサーバーを監視する

  3. GlanceコマンドでLinuxシステムを監視する方法