检测 HDMI 监视器是否关闭

dar*_*nir 5 monitoring hardware multi-monitor hdmi

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

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

# ddccontrol -p

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

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

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

War*_*ung 5

我认为解析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";
}
Run Code Online (Sandbox Code Playgroud)

此脚本未经测试。我没有任何非无头(“有头”?)Linux 机器在这里进行测试。如果它不起作用,修复应该是显而易见的。

它可以变得更聪明。它现在无法处理多个监视器,并且它的字符串解析可能会混淆,因为它不会检查它搜索的电源状态字符串是否在该> Power control部分内。