Monitoring

檢測 HDMI 監視器是否已關閉

  • January 11, 2018

我有一個顯示器通過 HDMI 連接到我的機器。

現在,如果有人要通過上面的軟按鈕或移除它的電源線來關閉監視器,我希望得到通知並執行 Shell 腳本。

我嘗試了多種方法來確定顯示器何時打開或關閉(它始終處於連接狀態)。唯一接近的技術是:

# ddccontrol -p

當連接外接顯示器時,這將返回有關顯示器的各種詳細資訊。我可以編寫一個腳本來解析輸出。然而,對於無人監督的使用,這似乎是一種不可靠的技術。

有沒有什麼方法可以讓我得到一個是/否的答案來判斷顯示器是否打開/關閉?

編輯:如果我能收到有關狀態更改的消息,那就更好了。由於這將連續執行數天,我不希望輪詢監視器的狀態。相反,如果它被關閉,我想通過一條消息得到通知。

我看不出解析ddccontrol. DDC 獲取所需資訊的正確方法。與創建 DDC 的 VGA 不同,HDMI連接器從一開始就設計為包含 DDC。他們甚至回頭修改了 DDC 標準,為 HDMI 添加了更多功能,稱之為E-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部分內。

引用自:https://unix.stackexchange.com/questions/61857