- X11/DualScreen
- Primary Display
- Как настроить дублирование и расширение экрана в Astra Linux через графический интерфейс
- Дублирование экранов
- Расширение рабочего стола
- Корректное отображение на всех мониторах
- Настройка дисплеев xrandr’ом
- Мой случай
- Начальные условия
- Реализация
- Использование «горячей» клавиши
- Настройка дисплеев xrandr’ом
- Мой случай
- Начальные условия
- Реализация
- Использование «горячей» клавиши
X11/DualScreen
В этойстатье описано, как создать одно рабочее место с двумя независимыми экранами.
- Описание двух полностью независимых рабочих мест — X11/DualSeat
- Несколько экранов, которые воспринимаются, как один большой дисплей, поддерживаются Xorg «из коробки» (xinerama)
Я привык в Xorg использовать два монитора, на одном из которых — мой рабочий стол с моим Window Manager-ом (у меня CTWM, но это дела не меняет), а на другом — несколько FullScreen окон, переключаться между которыми можно, например, с помощью функции «scale» композитного менеджера Compiz или паре утилит skippy-xd / brightside . Конкретные названия не имеют значения, суть одна:
- Одно рабочее место с одной клавиатурой и мышью
- Два независимых монитора, каждый управляется по-своему
- Минус — нельзя перетаскивать окна с монитора на монитор
- А вот копировать, как через clipboard (Ctrl+C/Ctrl+V), так и через cutbuffer (средняя кнопка мыши) можно
Для этого Xorg-у надо объяснить, что у него есть два т. н. SCREEN — экрана, к каждому из которых приписано по монитору.
Вот содержимое файла /etc/X11/xorg.conf.d/20-monitor.conf , который эту конфигурацию задаёт:
Section "ServerLayout" Identifier "Layout0" Screen 0 "Screen0" Screen 1 "Screen1" LeftOf "Screen0" EndSection
Section "Monitor" Identifier "Monitor0" EndSection
Section "Monitor" Identifier "Monitor1" EndSection
Section "Device" Identifier "Card0" Driver "modesetting" Screen 0 EndSection
Section "Device" Identifier "Card1" Driver "modesetting" Screen 1 EndSection
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" EndSection
Section "Screen" Identifier "Screen1" Device "Card1" Monitor "Monitor1" EndSection
Одна и та же карта (у меня Intel) здесь объявлена дважды — это особый трюк, который и позвляет добиться двух независимых экранов. Если карт несколько (например, дискрентая и интегрированная на ноутбуке), указываются все по разу.
После запуска Xorg получится два различных валидных значения переменной DISPLAY :
- :0.0 — для нулевого монитора/экрана; команда вида DISPLAY=:0.0 xterm запустит xterm на правом экране
- :0.1 — для первого монитора/экрана; команда вида DISPLAY=:0.1 firefox запустит firefox на правом экране
Primary Display
В принципе, этого уже достаточно, за одним исключением.
В Qt есть такой метод — QGuiApplication::primaryScreen(). Этот метод возвращает первый попавшийся монитор, помеченный протоколом XRandr как первичный. Если у вас все мониторы объединены в один DISPLAY=:0 , то среди них только один должен быть первичный — именно на нём, например, появится панель запуска вашего Window Manager/DE.
В нашем случае задано два экрана — и значит, два первичных монитора по умолчанию. По какой-то неведомой мне причине Xorg отказывается воспринимать параметр Options «Primary» «off» в случае, когда монитор на экране один, и пишет в логах, что она «not used». может, я что-то делаю не так.
При этом у меня при старте Qt-приложений (например, последнего Telegram) они запускаются на этом самом primaryScreen независимо от значение переменной DISPLAY (если она валидна)!
Поэтому перед запуском таких приложений я делаю
DISPLAY=:0.1 xrandr --noprimary
Это снимает флаг primary с левого монитора, и Qt-приложения начинают запускаться на правом.
Как настроить дублирование и расширение экрана в Astra Linux через графический интерфейс
При подключении к Astra Linux второго монитора или проектора, можно выбрать произвольный режим отображения изображения. В зависимости от ситуации, это может быть: дублирование экранов или расширение рабочего стола.
Дублирование экранов
Настроить дублирование изображения на двух и более экранах, нужно нажать на рабочем столе правой кнопкой мыши и выбрать «Настройки монитора»:
Далее мы просто переносим один экран на другой, таким способом мы включим дублирование экранов:
В конце не забываем нажать на кнопку «Применить».
Расширение рабочего стола
Расширение рабочего стола настраивается аналогично дублированию, для этого необходимо разместить второй монитор с нужной стороны от первого:
И также не забываем нажать на кнопку «Применить».
Корректное отображение на всех мониторах
В заключение хочется еще добавить, что в отличии от Windows при дублировании или расширении экрана, если разрешение экранов разное у нас будут черные (или цвет обоев) полосы по краям. Для того чтобы экраны смотрелись одинаково, нужно устанавливать одно расширение (или примерно похожее, если нет одинакового варианта):
Например, если у вас главный экран выдает разрешение 16:9, а на втором экране вы ставите 4:3, то часть изображения на втором мониторе будет выходить за пределы экрана.
Возможно вам так же будет интересно:
Если я Вам помог — оставьте свой отзыв или поделитесь сайтом с друзьями в социальных сетях!
Настройка дисплеев xrandr’ом
Для ноутбуков, иметь внешний видеовыход — привычное дело. И большинство видеокарт для настольных систем тоже имеют как минимум два. Для эффективного использования более одного монитора можно изменить параметры для каждого по отдельности.
Мой случай
Есть ноутбук с VGA-выходом. Дома стоит монитор, который может 1680х1050@60Hz, а на работе 1280х1024@72Hz. По умолчанию, xorg запускался, стараясь вывести сигнал на все возможные выходы. При этом драйвер radeon искал компромисс между разными разрешениями мониторов и экрана ноутбука. И если один из них работал только в режиме 1024х768, то остальные получали такую же картинку. Поиск в Интернет подсказал использовать xrandr для настройки.
Начальные условия
- 01:05.0 VGA compatible controller [0300]: ATI Technologies Inc RS690M [Radeon X1200 Series] [1002:791f]
- xorg-server-1.5.1-alt2
- xorg-drv-radeon-6.9.0-alt3
- графический режим запускается хотя бы на одном мониторе
Реализация
Заставить xorg скриптом переключать к нужному видеовыходу картинку максимального разрешения. При этом приходится отключать другой видеовыход, чтоб драйвер не пробовал искать компромисс.
Для начала я определил, как называются видеовыходы (обозначены полужирным шрифтом):
#xrandr Screen 0: minimum 320 x 200, current 1280 x 800, maximum 1680 x 1600 VGA-0 connected (normal left inverted right x axis y axis) 1680x1050 60.0 + 60.0 <. cut . >720x400 70.1 LVDS connected 1280x800+0+0 (normal left inverted right x axis y axis) 0mm x 0mm 1280x800 60.0*+ <. cut . >640x480 59.9 HDMI-0 disconnected (normal left inverted right x axis y axis)
Затем был создан первый скрипт, который:
#!/bin/bash xrandr --output LVDS --off xrandr --output VGA-0 --auto
Второй скрипт, позволял переключаться обратно на экран ноутбука:
#!/bin/bash xrandr --output VGA-0 --off xrandr --output LVDS --auto
Третий, включал оба выхода ( VGA-0 и LVDS ) в режиме дублирования, при этом использовалось «минимальное общее» разрешение
#!/bin/bash xrandr --output LVDS --off xrandr --output VGA-0 --off xrandr --output LVDS --mode 1024x768 xrandr --output VGA-0 --mode 1024x768
TODO: Найти устройство с HDMI и попробовать выводить сигнал на него.
Использование «горячей» клавиши
Для переключения видеовыходов (на ноутбуках), есть комбинация Fn+[соответствующая кнопка]. ACPId видит её как:
acpid: received event "video VGA 00000080 00000000"
Потому, создаём описание события в /etc/acpi/events/[произвольное название] :
event=video VGA 00000080 00000000 action=/etc/acpi/switchVga.sh
И добавляем соответствующий сценарий, который реализует циклическое переключение между LVDS->VGA->LVDS+VGA:
#!/bin/bash VGASTAT=$( cat /tmp/vgastatus 2>/dev/null ) case $VGASTAT in "LVDS" ) # It was LVDS, switching on VGA xrandr --output LVDS --off; xrandr --output VGA-0 --auto; echo "VGA-0" > /tmp/vgastatus ; ;; "VGA-0" ) # It was VGA, switching on ALL (HDMI was not tested xrandr --output LVDS --off; xrandr --output VGA-0 --off; xrandr --output LVDS --mode 1024x768; xrandr --output VGA-0 --mode 1024x768; echo "ALL" > /tmp/vgastatus; ;; "ALL" ) # It was ALL , switching on LVDS xrandr --output VGA-0 --off; xrandr --output LVDS --auto; echo "LVDS" > /tmp/vgastatus; ;; "" ) # If we've rebooted comp, switching on LVDS xrandr --output VGA-0 --off; xrandr --output LVDS --auto; echo "LVDS" > /tmp/vgastatus; ;; esac
Настройка дисплеев xrandr’ом
Для ноутбуков, иметь внешний видеовыход — привычное дело. И большинство видеокарт для настольных систем тоже имеют как минимум два. Для эффективного использования более одного монитора можно изменить параметры для каждого по отдельности.
Мой случай
Есть ноутбук с VGA-выходом. Дома стоит монитор, который может 1680х1050@60Hz, а на работе 1280х1024@72Hz. По умолчанию, xorg запускался, стараясь вывести сигнал на все возможные выходы. При этом драйвер radeon искал компромисс между разными разрешениями мониторов и экрана ноутбука. И если один из них работал только в режиме 1024х768, то остальные получали такую же картинку. Поиск в Интернет подсказал использовать xrandr для настройки.
Начальные условия
- 01:05.0 VGA compatible controller [0300]: ATI Technologies Inc RS690M [Radeon X1200 Series] [1002:791f]
- xorg-server-1.5.1-alt2
- xorg-drv-radeon-6.9.0-alt3
- графический режим запускается хотя бы на одном мониторе
Реализация
Заставить xorg скриптом переключать к нужному видеовыходу картинку максимального разрешения. При этом приходится отключать другой видеовыход, чтоб драйвер не пробовал искать компромисс.
Для начала я определил, как называются видеовыходы (обозначены полужирным шрифтом):
#xrandr Screen 0: minimum 320 x 200, current 1280 x 800, maximum 1680 x 1600 VGA-0 connected (normal left inverted right x axis y axis) 1680x1050 60.0 + 60.0 <. cut . >720x400 70.1 LVDS connected 1280x800+0+0 (normal left inverted right x axis y axis) 0mm x 0mm 1280x800 60.0*+ <. cut . >640x480 59.9 HDMI-0 disconnected (normal left inverted right x axis y axis)
Затем был создан первый скрипт, который:
#!/bin/bash xrandr --output LVDS --off xrandr --output VGA-0 --auto
Второй скрипт, позволял переключаться обратно на экран ноутбука:
#!/bin/bash xrandr --output VGA-0 --off xrandr --output LVDS --auto
Третий, включал оба выхода ( VGA-0 и LVDS ) в режиме дублирования, при этом использовалось «минимальное общее» разрешение
#!/bin/bash xrandr --output LVDS --off xrandr --output VGA-0 --off xrandr --output LVDS --mode 1024x768 xrandr --output VGA-0 --mode 1024x768
TODO: Найти устройство с HDMI и попробовать выводить сигнал на него.
Использование «горячей» клавиши
Для переключения видеовыходов (на ноутбуках), есть комбинация Fn+[соответствующая кнопка]. ACPId видит её как:
acpid: received event "video VGA 00000080 00000000"
Потому, создаём описание события в /etc/acpi/events/[произвольное название] :
event=video VGA 00000080 00000000 action=/etc/acpi/switchVga.sh
И добавляем соответствующий сценарий, который реализует циклическое переключение между LVDS->VGA->LVDS+VGA:
#!/bin/bash VGASTAT=$( cat /tmp/vgastatus 2>/dev/null ) case $VGASTAT in "LVDS" ) # It was LVDS, switching on VGA xrandr --output LVDS --off; xrandr --output VGA-0 --auto; echo "VGA-0" > /tmp/vgastatus ; ;; "VGA-0" ) # It was VGA, switching on ALL (HDMI was not tested xrandr --output LVDS --off; xrandr --output VGA-0 --off; xrandr --output LVDS --mode 1024x768; xrandr --output VGA-0 --mode 1024x768; echo "ALL" > /tmp/vgastatus; ;; "ALL" ) # It was ALL , switching on LVDS xrandr --output VGA-0 --off; xrandr --output LVDS --auto; echo "LVDS" > /tmp/vgastatus; ;; "" ) # If we've rebooted comp, switching on LVDS xrandr --output VGA-0 --off; xrandr --output LVDS --auto; echo "LVDS" > /tmp/vgastatus; ;; esac