Можно ли узнать, какие из подключенных ЖК-мониторов включены?

Решение в стандартном bash:

    text='id;some text here with possible ; inside'
    text2=${text#*;}
    text1=${text%"$text2"}

    echo $text1
    #=> id;
    echo $text2
    #=> some text here with possible ; insideDD
3
05.01.2021, 22:55
1 ответ

Вы можете использовать ddcutil , чтобы проверить, монитор включается, проверяя, установлено ли значение кода VCP 0xd6 в все, кроме 0x05, как указано в таблице 8 -5 VESA Monitor Команда управления Установить:

$ sudo ddcutil -d 1 getvcp d6 |& awk '{ print $NF }'
(sl=0x01)

Это означает, что первый дисплей включен.

$ sudo ddcutil -d 1 getvcp d6 |& awk '{ print $NF }'
(sl=0x05)

Это означает, что первый дисплей выключен.

Самое сложное — сопоставить выходные данные, заданные xrandr, с отображением. идентификатор, который можно использовать с ddcutil. Один из способов, которым я мог подумайте, если нужно извлечь EDID из вывода xrandr, проанализируйте его с помощью edid -декодировать, получить серийный номер и использовать его с 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 | awk '{ print $NF }' | cut -d= -f2 | cut -d')' -f1)"
if [ "$state" != "0x05" ]
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
1
18.03.2021, 22:38

Теги

Похожие вопросы