Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 5: Система X11

Оригинал: "Ubuntu Hacks: Chapter 5 - X11"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: сентябрь 2010 г.

Совет # 50: Подключаем несколько дисплеев

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

Ноутбуки дают нам возможность получить мобильность, но обычно за счет компромиссов в сравнении с более полным набором функций настольного компьютера. Наиболее очевидным компромиссом является размер экрана. Обычно экран ноутбука существенно меньше в сравнении с экраном, которым вы, вероятно, пользуетесь сидя за столом, но настроив ноутбук для использования внешнего монитора, вы можете воспользоваться преимуществами как мобильной, так и настольной системы.

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

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

Во-первых, нужно определить ваш видео чипсет, что, в свою очередь, укажет, какими драйверами вы можете пользоваться. Если вам не известен чипсет, вы можете открыть System→Administration→Device Manager (Система → Администрирование → Диспетчер устройств), а затем прокручивать список устройств, указанных слева, до тех пор, пока вы не увидите устройство с названием "AGP" или "video". Либо вы можете открыть терминал и набрать команду lspci и увидеть список всех устройств PCI, имеющихся в вашей системе: поищите строчку с надписью "VGA compatible controller" ("VGA совместимый контроллер") или что-нибудь подобное. Если в вашем ноутбуке используется видео чипсет NVidia или Radeon (ATI), у вас есть возможность использовать проприетарные двоичные драйверы, предоставляемые разработчиком. В этих проприетарных драйверах предлагается больше функций и в целом они лучше, чем имеющихся в настоящее время драйверы с открытым исходным кодом, но многие специально их игнорируют по идейным основаниям. Надеемся, что мы в конце концов увидим, что эти проприетарные драйверы будут выпущены под лицензией с открытым исходным кодом, но пока у них все еще есть определенные преимущества, если вы, конечно, не возражаете против использования проприетарного программного обеспечения.

Пытаемся разобраться с конфигурационным файлом Xorg

Независимо от того, какие способы вы будете использовать для настройки ваших дисплеев, вам потребуется внести изменения в конфигурационный файл Xorg, расположенный в /etc/X11/xorg.conf, поэтому вам не мешает ознакомиться с его структурой и с тем, что в нем используется.

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

Раздел устройств "Device"

Устройством является видеокарта или видеоадаптер, так что вам потребуется по одному разделу Device (Устройство) для каждой карты вашей системы. Видеокарта с несколькими выходами считается одним устройством, но для нее требуется два раздела Device, в которых будут указаны различные выходы. В состав каждого раздела Device входит, как минимум, запись Identifier (Идентификатор) и запись Driver (Драйвер), но если у вас установлено более одной видеокарты, вам нужно добавить значение BusID (Идентификатор шины) для того, чтобы Xorg знал, какой раздел связан с каждой картой; если у вас есть карта с несколькими выходами, то добавьте значение Screen, чтобы Xorg также знал, какой раздел связан с каждым выходом. Используйте команду lspci -X и определите BusID для каждой карты в формате, подходящем для записи в файл xorg.conf:

Section "Device" 
  Identifier "NVIDIA Corporation NV34M [GeForce FX Go5200]" 
  Driver     "nvidia" 
  BusID      "PCI:1:0:0" 
EndSection

Если у вас имеется одно устройство с несколькими выходами, нумеруйте записи экранов Screen начиная с 0. Вы также должны дать каждому параметру Identifier уникальное имя (в данном примере, мы просто добавили в конце 0 или 1):

Section "Device" 
        Identifier      "NVIDIA Corporation NV40 [GeForce 6800] 0" 
        Driver          "nvidia" 
        BusID           "PCI:3:0:0" 
        Option          "RenderAccel"           "true" 
        Option          "AllowGLXWithComposite" "true" 
        Screen          0
EndSection

Section "Device" 
        Identifier      "NVIDIA Corporation NV40 [GeForce 6800] 1" 
        Driver          "nvidia" 
        BusID           "PCI:3:0:0" 
        Option          "RenderAccel"           "true" 
        Option          "AllowGLXWithComposite" "true" 
        Screen          1
EndSection

Раздел мониторов "Monitor"

Вам необходимы по одному разделу Monitor для каждого монитора, подключенного к компьютеру. Задайте для каждого из них уникальное смысловое значение Identifier:

Section "Monitor" 
        Identifier      "Main Monitor" 
        Option          "DPMS" 
        HorizSync       28-80
        VertRefresh     43-60
EndSection

Section "Monitor" 
        Identifier      "Second Monitor" 
        Option          "DPMS" 
        HorizSync       28-80
        VertRefresh     43-60
EndSection

Раздел экранов "Screen"

