Não vejo nada de errado em analisar a saída de ddccontrol
. DDC é o caminho certo para obter as informações desejadas. Ao contrário do VGA, onde o DDC foi criado, o conector HDMI foi projetado para incluir o DDC desde o início. Eles até voltaram e modificaram o padrão DDC para adicionar mais recursos para HDMI, chamando-o de E-DDC .
No Linux, a ferramenta userland para acessar informações do DDC é ddccontrol
, portanto, o fato de não ter um sinalizador que faz com que ele faça o que você quer que esteja pronto não é motivo para evitar usar o que é fornecido atualmente. Se qualquer coisa, é um convite para quebrar o código aberto e fornecer um patch.
Enquanto isso, aqui está um pequeno script em Perl com:
#!/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";
}
Este script não foi testado. Eu não tenho caixas Linux não-headless ("cabeças"?) Para testar aqui. Se não funcionar, a correção deve ser óbvia.
Poderia ser mais inteligente. Ele não irá lidar com vários monitores agora, e é possível que sua análise de cadeia de caracteres possa ser confundida, já que ele não verifica se as cadeias de status de energia pesquisadas estão dentro da seção > Power control
.