4/27/2009

Настройка Dual-Head в Linux на примере ноутбука Asus M5200AE

Итак, нужно настроить режим отображения на два разных монитора - чтобы между разными экранами можно переносить окна приложений. Такой режим, в отличие от Clone Mode (клон, на второй мониторе тоже, что и на первом), называется Dual Head ("две головы", второй монитор отображает другое).

Для этого нужно поправить xorg.conf, и править его придётся несколько больше, чем для Clone mode. В режиме Dual Head требуется описать два монитора и две видеокарты в xorg.conf (напомню, что конфиг этот лежит в /etc/X11/ и отвечает за весь графический режим). После того, как всё это будет сделано, нужно включить расширение Xinerama. Ну и естественно, перед тем, как вы начнёте крошить ваш xorg.conf, нужно сделать резервную копию старого конфига.

Режим Dual Head в Linux - xrandr
Если у вас свежий дистрибутив и xrandr новых версий (старше 1.2), то двухголовый режим можно сделать так:
xrandr --output VGA --auto --output LVDS --mode 1280x800 --left-of VGA
При этом xrandr может выдать ошибку, что режим не может быть установлен - для этого нужно увеличить размер виртуального экрана в конфигурационном файле
/etc/X11/xorg.conf следующим образом:

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"

Subsection "Display"
Virtual 4096 2048
EndSubsection
EndSection
Для отключения режима dualhead в linux пишем в консоли:
xrandr --output VGA --off
Если на консоль у вас аллергия и вообще терминалофобия, есть графические утилиты вроде gxrandr.

Режим Dual Head в Linux - вариант с Xorg.conf
Итак, привожу рабочий конфиг xorg.conf Что-то в нём будет отмечено серым - это не важно. Цветом я выделил наиболее критичные куски, которые ещё отдельно прокомментирую. Начало конфига трогать не надо - там нет ничего, что относится к двухголовости: пути к шрифтам и настройки раскладки клавиатуры. Поэтому пропускаем и идём дальше.

# XF86Config-4 (XFree86 X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the XF86Config-4 manual page.
# (Type "man XF86Config-4" at the shell prompt.)
#
# This file is automatically updated on xserver-xfree86 package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xfree86
# package.
#

Section "Files"
# FontPath "unix/:7100" FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/lib/X11/fonts/Type1"
FontPath "/usr/share/fonts/X11/CID"
FontPath "/usr/lib/X11/fonts/CID"
FontPath "/usr/lib/X11/fonts/Speedo"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/lib/X11/fonts/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/usr/lib/X11/fonts/75dpi"
EndSection

Section "Module"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "vbe"
EndSection

Section "InputDevice"
Identifier "Default Keyboard"
Driver "keyboard"
Option "CoreKeyboard"
Option "XkbRules" "xfree86"
Option "XkbModel" "pc102"
Option "XkbLayout" "us,ru(winkeys)"
Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
EndSection


Теперь переходим к разделу Device - тут надо описать две видеокарты. Названия идентификаторов важны, так как на них
вы будете ссылаться дальше. Мониторы имеют номера 0 и 1, BusID остаётся один и тот же.
Section "Device"
Identifier "Intel Corporation Intel Default Card"
Driver "i810"
BusID "PCI:0:2:0"
Option "MonitorLayout" "CRT,LFP"
Screen 0
EndSection

Section "Device"
Identifier "Intel Corporation Intel Default Card External"
Driver "i810"
BusID "PCI:0:2:0"
Option "Display" "CRT"
Option "MonitorLayout" "CRT,LFP"
Screen 1
EndSection


Отлично, теперь к двум видеокартам надо описать два монитора. Будьте внимательны и указывайте правильные частоты HorizSync и VertRefresh.
Section "Monitor"
Identifier "Default Monitor"
HorizSync 28-50
VertRefresh 43-75
Option "DPMS"
EndSection

Section "Monitor"
Identifier "External Monitor"
HorizSync 30-81
VertRefresh 56-75
DisplaySize 372 301
Option "DPMS"
EndSection


