检测 HDMI 监视器是否关闭

检测 HDMI 监视器是否关闭

我有一台显示器通过 HDMI 连接到我的机器。
现在,如果有人要通过显示器上的软按钮或拔掉电源线来关闭显示器,我希望收到通知并运行 Shell 脚本。

我尝试了多种方法来识别显示器何时打开或关闭(它始终处于连接状态)。唯一接近的技术是:

# ddccontrol -p

连接外部显示器后,会返回有关显示器的各种详细信息。我可以编写一个脚本来解析输出。然而,对于无人监督的使用来说,这似乎是一种不可靠的技术。

有什么方法可以让我获得“是/否”的答案来判断显示器是否打开/关闭?

编辑:如果我能收到有关状态更改的消息,那就更好了。由于这将连续运行数天,我不想轮询监视器的状态。相反,如果它被关闭,我希望通过消息通知我。

答案1

我认为解析 的输出没有任何问题ddccontrolDDC 获取所需信息的正确方法。与创建 DDC 的 VGA 不同,HDMI连接器从一开始就设计为包含 DDC。他们甚至回过头修改了 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部分内。

相关内容