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
のような「マジック ナンバー」 、 26
と 0a
.最後に 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