연결된 LCD 모니터 중 어느 모니터가 켜져 있는지 알 수 있나요?

연결된 LCD 모니터 중 어느 모니터가 켜져 있는지 알 수 있나요?

연결된 모니터가 켜질 때 출력이 자동으로 활성화되기를 원합니다(단, 전원 관리 상태일 수도 있음).

답변1

당신은 그것을 사용할 수 있습니다ddutilVCP 0xd6 코드의 값이 0x05 이외의 값으로 설정되어 있는지 확인하여 해당 모니터가 열려 있는지 확인합니다(표 8-5 참조).VESA 모니터 제어 명령 세트:

$ sudo ddcutil -d 1 getvcp d6 --terse |& awk '{ print $NF }'
x01

이는 첫 번째 모니터가 켜져 있음을 의미합니다.

$ sudo ddcutil -d 1 getvcp d6 --terse |& awk '{ print $NF }'
x05

이는 첫 번째 모니터가 꺼져 있음을 의미합니다.

가장 어려운 부분은 xrandr에서 지정한 출력을 ddcutil에서 사용할 수 있는 디스플레이 식별자와 일치시키는 것입니다. 내가 생각한 방법 중 하나는 xrandr 출력에서 ​​EDID를 추출하고, edid-decode로 구문 분석하고, 일련 번호를 가져와 ddcutil과 함께 사용하는 것이었습니다(ddcutil이 --edid 매개 변수를 허용하지만 저는 이를 사용할 수 없었습니다). 어떤 경우에는 ). 전체적으로 전체 xrandr-turned-on.sh스크립트는 다음과 같습니다.

#!/usr/bin/env sh

if [ ! $# -eq 1 ]
then
    printf "Check if monitor represented by xrandr output is turned on.\n
Usage: %s output\n" "$0"
    exit 1
fi

for prog in ddcutil edid-decode
do
    if ! command -v "$prog" >/dev/null
    then
        printf "%s not found. Exiting.\n" "$prog" >&2
    exit 1
fi
done

set -e

serial="$(xrandr --prop | awk -v output="$1" '$1 ~ output {getline; for (i=1; i<=16; i++) {getline; printf("%s", $1)}}' | edid-decode | grep "Serial number" | cut -d: -f2 | sed "s,^ ,,")"

state="$(sudo ddcutil -n "$serial" getvcp d6 --terse | awk '{print $NF}')"
if [ "$state" != "x05" ]
then
    printf "Monitor for output %s turned on\n" "$1"
else
    printf "Monitor for output %s turned off\n" "$1"
fi

( 사용법은 다음 getline과 같습니다.awk 스크립트에서는 권장되지 않습니다.)

용법:

$ ./xrandr-turned-on.sh HDMI3
Monitor for output HDMI3 turned on

관련 정보