Примеры использования команды XRANDR

Итак, перво наперво введем команду xrandr в терминале (с запущенным Х сервером). Увидим что-то типа этого:

DFP2 disconnected (normal left inverted right x axis y axis)
CRT1 connected 1280×1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
1280×1024 75.0*+ 60.0
1280×960 60.0
1152×864 75.0 60.0
1280×768 59.9
1280×720 60.0
1024×768 75.0 70.1 60.0
800×600 72.2 75.0 70.0 60.3 56.2
720×480 60.0
640×480 75.0 72.8 60.0
640×432 60.0
640×400 75.1 59.9
512×384 60.0 74.9
400×300 75.0 60.7
320×240 75.6 60.0
320×200 75.5 60.1
CRT2 disconnected (normal left inverted right x axis y axis)
TV disconnected (normal left inverted right x axis y axis)
COMPONENT_VIDEO disconnected (normal left inverted right x axis y axis)

DFP2, CRT1, CRT2, TV и COMPONENT_VIDEO — это выходы нашей видеокарты (у вас они могут быть другими). Видим, что нам нужен включенный CRT1. Далее видим возможные режимы работы. Звездочка стоит у текущей частоты напротив текущего разрешения. Плюсик показывает, по всей видимости, наилучший режим.

Меняем разрешение и частоту монитора:

$ xrandr --output CRT1 --mode 1024x768

Меняем частоту монитора:

$ xrandr --output CRT1 --rate 60

Переворачиваем изображение в верх ногами:

$ xrandr --output CRT1 --rotate inverted

Поворачиваем изображение по часовой стрелке :

$ xrandr --output CRT1 --rotate right

Поворачиваем изображение против часовой стрелки :

$ xrandr --output CRT1 --rotate left

Возвращаем обычный вывод:

$ xrandr --output CRT1 --rotate normal

Отражаем изображение по вертикали:

$ xrandr --output CRT1 --reflect x

Отражаем изображение по горизонтали:

$ xrandr --output CRT1 --reflect y

Отражаем изображение по вертикали и горизонтали:

$ xrandr --output CRT1 --reflect xy

Возвращаем обычный вывод:

$ xrandr --output CRT1 --reflect normal

Выключаем экран ( Подмигиваю аккуратнее, включить можно будет, задав разрешение, но делать это надо будет вслепую)

$ xrandr --output CRT1 —off

Команды можно комбинировать, например:

$ xrandr --output CRT1 --mode 1024x768 -rate 60 --reflect y --rotate inverted


Теперь вариант, когда у вас 2 монитора.

Выполняем xrandr. Видим что-то типа этого:

Screen 0: minimum 320 x 200, current 2560 x 1024, maximum 2560 x 2048
DFP2 disconnected (normal left inverted right x axis y axis)
CRT1 connected 1280×1024+0+0 normal Y axis (normal left inverted right x axis y axis) 376mm x 301mm
1280×1024 75.0*+ 60.0
1280×960 60.0
1152×864 75.0 60.0
1280×768 59.9
1280×720 60.0
1024×768 75.0 70.1 60.0
800×600 72.2 75.0 70.0 60.3 56.2
720×480 60.0
640×480 75.0 72.8 60.0
640×432 60.0
640×400 75.1 59.9
512×384 60.0 74.9
400×300 75.0 60.7
320×240 75.6 60.0
320×200 75.5 60.1
CRT2 connected 1280×1024+1280+0 (normal left inverted right x axis y axis) 376mm x 301mm
1280×1024 75.0*+ 60.0
1280×960 60.0
1152×864 75.0 60.0
1280×768 59.9
1280×720 60.0
1024×768 75.0 70.1 60.0
800×600 72.2 75.0 70.0 60.3 56.2
720×480 60.0
640×480 75.0 72.8 60.0
640×432 60.0
640×400 75.1 59.9
512×384 60.0 74.9
400×300 75.0 60.7
320×240 75.6 60.0
320×200 75.5 60.1
TV disconnected (normal left inverted right x axis y axis)
COMPONENT_VIDEO disconnected (normal left inverted right x axis y axis)

