xrandr: как проверить, зеркалирует ли экран

Какой простой способ проверить, зеркалируются ли мои мониторы с помощью xrandr?

Фон
Я использую полибар, и на данный момент у меня есть скрипт, который запускает дополнительный полибар, если мой второй монитор подключен. Проблема в том, что когда я зеркалирую, я не хочу запускать этот второй бар. Вот мой код, если кому интересно:

#!/bin/bash

# Terminate already running bar instances
killall -q polybar

# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done

# Launch bar 
polybar main_bar -r & 

my_laptop_external_monitor=$(xrandr --query | grep 'HDMI-1')
if [[ $my_laptop_external_monitor = *connected* ]]; then
    polybar external_bar &
fi

person Mattias Johnson    schedule 14.02.2019    source источник


Ответы (1)


Я запустил xrandr --listmonitors в своей системе с клонированными мониторами и без них:

Не клонировано:

Monitors: 2
 0: +*DisplayPort-0 1920/598x1080/336+1920+0  DisplayPort-0
 1: +HDMI-0 1920/598x1080/336+0+0  HDMI-0

Клонировано

Monitors: 2
 0: +*DisplayPort-0 1920/598x1080/336+0+0  DisplayPort-0
 1: +HDMI-0 1920/598x1080/336+0+0  HDMI-0

Единственная разница заключается в положении вывода на экране, 1920+0 против 0+0. Когда монитор зеркалируется, положение обоих мониторов одинаково (оба 0+0).

Если вы зеркалируете свои мониторы таким образом1, хороший способ проверить, является ли монитор зеркальным, — сравнить их позиции в выводе xrandr --listmonitors.

Я не думаю, что есть более чистый способ, чем этот. Насколько я могу судить, вы на самом деле не зеркалируете и не клонируете мониторы, вы только устанавливаете их положение внутри экрана таким образом, чтобы они перекрывались, и при рендеринге оба монитора показывают одно и то же изображение, потому что они находятся в одном и том же месте. Вот почему на самом деле нет простого способа протестировать зеркальные экраны.


1Примечание. Монитор был клонирован с помощью следующей команды

xrandr --output HDMI-0 --same-as DisplayPort-0
person Patrick Ziegler    schedule 18.02.2019
comment
Итак, если я правильно понял, позиция будет 0+0 для обоих при зеркалировании независимо от разрешения внешнего монитора (разрешение внешнего монитора, которое я использую, различается) - person Mattias Johnson; 18.02.2019
comment
@MattiasJohnson Да, это очень вероятно, особенно если у вас не более двух мониторов, но вам придется проверить это самостоятельно, чтобы быть абсолютно уверенным. Разрешение внешнего монитора не должно иметь значения, так как оно все равно будет масштабироваться до разрешения основного монитора. - person Patrick Ziegler; 18.02.2019