dar*_*nir 5 monitoring hardware multi-monitor hdmi
我有一台显示器通过 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";
}
Run Code Online (Sandbox Code Playgroud)
此脚本未经测试。我没有任何非无头(“有头”?)Linux 机器在这里进行测试。如果它不起作用,修复应该是显而易见的。
它可以变得更聪明。它现在无法处理多个监视器,并且它的字符串解析可能会混淆,因为它不会检查它搜索的电源状态字符串是否在该> Power control部分内。
| 归档时间: |
|
| 查看次数: |
6566 次 |
| 最近记录: |