В терминологии X экран представляет собой комбинацию устройства и монитора. В разделах Screen указываются значения Device и Monitor, представляющие собой ссылки по названию на соответствующие разделы:

Section "Screen" 
        Identifier      "Main Screen" 
        Device          "NVIDIA Corporation NV40 [GeForce 6800] 0" 
        Monitor         "Main Monitor" 
        DefaultDepth    24

        # Subsections for other display depths not shown...
        SubSection "Display" 
                Depth           24
                Modes           "1600x1200" 
        EndSubSection
EndSection

Section "Screen" 
        Identifier      "Second Screen" 
        Device          "NVIDIA Corporation NV40 [GeForce 6800] 1" 
        Monitor         "Second Monitor" 
        DefaultDepth    24
        SubSection "Display" 
                Depth           24
                Modes           "1280x1024" 
        EndSubSection
EndSection

Раздел "ServerLayout", определяющий расположение мониторов

Раздел ServerLayout, в свою очередь, является разделом, где указывается комбинация одного или большего числа разделов Screen, а также разделов InputDevice, в которых определяются клавиатуры, мыши и трекпады. Совсем скоро вы увидите несколько примеров раздела ServerLayout.

Отслеживаем ошибки в X

Как только вы начинаете изменять конфигурационный файл Xorg, возникает весьма высокая вероятность того, что, в конечном итоге, ваш компьютер перейдет в состояние, в котором X-ы вообще не смогут стартовать. Первое место, куда следует заглянуть за информацией для отладки, является журнал Xorg, который заново генерируется каждый раз, когда запускается X, и который хранится в файле /var/log/Xorg.<0>>.log или аналогичном. <0> является идентификатором, который используется Xorg для определения сеансов X; если вы запустили несколько сеансов X, у вас, возможно, также будет файл Xorg.1.log.

В журнале Xorg в начале каждой строки также добавляется ключ серьезности проблемы, благодаря чему можно очень легко увидеть именно то, что вызвало проблему. Строки, помеченные как (II), являются исключительно информационными, строки, помеченные как (WW), содержат нефатальные предупреждения, а строки, помеченные как (EE), указывают фатальные ошибки. Проблемы часто проходят по всему журналу сверху вниз каскадом, поскольку одна ошибка может быть причиной возникновения следующей ошибки, так, например, проблема с инициализацией видеокарты приводит к неспособности инициализации экрана.

Настраиваем функцию Xinerama

В X есть встроенная поддержка использования нескольких мониторов, но по умолчанию, каждый из них считается совершенно независимым от других. Когда используется несколько независимых мониторов, невозможно размещать окна сразу на нескольких экранах, перетаскивать окна с одного экрана на другой или переводить курсор с одного экрана на другой, перемещая его за край экрана. На самом деле для каждого монитора создается совершенно отдельная среда.

Функция Xinerama является функцией X, которая позволит преодолеть это ограничение, объединяя между собой несколько экранов так, чтобы они представляли собой единый "виртуальный экран". Вы можете определить положение экранов относительно друг к другу и компьютер будет знать, где каждый экран физически расположен по отношению к другим; это позволит перетаскивать окна через все экраны с учетом их перекрытия и расстановки мониторов на вашем письменном столе.

Во-первых, убедитесь, что в Xorg есть функция Xinerama, которую, если она отсутствует, можно включить добавив соответствующий раздел ServerFlags:

Section "ServerFlags" 
   Option "Xinerama" "true" 
EndSection

Затем добавьте разделы для второго устройства, монитора и экрана так, как это описано выше, задавая им подходящие имена. Наконец, добавьте второй экран в раздел ServerLayout, указав его положение относительно основного экрана. Вот пример с двумя экранами:

Section "ServerLayout" 
        Identifier      "Twin Head" 
        Screen          "Main Screen" 
        Screen          "Second Screen" RightOf "Main Screen" 
        InputDevice     "Generic Keyboard" 
        InputDevice     "Configured Mouse" 
EndSection

Выйдите из GNOME, нажмите клавиши Ctrl-Alt-Пробел для того, чтобы остановить Xorg и затем заставить его снова начать работать, и наблюдайте за тем, как оба монитора включаются в работу.

Конфигурируем TwinView для карт nVidia

В картах Nvidia, имеющих несколько выходов, поддерживается специальный видеорежим, называемый TwinView, который используется в проприетарных (двоичных) драйверах. TwinView немного похож на Xinerama, поскольку он связывает вместе несколько мониторов в один виртуальный дисплей, но разница в том, что это делается на очень низком уровне в видео-драйверах и аппаратных средствах. Оба монитора используют один и тот же фреймбуфер, в результате чего Xorg считает, что у вас только один монитор, в результате чего достигается лучшая производительность в сравнении с использованием функции Xinerama, а также появляется возможность использовать OpenGL на обоих мониторах на максимальной скорости. Что касается Xorg, то он управляет только одним экраном: просто оказывается, что экран имеет очень странные размеры.