Дальше описываем разрешения, которые могут реализовать наши мониторы - не перепутайте частоты для Default monitor и External monitor. Также следует указать правильные идентификаторы видеокарт.
Section "Screen"
Identifier "Default Screen"
Device "Intel Corporation Intel Default Card
Monitor
"Default Monitor"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 4
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 8
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 15
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection

Section "Screen"
Identifier "External Screen"
Device
"Intel Corporation Intel Default Card External"
Monitor
"External Monitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768" "800x600"
EndSubSection
EndSection

А если вы хотите таскать окошки приложений между мониторими, нужно включить расширение Xinerama (оно содержится в пакетах libdmx1 и libxinerama1).
Section "ServerLayout"
Identifier "Default Layout"
Option "Xinerama" "true"
Screen 0 "External Screen"
Screen 1 "Default Screen" LeftOf "External Screen"
InputDevice "Default Keyboard"
InputDevice "Configured Mouse"
EndSection

Section "DRI"
Mode 0666
EndSection
Указание параметра LeftOf, как можно догадаться, делает внешний экран слева от основного.

Если Xinerama не включить, то при старте иксов на внешнем мониторе появится стандартная сеточка, но перетащить туда ничего не получится.

Что ещё
Режим Dual Head особенно актуален: например, вашему научруку резко плохеет от текста статьи, оформленной в LaTeX, но текст нужно обсудить, а перегон в Word это безумие. Что делать? Берём и настраиваем режим Dual Head, на главном мониторе у вас Kile, и вы можете править текст. На внешний монитор вытаскиваем Kdvi, где текст отрисовывается в конечном виде. Все довольны и счастливы: и вы работаете в привычной среде, и ваше начальство видит привычную картинку.

Ссылки

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