Обратим внимание на первую строчку. Это наш экран. Это такая виртуальная область, где мы можем располагать наши мониторы. Для наших дальнейших экспериментов нам нужен экран по высоте равный сумме высот наших мониторов, а по ширине сумме размеров наших мониторов. Это нужно, чтобы наши мониторы могли поместиться в экране в любых комбинациях. То есть для меня это 2560×2048. Задаю это значение:

$ xrandr --screen 0 --fb 2560x2048

Наши мониторы подключены к выходам CRT1 и CRT2. Вышеперечисленные команды можно применять по-отдельности к каждому монитору. Например:

$ xrandr --output CRT1 --mode 1024x768

$ xrandr --output CRT2 --rate 60

$ xrandr --output CRT1 --mode 1280x1024 -rate 75 --output CRT2 --mode 1024x768-rate 60

Расширяем экран на два монитора, CRT2 слева от CRT1:

$ xrandr --output CRT2 --left-of CRT1

Расширяем экран на два монитора, CRT2 справа от CRT1:

$ xrandr --output CRT2 --right-of CRT1

Расширяем экран на два монитора, CRT2 над CRT1:

$ xrandr --output CRT2 --above-of CRT1

Расширяем экран на два монитора, CRT2 под CRT1:

$ xrandr --output CRT2 --below-of CRT1

Расширяем экран на два монитора, CRT2 копирует CRT1:

$ xrandr --output CRT2 --same-as CRT1

Этих же эффектов можно достичь, задавая положение мониторов на экране (задается положение верхнего левого угла монитора, относительно верхнего левого угла экрана):

$ xrandr --output CRT1 --pos 0x0 --output CRT2 --pos 1280x0

Так же, как можно вращать/отражать каждый монитор по-отдельности, можно весь экран:

$ xrandr -o inverted

$ xrandr -y

Можно задать частоту всего экрана:

$ xrandr --rate 60

Ну надеюсь, смысл понятен. Теперь рабочие примеры. У меня ноут с выходом для моника, к которому я подключаю дома монитор, стоящий слева, который можно вращать, а на работе проектор. На рабочий стол я положил несколько скриптов:

Подключен монитор в обычном положении:

$ xrandr --screen 0 --fb 2304x1024 --output CRT1 --mode 1280x1024 --rate 75 --output CRT2 --mode 1024x800 --rate 75 --left-of CRT1

Подключен монитор в повернутом положении:

$ xrandr --screen 0 --fb 2080x1024 --output CRT1 --mode 1280x1024 --rate 75 --output CRT2 --mode 1024x800 --rate 75 --rotate left --left-of CRT1

Подключен проектор, на который расширяется стол:

$ xrandr --screen 0 --fb 2080x1024 --output CRT1 --mode 1280x1024 --rate 75 --output CRT2 --mode 800x600 --rate 60 --left-of CRT1

Подключен монитор в режиме презентации:

$ xrandr --screen 0 --fb 800x600 --output CRT1 --mode 800x600 --rate 75 --output CRT2 --mode 800x600 --rate 60 --same-as CRT1

Ничего не подключено, просто монитор:

$ xrandr --screen 0 --fb 1280x1024 --output CRT1 --mode 1280x1024 --rate 75 --output CRT2 --off

Ну и напоследок - создание нового режима для монитора:

Вызываем утилиту cvt (Coordinated Video Timing) с необходимым разрешением и частотой кадров в качестве параметров (в качестве примера добавим режим 1600x900 при 60Гц):
$ cvt 1600 900 60

Вывод утилиты cvt с нашими параметрами таков:
# 1600x900 59.95 Hz (CVT 1.44M9) hsync: 55.99 kHz; pclk: 118.25 MHz
Modeline "1600x900_60.00" 118.25 1600 1696 1856 2112 900 903 908 934 -hsync +vsync

Далее мы скопируем всё, что после Modeline в опции xrandr, с ключём создания нового режима:
$ xrandr --newmode "1600x900_60.00" 118.25 1600 1696 1856 2112 900 903 908 934 -hsync +vsync

Теперь осталось "привязать" созданный режим к нужному интерфейсу (в нашем примере к VGA1):
$ xrandr --addmode VGA1 1600x900_60.00

Наконец, мы можем выбрать нужное нам разрешение для монитора:
xrandr --output VGA1 --mode 1600x900_60.00

Обсудить на форуме (комментариев 0).