8/10/2009

Подключение внешнего монитора к ноутбуку с помощью xrandr в Linux

На каждом уважающем себя ноутбуке или нетбуке есть разъём для подключения внешнего монитора - для презентаций с проектора вещь необходимая. В Linux подключение внешнего монитора к ноутбуку с приходом Xrandr 1.2 и выше проблем не составляет, но на всякий случай выложу небольшое описание с примерами использования xrandr для работы с внешним монитором на ноутбуке.


Подключаем внешний монитор к ноутбуку с помощью xrandr

Не так давно я прикупил замечательный нетбук Toshiba NB-100, и сразу же потребовалось провести с него презентацию. Всё довольно просто - подключаем внешний монитор или проектор и пишем в консольке:
xrandr
На это нам xrandr ответит примерно так (цветовая раскраска - моя):
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1280 x 1280
VGA connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1280x800 60.0
1280x768 60.0
1024x768 60.0*
800x600 60.3
640x480 59.9
LVDS connected 1024x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x600 60.0*+
800x600 85.1 72.2 75.0 60.3 56.2
640x480 85.0 72.8 75.0 59.9
720x400 85.0
640x400 85.1
640x350 85.1
TV disconnected (normal left inverted right x axis y axis)
Так, что всё это значит? А значит это вот что:
  • VGA - наш внешний монитор или проектор, 1024х768- это разрешение, установленное на устройстве сейчас, 60.0 - частота кадров.
  • LVDS - собственно экран ноутбука, на котором сейчас стоит разрешение 1024х600 (так как он широкоформатный), 60.0 - частота кадров.
  • TV disconnected - ТВ-выход отключён (так как его попросту в этом нетбуке нет).
И сейчас лёгким и непринуждённым движением мы быстренько поставим на проекторе то разрешение, которое нам нужно.


Режим Clone mode

Это значит, что на внешнем мониторе \ проекторе будет отображено ТО ЖЕ САМОЕ, что и на экране ноутбука. Чтобы сделать Clone mode на новый монитор делаем так:
xrandr --output VGA --mode 1024x768 --output LVDS --mode 1024x600
Если разрешение внешнего монитора 800х600, то нужно поправить команду так:
xrandr --output VGA --mode 800x600 --pos 800x0 --output LVDS --mode 1024x600 --pos 0x0
Это всё позволит отдублировать изображение с экрана ноутбука на внешний монитор или проектор. А как быть, если нужно показывать два разных изображения?

Здесь имеет место быть маленькое лирическое отступление. Если xrandr отказывается выставлять высокое разрешение на внешнем мониторе, это может быть связано с объёмом видеопамяти. Для того, чтобы решить проблему, нужно иксам указать на использование "большого виртуального экрана". Делается это правкой файла /etc/X11/xorg.conf где в секции Section "Screen" добавляем:
Section "Screen"
Identifier "Default Screen"
Device "Generic Video Card"
Monitor "Generic Monitor"

SubSection "Display"
Virtual 2048 1024
EndSubSection

EndSection
Здесь указывается разрешение общего виртуального экрана в формате ШИРИНАхВЫСОТА (в данном случае 2048 на 1024). Именно такой вычтя из этого физическое разрешение вашего монитора, вы получите максимальное разрешение внешнего монитора ноутбука, которое можно установить с помощью xrandr.

Режим
Dual Monitor mode
При таком режиме вывод на проектор будет отличаться от вывода на монитор ноутбука: то есть вы сможете перетаскивать окна на внешний монитор, а на ноутбучном мониторе их не будет. Это очень удобно, когда вам нужно показать вывод, скажем, латеховского документа и не пугать благородных донов видом латеховского кода.

Сделать это можно с помощью правки xorg.conf, как уже говорилось, или с помощью xrandr. Чтобы сделать DualHead на внешний монитор с разрешением 1024х768 пишем
xrandr --output LVDS --mode 1024x600 --pos 0x0 --output VGA --mode 1024x768 --right-of LVDS --pos 1024x0
В этом случае ведущим будет внешний монитор (это определяется параметром --pos). То есть где 0 тот и главный монитор (на нём будут менюшки открываться). А вот так:
xrandr --output VGA --mode 1024x768 --pos 1024x0 --output LVDS --mode 1024x600 --pos 0x0
Ведущей будет панель ноутбука.

