Как вывести список активных дисплеев (в командной строке)?

xrandr -q дает мне список подключенных дисплеев, но как я могу узнать (с учетом сценариев), активен ли дисплей в настоящее время?

Контекст: я хотел бы написать скрипт для переключения дисплея. Если он активен, его следует отключить, если нет - включить.

Примечание: xrandr -q в основном предоставляет эту информацию, поскольку активные режимы помечены *, но эту информацию трудно извлечь в скрипте bash.

4
задан 29 January 2014 в 15:10

3 ответа

Активные дисплеи имеют разрешение и номер смещения, показанные в идентификационной строке на выходе xrandr. Вот что я имею в виду:

$ xrandr | grep connected                                    
eDP1 connected primary 1366x768+1280+256 (normal left inverted right x axis y axis) 345mm x 194mm
DP1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 340mm x 270mm
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

В выходных данных вы видите, что встроенный монитор моего ноутбука и VGA1 оба подключены и имеют разрешение (в случае встроенного дисплея eDP1 это 1366x768). Таким образом, задача просто превращается в обработку текста. Для этой цели я написал небольшую функцию, которую вы можете использовать в своих скриптах или ~/.bashrc:

get_active_monitors()
{
    xrandr | awk '/\ connected/ && /[[:digit:]]x[[:digit:]].*+/{print $1}'
}

Вот тестовые прогоны:

С VGA-монитором на

enter image description here

С выключенным монитором VGA

enter image description here

0
ответ дан 29 January 2014 в 15:10

с xrandr в списке разрешений, активное разрешение дисплея должно иметь звездочку сразу после него, если оно отсутствует, то дисплей не активен.

0
ответ дан 29 January 2014 в 15:10

Подключите весь дисплей, используя

 xrandr -q

. Затем вы можете создать переменную для всех подключенных дисплеев, например

Display1=VGA1

и т. Д.

, затем использовать скрипт

 #!/bin/bash

 if (xrandr | grep "$DISPLAY1 connected"); then
    if (ls | grep status_flag); then  
        xrandr --output $DISPLAY1 --off
        rm status_flag
    else
        xrandr --output $DISPLAY1 --auto
        touch status_flag
    fi
 fi

При первом выполнении этого сценария монитор включается, не зная, включен или выключен монитор, и со второго раза он выключится, если монитор включен, и включится, если монитор выключен.

0
ответ дан 29 January 2014 в 15:10

Другие вопросы по тегам:

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