24 комментария:

  1. Ужас как сложно!
    А что-то типа:
    xrandr --output DVI-0 --rate 75 --auto --left-of VGA-0
    не помогает?

    ОтветитьУдалить
  2. Очепятка. В начале. "Режим Dial Head в Linux"

    ОтветитьУдалить
  3. 2 Const комментирует...
    Ужас как сложно!Да ладно вам! :-) Так в официальной документации рекомендовали делать.

    А что-то типа:
    xrandr --output DVI-0 --rate 75 --auto --left-of VGA-0
    не помогает?
    Попробую. Я уже пробовал с xrandr: у меня он делает clone или поворачивает монитор. DualHead не получилось.

    Спасибо за пример, попробую.

    2 alexustinov комментирует...
    Очепятка. В начале. "Режим Dial Head в LinuxСпасибо, пофиксено!

    ОтветитьУдалить
  4. Более интересное применение dual head -создание двух рабочих мест под линухом на базе одной машины.

    ОтветитьУдалить
  5. эээ... это для динозавров способ. сейчас или всё делается через twinview nvidiaвский или через xrandr (на интеловских карточках)

    ну и гуи есть для xrandr

    ОтветитьУдалить
  6. У меня на бубунту 8.10 заработало без доп. шаманства с xorg.conf - с помощью xrandr. Даже на хоткей скрипт повесил!
    Можно этот скрипт повесить, я думаю, на событие подключения нового моника, если это событие можно кем-нибудь перехватить. Но мне пока ручками включения хватает.

    ОтветитьУдалить
  7. Недавно пытался так сделать, в итоге если развернуть окошко, то оно сразу на два монитора выворачивается -- независимых не получается. С каким адаптером и каким xorg'ом это получается?

    ОтветитьУдалить
  8. Давненько на Ютубе видел интересное применение dual head, точнее даже triple head
    http://www.youtube.com/watch?v=f0DcCXBB3KM
    http://www.youtube.com/watch?v=cCrpu0egr9o
    Оказывается вот оно как делается. Спасибо за ман )

    ОтветитьУдалить
  9. А какой у Вас WM?
    Можно как-то сделать этот скрин дополнительным ворксейсом? Чтобы переключитать воркспейсы независимо от мониторов?

    ОтветитьУдалить
  10. Во! Собственно, мувик, который vrybas и упомянул - то, что я хочу достигнуть. Я правильно понимаю, что это подразумевает то, что упомянуто в статье под "серой сеточкой"?

    ОтветитьУдалить
  11. 2 andrey i. mavlyanov комментирует...
    эээ... это для динозавров способ.Ну и что? Главное, что работает.

    через xrandr (на интеловских карточках)Вспоминать неохота. А тут кинул конфиг - и поехаели.

    2 Murz комментирует...
    У меня на бубунту 8.10 заработало без доп. шаманства с xorg.conf - с помощью xrandr.Кстати, про xrandr я в этом плане забыл. Надо будет попробовать.

    2 Анонимный комментирует...
    С каким адаптером и каким xorg'ом это получается?Интеловская карта Intel Graphics Media Accelerator 900, иксы 7.1.0-16

    2 vrybas комментирует...
    Давненько на Ютубе видел интересное применение dual head, точнее даже triple headДа, но это, насколько я понимаю, не dualhead, а множественная конфигурация мониторов. Делается с помощью Xinerama, если не ошибаюсь.


    2 cramur комментирует...
    А какой у Вас WM?У меня IceWM. Панелька только на главном мониторе, остальное чисто поле :-)

    Можно как-то сделать этот скрин дополнительным ворксейсом? Чтобы переключитать воркспейсы независимо от мониторов?Всё так и происходит: я переключаю воркспейс, и окна, раскиданные по двум мониторам, переключаются как на одном.


    2 cramur комментирует...
    Во! Собственно, мувик, который vrybas и упомянул - то, что я хочу достигнуть. Я правильно понимаю, что это подразумевает то, что упомянуто в статье под "серой сеточкой"?Не совсем. У меня на ноутбуке выход на второй монитор, а ролики на ютубе - это про то, как растянуть изображение на несколько мониторов, в том числе на разные машины. Это Xinerama, помоему, так делать умеет. Я, кстати, давно хочу попробовать.

    ОтветитьУдалить
  12. Нет, мне надо наоборот, чтобы когда я переключал воркспейс на одном мониторе, на другом _не_ переключался.

    И, да, через xrandr на лету, быстро можно сделать то же самое - я когда в школе веду занятия, иногда пользуюсь проектором, очень удобно. Но ion3 на именно такой конфигурации не работает нормально - концепция одного большого экрана и двух ViewPoint вообще крайне ущербна, имхо. А по-другому я не нашёл настройки. Приходится довольстоваться клонами

    ОтветитьУдалить
  13. 2 geekobyte комментирует...
    Нет, мне надо наоборот, чтобы когда я переключал воркспейс на одном мониторе, на другом _не_ переключался.Круто. Я так сходу рецепт предложить не могу. :-)

    И, да, через xrandr на лету, быстро можно сделать то же самое - я когда в школе веду занятия, иногда пользуюсь проектором, очень удобно.У меня xrandr кстати такого не сумел. Надо всё-таки на ленни перепозать :-)

    ОтветитьУдалить
  14. Вот и я припёрся. Как всегда, буду придираться :)

    чтобы между разными экранами можно переносить окна приложений между разными экранами.Что-то здесь нечисто…

    В режиме Dual Head, требуется описатьЗапятая здесь не нужна.

    нужно сделать ДВЕ рабочие копию.Ну, во-первых, не «копию», а «копии».
    Во-вторых, почему две? Или это написано для того, чтобы обратить внимание читателя на важность бекапов?

    Что-то в нём будет отмечено серым - это не важно.Я эту фразу понял так, что некоторые участки вследствие влияния очередной магнитной бури чувствуют себя плохо и побледнели — но на это не стоит обращать внимания :)
    В общем, стоит перефразировать, имхо.

    Вообще, описание конфига я бы немного поменял — не стоит писать про начало конфа, про пути к шрифтам и секции клавиатуры. Почему? Да потому что у кого-то может создаться впечатление, что секции должны идти именно в таком порядке. Кроме того, это просто пустая трата времени читателя — зачем подавать заведомо бесмысленную информацию?

    Название идентификатора важны,Имелось ввиду «названия идентификаторов важны»?

    на них будете ссылаться«…на них вы будете ссылаться».
    Хотя правка спорная, можно и не применять.

    частоты для Default monitorА в конфиге Generic Monitor…

    Так же следует указатьНу ты понял :)

    теперь осталось только указать в Screen, InputDevice и прочее.Указать что?

    Если Xinerama не включить, то стартуют иксы и на внешнем мониторе появляется сеточка и всё, перетащить туда ничего не получится.Вот как-то оно не звучит…
    «Если Xinerama не включить, то при старте иксов на внешнем мониторе появится стандартная сеточка, но перетащить туда ничего не получится». Как тебе такой вариант?

    На внешнем мониторе вытаскиваем KdviНаверное, лучше будет написать «на внешний монитор вытаскиваем».

    Вот так вот.
    Касательно самой статьи — рад был ещё раз убедиться, что Linux — это сила, что всё в нём делается просто и логично. Единственное, что меня интересует — видеокарт две физически или только виртуально? Учитывая, что это ноут, подозреваю, что видяха одна, но я не настолько разбираюсь в железе, чтобы быть уверенным. Просветите, а?…

    ОтветитьУдалить
  15. 2 geekobyte комментирует...
    Нет, мне надо наоборот, чтобы когда я переключал воркспейс на одном мониторе, на другом _не_ переключался.

    Вот в мувике как раз и показано как это сделать: к одной машине подключается два(пусть два) моника. На обоих мониках запускаются разные X-сессии. И на этих разных X-сессиях запусаются разные Window Managers. Так как X-сессии друг с другом не пересекаются, то на каждой из них может твориться всё, что угодно. В случае мувика - слева на монике одна X-сессия, а справа на двух - другая параллельная.

    Но ничто не мешает этим X-сессиям юзать единую мышку и единую клавиатуру, что и демонстрирует нам перец.
    Про запуск двух X-сессий можно почитать здесь:
    http://forum.ubuntu.ru/index.php?topic=49023
    (Уж не обессудьте Дебианщики что вторгаемся в ваше царство с неправославным дистрибутивом, но ведь это... одно-ж дело делаем :))

    В дополнение к теме форума могу сказать, что при запуске второй X-сессии нужно указывать дисплей в формате :узел.дисплей. А вот что писать в xorg.conf чтобы этот дисплей определялся как нужный конкретный монитор, подключенный к конкретной видеокарте, я к с сожалению не подскажу.

    ОтветитьУдалить
  16. Ну да, да, в видео показано, что так может работать. Но не рассказано, как он это сделал :)
    Две сессии я запускал, но так и не разобрался до конца, как заставить это чудо нормально работать - у меня было именно две сессии, каждая из которых шла на два монитора. Во всяком случае, настроить именно общую клаву и мышку, вот в чём соль :)
    По ссылке совсем мало и это и так нашёл уже собственными тыканиями :(
    Ладно, видимо, пока никто не знает (узнаю - напишу :)

    ОтветитьУдалить
  17. 2 Programmaster комментирует...

    Вот и я припёрся.Я уж по тебе соскучался - тут всё тишь да гладь, да земная благодать :-))

    Как всегда, буду придираться :)Заготовил праздничную большую лопату для огребания :-)

    нужно сделать ДВЕ рабочие копию.Ну, во-первых, не «копию», а «копии».
    Во-вторых, почему две? Или это написано для того, чтобы обратить внимание читателя на важность бекапов?
    Пост, как всегда, старый и я уже не помню, что я хотел этим сказать. Исправил.

    некоторые участки вследствие влияния очередной магнитной бури чувствуют себя плохо и побледнелиЭто светло-серый цвет.

    Вообще, описание конфига я бы немного поменял — не стоит писать про начало конфа, про пути к шрифтам и секции клавиатуры.Сделано для того, чтобы никто не путался. В том числе и я же сам :-)


    Название идентификатора важны,Имелось ввиду «названия идентификаторов важны»?Да, именно так. Исправил.

    частоты для Default monitorА в конфиге Generic Monitor…Исправил.

    «Если Xinerama не включить, то при старте иксов на внешнем мониторе появится стандартная сеточка, но перетащить туда ничего не получится». Как тебе такой вариант?Блестяще!

    Вот так вот.Да, ты очень продуктивно зашёл :-) Спасибо, Саш, тексту после твоих нападок полегчало.

    Касательно самой статьи — рад был ещё раз убедиться, что Linux — это сила, что всё в нём делается просто и логично.Ну, часто не очень просто, но в целом логично.

    Единственное, что меня интересует — видеокарт две физически или только виртуально? Карта одна, два выхода. Иксы по-другому не поймут :-) Идея, опять-таки, в том, чтобы на два монитора выводить два РАЗНЫХ изображения. Вот сейчас сижу с научруком и обсуждаю статью. Он ЛаТеХ на дух не выносит, а постоянно переключаться между мониторами - у него морская болезнь начинается.
    Сейчас красота: я правлю текст в латехе, на второй монитор выводится только отрендеренный текст в KDVI. Все счастливы.

    2 Vladimir A. Rybas комментирует...
    Вот в мувике как раз и показано как это сделать: к одной машине подключается два(пусть два) моника.Это не так сложно, но надо будет попробовать.

    Про запуск двух X-сессий можно почитать здесь:О! Спасибо за ссылку! Вставил.

    Уж не обессудьте Дебианщики что вторгаемся в ваше царствоДа ладно вам. Комментарии открыты, так что не стесняйтесь.

    2 geekobyte комментирует...
    Ладно, видимо, пока никто не знает (узнаю - напишу :)Разберёмся.

    ОтветитьУдалить
  18. 2 geekobyte комментирует...
    Две сессии я запускал, но так и не разобрался до конца, как заставить это чудо нормально работать - ... Во всяком случае, настроить именно общую клаву и мышку, вот в чём соль :)

    Кстати, внимательно пересмотрев видюшки понял, что запускает-то он ОДНУ X-сессию!! Просто он меняет $DISPLAY перед запуском приложений на монике слева. А сессия одна. Это точно.

    ОтветитьУдалить
  19. Разве смена $DISPLAY не означает, что у него запущено две сессии?

    В общем, осталось понять, как привезать определённую сессию-DISPLAY именно на выход видеокарты.

    ОтветитьУдалить
  20. http://wandexx.ru/ - что это?

    Есть два комплекта KVM, системный блок с видеокартой с двумя видеовыходами, Ubuntu 9.04

    Как сделать два рабочих места?

    ОтветитьУдалить
  21. 2 geekobyte комментирует...
    В общем, осталось понять, как привезать определённую сессию-DISPLAY именно на выход видеокарты.На праздниках попробую покурить доки к Xinerama, может и получится.

    2 boxit комментирует...
    что это?Спамер, видимо. Я уже анонимусов отключил от комментариев - спамеры достали.

    Есть два комплекта KVM, системный блок с видеокартой с двумя видеовыходами, Ubuntu 9.04. Как сделать два рабочих места?Я ж не техподдержка :-)
    Надо подумать.

    ОтветитьУдалить
  22. А было б здорово. Дитю комп по цене монитора.

    ОтветитьУдалить
  23. Dmitry Agafonov пишет в ubuntu-ru@lists.ubuntu.com:
    > http://en.wikipedia.org/wiki/Multiseat

    Ivan I. Kolesnikov пишет в ubuntu-ru@lists.ubuntu.com:
    > Статья устаревшая, но внесет понимание в суть вопроса:
    > http://vd.net.ru/Linux/Multiseat

    ОтветитьУдалить
  24. http://en.gentoo-wiki.com/wiki/HOWTO_Dual_Monitors#Disable_KDE_MultiHead
    шикарная викистатья на тему)

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