По умолчанию в Ubuntu устанавливается драйвер nv с открытым кодом, но для того, чтобы использовать TwinView, вам нужно вместо него установить проприетарный драйвер nvidia. Драйвер nvidia входит в состав пакета linux-restricted-modules-[arch], который поставляется в нескольких вариантах в зависимости от того, каким ядром вы пользуетесь. Полная инструкция по установке этого двоичного драйвера приведена в разделе в "Включаем 3-D видеоускорение" [Совет # 52].

После того как Xorg будет успешно работать с одним монитором и двоичными драйверами, выполните команду sudo nvidia-xconfig -twinview для того, чтобы изменить ваш файл xorg.conf и включить поддержку TwinView. Если вы хотите что-либо еще настроить (или посмотреть, что было сделано), откройте файл /etc/X11/xorg.conf и перейти к разделу Device для вашей карты NVidia. Вместо того, чтобы определять второй монитор отдельно, драйвер nVidia позволяет использовать целый ряд дополнительных параметров для включения режима TwinView и непосредственной настройки монитора:

Section "Device" 
    Identifier     "NVIDIA Corporation NV40 [GeForce 6800]" 
    Driver         "nvidia" 
EndSection

Section "Screen" 
    Identifier     "Default Screen" 
    Device         "NVIDIA Corporation NV40 [GeForce 6800]" 
    Monitor        "Generic Monitor" 
    DefaultDepth    24
    Option         "RenderAccel" "true" 
    Option         "AllowGLXWithComposite" "true" 
    Option         "TwinView" "True" 
    Option         "TwinViewOrientation" "RightOf" 
    Option         "UseEdidFreqs" "True" 
    Option         "MetaModes" "1280x1024,1280x1024; 1024x768,1024x768" 

    # Subsections for other display depths not shown...
   SubSection     "Display" 
        Depth     24
        Modes     "1600x1200" 
    EndSubSection
EndSection

Параметр MetaModes сообщит драйверу о том, какое разрешение будет использоваться в обоих мониторах, которое затем будет передано в Xorg как сумма размеров; в данном случае можно указать несколько вариантов разрешения; поскольку мониторы расположены один рядом с другим (RightOf), эффективное разрешение будет 2560x1024 или 2048x768.

Вы также можете явно указать смещение экранов друг относительно друга с тем, чтобы точно управлять логическим положением экранов:

Option "MetaModes" "1600x1200 +0+0, 1024x768 +1600+0;"

Другими возможными значениями параметра TwinViewOrientation являются LeftOf (Слева от), Above (Сверху), Below (Снизу) и Clone (Клон). Режим Clone это особый режим, в котором на оба монитора выводится одно и то же изображение, что идеально подходит для запуска презентаций на ноутбуке, к которому подключен внешний проектор.

Конфигурируем MergedFB для карт ATI/Radeon

Новые видеокарты ATI поддерживают режим в Xorg, который называется MergedFB и который очень похож на режим TwinView для карт nVidia тем, что здесь подключение второго монитора также осуществляется непосредственно в драйвере и создается впечатление, что используется один большой виртуальный монитор:

Section "Device" 
   Identifier "Radeon7000" 
   Driver     "radeon" 
   BusID      "PCI:0:9:0" 
   Option     "MergedFB" "true" 
   Option     "MonitorLayout" "AUTO, AUTO" 
   Option     "CRT2Hsync" "30-65" 
   Option     "CRT2VRefresh" "50-75" 
   Option     "CRT2Position" "LeftOf" 
   Option     "MetaModes" "1280x1024-1280x1024" 
EndSection

Точно также, как и в TwinView, есть параметры, с помощью которых задаются частота, положение и разрешение второго монитора.

Комбинированные способы

Иногда недостаточно даже двух мониторов, но, к сожалению, видеокарты с более чем двумя выходами довольно редки, так что вам может понадобиться объединить методы, если вы хотите запустить три или более мониторов. Например, у вас может быть видеокарта NVidia с двумя выходами, работающая в режиме TwinView с двумя мониторами, а также третий монитор, который подключен к более старой видеокарте PCI. Поскольку TwinView выглядит для X как единый виртуальный экран, вы можете, приложив совсем немного усилий, объединить его с третьим монитором с помощью функции Xinerama и получить систему с тремя мониторами.

Немного творчества и на одной и той же машине можно даже объединить все способы подключения TwinView, MergedFB и Xinerama (рис. 5-6).

Рабочий стол с пятью мониторами

Рис.5-6. Рабочий стол с пятью мониторами


Назад Оглавление Вперед