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
после чего всё вернётся на место, внешний штепсель будет выключен и проектор отключится от вашего ноутбука.

Bonus Track: повернуть экран с помощью Xrandr
Чтобы не плодить лишних постов, напишу сюда, как повернуть изображение на ноутбуке (в частности, удобно на нетбуке, когда хочешь почитать книжку). Для поворота изображения против часовой стрелки пишем:

xrandr -o left

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

xrandr -o right


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

xrandr -o normal

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

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


Ссылки

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

а если копируете статью - поставьте ссылку на оригинал!

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

Alexey Romanenko 10.08.2009 5:01:00  

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

Sakal 10.08.2009 14:31:00  

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

Siddhassen 10.08.2009 14:41:00  

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

Анонимный,  10.08.2009 16:51:00  

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

virens 10.08.2009 21:08:00  

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?
Кроме обновления драйверов вместе с иксами в голову ничего не лезет под вечер :-)

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

Анонимный,  11.08.2009 15:16:00  

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

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

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

virens 12.08.2009 15:58:00  

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

sag 12.08.2009 16:58:00  

А что делать, если внешний монитор не присутствует в выводе 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

Анонимный,  20.08.2009 9:37:00  

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

Konst 31.08.2009 14:27:00  

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

Ьамберк 01.09.2009 9:13:00  

Здравствуйте ! немного не в тему, но немогли бы вы поподробнее осветить процесс настройки CRT монитора? (ну нету у меня LCD :))

Zoresvit 06.11.2009 12:43:00  
Это сообщение было удалено автором.
Zoresvit 06.11.2009 12:48:00  

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

Поиск по сайту

Архивы блога

Новостная лента


Читать новости блога удобнее, подписавшись на
-ленту.
краткая лента новостей.
Блокнот интересных ссылок в Twitter
Получать на E-mail Записки дебианщика rss2email.ru

Последние новости

Все записки дебианщика

Скачать локальную версию блога "Записки дебианщика" для offline-просмотра можно здесь. Архив 7z занимает ~120Мб, в распакованном виде ~2Гб.

Постоянные читатели

Экипаж

Автор
My Photo
Михаил Конник
Инженер-физик, занимаюсь оптикой и цифровой обработкой изображений. Профиль
Главный редактор
Моя фотография
Programmaster, в полный рост

Кнопки