HDMIを介してマイコンピュータにモニタが接続されています。
今、誰かがモニターのソフトボタンでモニターの電源を切ったり、電源コードを抜いたりすると、通知を受けてシェルスクリプトを実行したいと思います。
モニターがオンになっているかオフになっているかを確認するためにいくつかの方法を試しました(常に接続されています)。近い唯一の技術は次のとおりです。
# ddccontrol -p
外部モニターが接続されると、モニターに関するさまざまな詳細が返されます。出力を解析するスクリプトを作成できます。しかし、これは監督なしで使用するには信頼できない技術のようです。
モニターの電源が入っているかどうかを確認するために「はい/いいえ」と答える方法はありますか?
編集:ステータスの変更に関するメッセージを受け取ることができれば、より良いようです。この操作は数日間実行され続けるため、モニターで状態をポーリングしたくありません。代わりに、閉じるとメッセージを介して通知を受けたいと思います。
答え1
私は解析された出力に問題がないと思いますddccontrol
。DDC はい必要な情報を取得する正しい方法。 DDCを生成するVGAとは異なり、HDMIコネクタは最初からDDCを含むように設計されています。彼らはHDMIにさらに多くの機能を追加するためにDDC規格を修正し、それをHDMIと呼びます。ダイレクトドライブDDC。
Linux で DDC 情報にアクセスするためのユーザー領域ツールであるddccontrol
ため、すぐに目的のタスクを実行するフラグがないという事実が、現在提供されている機能を使用しない理由はありません。むしろコードを解読し、パッチを提供するよう招待されます。
その間、利用可能な短いPerlスクリプトは次のとおりです。
#!/usr/bin/perl
# monitor-on.pl
my $CMD = open '-|', 'ddclient -p' or die "Could not run ddclient: $!\n";
local $/ = undef; # slurp command output
my $out = <$CMD>;
if ($out =~ m/> Power control/) {
if ($out =~ m/id=dpms/) {
print "asleep\n";
}
elsif ($out =~ m/id=on/) {
print "on\n";
}
elsif ($out =~ m/id=standby/) {
print "off\n";
}
else {
print "missing?\n";
}
}
else {
# Monitor is either a) not DDC capable; or b) unplugged
print "missing!\n";
}
このスクリプトはテストされていません。テストするヘッドレス(「方向」?)Linuxマシンはありません。うまくいかない場合は、修正が明確でなければなりません。
よりスマートになります。現在、複数のモニターを処理できず、検索中の電源状態文字列がその> Power control
セクション内にあるかどうかを確認しないため、文字列の解析がめちゃくちゃになる可能性があります。