HDMI 모니터가 꺼져 있는지 감지

HDMI 모니터가 꺼져 있는지 감지

HDMI를 통해 내 컴퓨터에 모니터가 연결되어 있습니다.
이제 누군가 모니터의 소프트 버튼을 통해 모니터를 끄거나 전원 코드를 뽑으면 알림을 받고 쉘 스크립트를 실행하고 싶습니다.

모니터가 켜져 있는지 꺼져 있는지 확인하기 위해 여러 가지 방법을 시도했습니다(항상 연결되어 있음). 근접한 유일한 기술은 다음과 같습니다.

# ddccontrol -p

외부 모니터가 연결되면 모니터에 대한 다양한 세부 정보가 반환됩니다. 출력을 구문 분석하는 스크립트를 작성할 수 있습니다. 그러나 이는 감독 없이 사용하기에는 신뢰할 수 없는 기술인 것으로 보입니다.

모니터가 켜져 있는지 꺼져 있는지 확인하기 위해 "예/아니요"라고 답할 수 있는 방법이 있습니까?

편집: 상태 변경에 대한 메시지를 받을 수 있으면 더 좋을 것 같습니다. 이 작업은 며칠 동안 계속 실행되므로 모니터에서 상태를 폴링하고 싶지 않습니다. 대신, 닫히면 메시지를 통해 알림을 받고 싶습니다.

답변1

나는 구문 분석된 출력에 아무런 문제가 없다고 생각합니다 ddccontrol.DDC 필요한 정보를 얻는 올바른 방법. DDC를 생성하는 VGA와 달리,HDMI커넥터는 처음부터 DDC를 포함하도록 설계되었습니다. 그들은 심지어 HDMI에 더 많은 기능을 추가하기 위해 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섹션 내에 있는지 확인하지 않기 때문에 문자열 구문 분석이 엉망이 될 수 있습니다.

관련 정보