Горшочек не вари
Чтобы отключить всю эту светомузыку с внешним монитором, нужно дать команду:
xrandr --output VGA --off
после чего всё вернётся на место, внешний штепсель будет выключен и проектор отключится от вашего ноутбука.

Как повернуть экран в Linux с помощью Xrandr
Повернуть изображение на ноутбуке (в частности, удобно на нетбуке, когда хочешь почитать книжку) с помощью xrandr очень просто:

xrandr -o left

Чтобы повернуть по часовой стрелке изображение на мониторе пишем:

xrandr -o right


Чтобы вернуть всё на место, достаточно дать команду:

xrandr -o normal

И всё вернётся на свои места.

Графические утилиты для xrandr
Для того, чтобы иметь возможность всё делать через графические утилиты, есть утилита grandr. Выглядит она не просто, а очень просто:
Собственно, она является простой обёрткой для консольной утилиты xrandr и позволяет управлять подключением внешних мониторов (вращение, размещение и прочее) без необходимости что-то набирать в консоли. Аналогичная оболочка для xrandr в KDE называется krandr.


Ссылки

Весьма полезно будет ознакомиться с трудами арчеводов, линсоветчиков и общими идеями по xrandr.

16 комментариев:

  1. У вас ошибка в бонус траке. xrand -o left дважды написано, а действия разные описаны :)

    ОтветитьУдалить
  2. когда-то давно я тоже пользовался xrandr, тогда впервые пришлось подключить внешний монитор к ноутбуку. теперь почти всегда пользуюсь grandr, просто потому что удобнее.
    Впрочем в KDE вроде появилась кошерная возможность настроить внешний монитор, но пока ещё не пробовал.

    ОтветитьУдалить
  3. Немного не оценил первый пример в Dual head: Ключ --pos явно указывает параметрами 0x0 на на панел ноутбука (LVDS), а изображение на внешнем экране будет справа со сдвигом в 1024 точки по горизонтали.
    Можно этот момент поподробнее?

    ОтветитьУдалить
  4. это в том случае если корректно определяется разрешение внешнего монитора, а вот что делать когда например родное разрешение 1280x768 а определяется он как 1024x768?

    ОтветитьУдалить
  5. 2 Alexey Romanenko комментирует...
    У вас ошибка в бонус траке.
    Ага, спасибо, увидел, исправил :-)

    2 Sakal комментирует...
    когда-то давно я тоже пользовался xrandr, тогда впервые пришлось подключить внешний монитор к ноутбуку. теперь почти всегда пользуюсь grandr
    Согласен. Тут, кстати, со мной произошёл странный случай: я ТОЧНО помню, что писал и скриншотил grandr - думал, что оно есть в статье. И тут не смог найти никаких следов. Мистика прямо какая.

    Добавил в пост.

    Впрочем в KDE вроде появилась кошерная возможность
    ... называется krandr.
    10.08.2009 14:31:00

    2 Siddhassen комментирует...
    Немного не оценил первый пример в Dual head: Ключ --pos явно указывает параметрами 0x0 не на панел ноутбука (LVDS)
    Я решил перестраховаться и задать параметр ЯВНО. Есть у меня нехорошее подозрение (как совершенно справедливо отметил анонимный комментатор), что размер монитора определяется не совсем корректно.

    2 Анонимный комментирует...
    это в том случае если корректно определяется разрешение внешнего монитора
    Это да. Справедливо.

    а вот что делать когда например родное разрешение 1280x768 а определяется он как 1024x768?
    Кроме обновления драйверов вместе с иксами в голову ничего не лезет под вечер :-)

    Спасибо за ценные комментарии, друзья. Пост обновил, дополнил и улучшил.

    ОтветитьУдалить
  6. По-моему, у Вас здесь ошибочка - в конце 0 забыли

    Если разрешение внешнего монитора 800х600, то нужно поправить команду так:

    xrandr --output VGA --mode 800x600 --pos 800x0 --output LVDS --mode 1024x600 --pos 0x0

    ОтветитьУдалить
  7. 2 Анонимный комментирует...
    По-моему, у Вас здесь ошибочка - в конце 0 забыли
    Да, есть такое. Промахнулся.
    Большое спасибо, исправил в тексте.

    ОтветитьУдалить
  8. А что делать, если внешний монитор не присутствует в выводе xrandr.
    У меня ноутбук Lenovo Y430 (разрешение 1280х800), внешний монитор Samsung 961BW (разрешение 1440х900).
    при подключении монитроа xrandr выдаёт следующее:
    sag@sag-laptop:~$ xrandr
    Screen 0: minimum 320 x 240, current 1280 x 800, maximum 1280 x 800
    default connected 1280x800+0+0 0mm x 0mm
    1280x800 50.0*
    1024x768 51.0
    960x540 52.0
    840x525 53.0
    800x600 54.0
    800x512 55.0
    720x450 56.0
    700x525 57.0
    680x384 58.0 59.0
    640x512 60.0
    640x480 61.0 62.0
    576x432 63.0
    512x384 64.0
    400x300 65.0
    320x240 66.0

    ОтветитьУдалить
  9. Как прописать в конфиге чтобы у мня всегда работал экран монитора, а экрано ноутбука был выключен. Если я его отключаю, то после перезагрузки он снова включаеться. Где это прописать.

    ОтветитьУдалить
  10. Пытался как-то настроить Clone Mode так, чтобы на внешнем, более большом мониторе исходное изображение не масштабировалось, а выводилось как бы по центру экрана, окружённое фоном. Жаль, но xrandr не позволяет такую штуку сделать.

    ОтветитьУдалить
  11. Спасибо за статью.
    У меня та же проблема, что и у sag. Это при попытке подключения CRT монитора (старенький LG FLATRON T710PU). И еще при подключении кабеля к ноуту монитор в sleep уходит.
    Заранее спасибо, если будут какие-то советы.

    ОтветитьУдалить
  12. Есть ноутбук Asus V6X00V с экраном 1400*1050 (name: LVDS) и монитор Dell Monitor 1920*1080 (VGA-0).

    Хочу сделать много мониторную систему. Один стол на два монитора. В виндовз работает все отлично. Даже во время установки кубунты 10,4 вначале работало нормально два монитора в своих родных расширениях. Но вот после некоторого момента оба переключились на 1152*846. И включаються в своим нормальные ражими только когда переключаюсь в консоль или в самом конце выключение компьютера.
    То есть все показывает что работать они так могут, просто проблема с правильной настройкой.

    При любой попытке изменения разрешения или изменение позиции экранов(то есть не Clone), на монирах начинаеться веселая свистопляска с цветными полосками.

    Пробовал xrandr:
    xrandr --output LVDS --mode 1400x1050 --pos 0x0 --output VGA-0 --mode 1920x1080 --right-of LVDS --pos 1400x0
    Тоже само получаеться.

    У меня xrandr 1.3 и нет xorg.conf вообще в системе, поэтому как прописать виртуальный десктоп вообще не знаю. Если посоветуете, как можно решать данную проблему и куда "копать" вообще, буду очень признателен. Заранее спасибо!
    Посоветуйте, пожалуйста, как можно решить эту проблему.

    ОтветитьУдалить
  13. у меня "Режим Dual Monitor" через xrandr не работает. Второй монтиор всё равно клонирует первый, к тому же xrandr говорит "screen cannot be larger than 1600x1600". Ноут Lenovo, и последний Debian Lenny (5.0.5)

    ОтветитьУдалить
  14. А у меня grandr не показывает второй выход (DFP1), если в момент загрузки иксов там ничего не было и он, соответственно, отключен.
    xrandr при этом позволяет его включить, если предварительно добавить к нему каких-нибудь режимов. А grandr совсем не показывает. И режимы добавить нельзя. :(

    ОтветитьУдалить
  15. а можно каждому раб. месту назначить свой монитор?

    допустим на внешнем мониторе(основном) первое раб. место, на втором, соответсвенно, второе...
    при переключении мест они просто меняются мониторами.. второе место переползает на основной монитор, а первое раб. место на второй

    ОтветитьУдалить
  16. Что-то не получилось в Ubuntu 14.04.
    Стандартными средствами Ubuntu, работало только для моей сессии. Стоило завершить сеанс и главным становился телевизор (подключен по HDMI). Соответственно на него улетало и меню входа.
    Сделал по Вашим рекомендациям - при завершении сессии меню входа стало оставаться на мониторе компьютера (подключен по VGA). Но после перезагрузки опять "вся власть" у телевизора.

    Можете что-то посоветовать?

    ОтветитьУдалить