Настройка дисплеев xrandr'ом: различия между версиями
DiYago (обсуждение | вклад) мНет описания правки |
DiYago (обсуждение | вклад) Нет описания правки |
||
Строка 21: | Строка 21: | ||
Заставить xorg скриптом переключать к нужному видеовыходу картинку максимального разрешения. При этом приходится отключать другой видеовыход, чтоб драйвер не пробовал искать компромисс. | Заставить xorg скриптом переключать к нужному видеовыходу картинку максимального разрешения. При этом приходится отключать другой видеовыход, чтоб драйвер не пробовал искать компромисс. | ||
Для начала я определил, как называются видеовыходы (обозначены полужирным шрифтом): | Для начала я определил, как называются видеовыходы (обозначены полужирным шрифтом): | ||
Строка 60: | Строка 58: | ||
<tt>TODO:</tt> ''Найти устройство с HDMI и попробовать выводить сигнал на него.'' | <tt>TODO:</tt> ''Найти устройство с HDMI и попробовать выводить сигнал на него.'' | ||
== Использование "горячей" клавиши == | |||
Для переключения видеовыходов (на ноутбуках), есть комбинация Fn+[соответствующая кнопка]. ACPId видит её как: | |||
acpid: received event "'''video VGA 00000080 00000000'''" | |||
Потому, создаём описание события в <code>/etc/acpi/events/[произвольное название]</code>: | |||
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 |
Версия от 21:11, 4 октября 2008
Вступление
Для ноутбуков, иметь внешний видеовыход - привычное дело. И большинство видеокарт для настольных систем тоже имеют как минимум два. Для эффективного использования более одного монитора можно изменить параметры для каждого по отдельности.
Мой случай
Есть ноутбук с 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)
Затем был создан первый скрипт, который:
- Отключал экран ноутбука (LVDS)
- Переключал монитор (VGA-0) в наилучший режим
#!/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