Настройка дисплеев xrandr'ом: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
Нет описания правки
 
(не показаны 2 промежуточные версии 2 участников)
Строка 1: Строка 1:
[[Категория:HOWTO]] [[Категория:Linux Desktop]]
{{stub}}
{{stub}}
== Вступление ==
== Вступление ==


Строка 21: Строка 18:


Заставить xorg скриптом переключать к нужному видеовыходу картинку максимального разрешения. При этом приходится отключать другой видеовыход, чтоб драйвер не пробовал искать компромисс.
Заставить xorg скриптом переключать к нужному видеовыходу картинку максимального разрешения. При этом приходится отключать другой видеовыход, чтоб драйвер не пробовал искать компромисс.
<tt>TODO:</tt> ''Привязать скрипты к функциональным кнопкам.''


Для начала я определил, как называются видеовыходы (обозначены полужирным шрифтом):
Для начала я определил, как называются видеовыходы (обозначены полужирным шрифтом):
Строка 60: Строка 55:


<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
[[category:использование оборудования]]
{{Category navigation|title=Использование оборудования|category=использование оборудования|sortkey={{SUBPAGENAME}}}}

Текущая версия от 16:42, 30 июня 2015

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Вступление

Для ноутбуков, иметь внешний видеовыход - привычное дело. И большинство видеокарт для настольных систем тоже имеют как минимум два. Для эффективного использования более одного монитора можно изменить параметры для каждого по отдельности.

Мой случай

Есть ноутбук с 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)

Затем был создан первый скрипт, который:

  1. Отключал экран ноутбука (LVDS)
  2. Переключал монитор (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