![检测 HDMI 监视器是否关闭](https://linux22.com/image/44641/%E6%A3%80%E6%B5%8B%20HDMI%20%E7%9B%91%E8%A7%86%E5%99%A8%E6%98%AF%E5%90%A6%E5%85%B3%E9%97%AD.png)
我有一台显示器通过 HDMI 连接到我的机器。
现在,如果有人要通过显示器上的软按钮或拔掉电源线来关闭显示器,我希望收到通知并运行 Shell 脚本。
我尝试了多种方法来识别显示器何时打开或关闭(它始终处于连接状态)。唯一接近的技术是:
# ddccontrol -p
连接外部显示器后,会返回有关显示器的各种详细信息。我可以编写一个脚本来解析输出。然而,对于无人监督的使用来说,这似乎是一种不可靠的技术。
有什么方法可以让我获得“是/否”的答案来判断显示器是否打开/关闭?
编辑:如果我能收到有关状态更改的消息,那就更好了。由于这将连续运行数天,我不想轮询监视器的状态。相反,如果它被关闭,我希望通过消息通知我。
答案1
我认为解析 的输出没有任何问题ddccontrol
。DDC 是获取所需信息的正确方法。与创建 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
部分内。