Ключевые слова:linux, video, x11, driver, multihead, xfree86, xorg, (найти похожие документы)
From: Alex Karpov
Date: Wed, 24 Aug 2005 18:21:07 +0000 (UTC)
Subject: Установка второй и последующих видеокарт в Linux
Оригинал: volgograd.lug.ru
Прежде всего хочу заметить, что основой для сего опуса послужило HOWTO
Dennis Baker Using Xinerama to MultiHead XFree86 V. 4.0, в котором
рассказывается о том, как использовать Xinerama (расширение XFree86
для растягивания рабочего стола на несколько экранов. Но вот как раз
Xinerama трогать мы далее не будем :) - существенно мною
переработанное и дополненное.
Кстати, многое из этого может пригодиться и при проблемах с одной
видеокартой.
Терминология.
XFree86 использует следующие понятия:
* устройство (device) - это собственно видеокарта, физическая
единица компьютера;
* монитор (monitor) - это монитор, физическое устройство
ввода-вывода;
* экран (screen) - это логическое устройство вывода графической
информации, совокупность монитора и видеокарты (с этим
"устройством" и общаются программы);
* раскладка сервера (serverlayout) - это описание экранов сервера,
их взаимного расположения и прочего.
Конфиг лежит в /etc/X11/XF86Config-4 (у меня).
1. Оборудование.
Для подключения второго монитора и соответственно второй графической
карты следует, как это ни прискорбно, сначала грамотно подобрать ее,
что в наше время - время засилья AGP и повальной пропажи PCI-видеокарт
не очень просто. Во время поиска во многих фирмах на мой вопрос
о наличии PCI-видеокарт обиженно оттопыривали губу и говорили "Мы
старьем не торгуем" :). Чем чреват неграмотный подбор оборудования?
Как я выяснил на своем опыте, некоторые видеокарты в режиме второй
и далее видеокарт могут вызвать проблемы - у меня, например, S3Trio 32
/ 64 / 64V2 / 64V2+ в режиме второй - именно второй - карты отказались
заводится как s3, а завелись только как vesa. Как показали
эксперименты, при включенном же vesa-драйвере XFree86
тут же отказалась работать NV_GLX со всем отсюда вытекающим. Пришлось
попробовать другие железки, благо была возможность. На Cirrus Logic
GD 5446 все завелось нормально. Еще раз повторюсь - это происходит
только в режиме второй видеокарты. Если включать PCI-видео первой,
то все нормально, но зато AGP-карта перестает работать как ускоритель.
Поэтому совет - при получении PCI-видеокарты старайтесь как-нибудь
договориться о возможности возврата/обмена (если жалко сотни-другой
рублей для простенькой видеокарты, и пятисот-шестисот для 3DFx Vodoo
2, к примеру). Есть еще одна возможность - найти PCI-ускоритель
(например, даже NVIdia GF2 еще были PCI) - роясь по сети в поисках
решения проблем с s3, я нашел смутные слухи о том, что AGP и PCI
NVidia, живут как два ускорителя под одним драйвером. Да и роясь
в логах XFree, я видел, что при vesa-режиме GLX NVidia отваливается
потому, что "S3Trio 64V2+ have not hardware bla-bla-bla - короче,
модуль сказал, что эту карту я не понимаю и потому не буду грузиться
и для той карты, что понял..."
2. Варианты настроек XFree.
Вариантов работы с двумя мониторами я насчитал три штуки.
А) Два разных сервера, живущих каждый на своей видеокарте. Потребует
две раскладки, и возможно их запускать совместно одновременно, надо
просто в скриптах запуска Х-ов кое-что поправить. Подробно
не исследовал, потому как не надо - переключение между серверами будет
с помощью клавиатуры, что напряжно;
Б) Два монитора по отдельности на одном сервере - как раз то, что мне
надо - переключение между ними с помощью мыши производится;
В) Xinerama - это вариант Б, в котором рабочее пространство окна
растягивается на два монитора. Мне это не понравилось, так как
разрешение мониторов разное, плюс отрубается ускорение. Кстати,
в винде сделано именно так (но с ускорением), и изменить поведение
системы нельзя никак. Ужас! Еще больший ужас в том, что значки
при каждом запуске системы с двумя картами на рабочем столе
перемешиваются в произвольном порядке. Стоит вытащить вторую карту -
и все в порядке. Также в Windows иногда проскакивают глюки
Далее рассматриваем вариант Б. Кстати, учтите, что все, что здесь
говорится, можно расширить и на большее количество мониторов.
Кстати, в вашем конфиге уже, скорее всего, есть по одной или больше
секций device и monitor, поэтому нужно только добавить по одной секции
device, monitor, screen и подправить layout.
3. Секция устройств.
Для каждой видеокарты заводим секцию device. Пример для меня:
Section "Device" Начало секции
Identifier "GF2" ID карты для дальнейшего использования XFree86
Driver "nvidia" Драйвер. Список драйверов см. в /usr/X11R6/lib/modules/drivers
Vendor Name "ASUS" Поле для себя - производитель карты
Board Name "V3700" Поле для себя - название карты
Option "DPMS" "on" Включение режима DPMS монитора
Option "No Logo" "on" Это специфические опции для NVidia - наведение красоты
Option "Cursor Shadow" "on"
Option "Cursor Shadow Alpha" "80"
Option "Cursor Shadow X Offset" "3"
Option "Cursor Shadow Y Offset" "3"
Bus ID "PCI:1:0:0" Идентификатор устройства в шине PCI. Можно узнать через lspci
End Section Конец секции
Ну и то же самое для второй видеокарты, с соответствующими
изменениями....
Section "Device"
Identifier "PCI-Video"
Driver "cirrus"
Vendor Name "Unknown"
Board Name "GD 5446"
Option "DPMS" "on"
Bus ID "PCI:2:2:0"
End Section
Этим все, что касается описания видеокарт, исчерпывается. Да, есть
хорошая программа - xf86cfg. С ее помощью также можно настроить
конфиг, но я ею пользовался как справочником по опциям драйвера
видеокарты и по видеокартам. Естественно, описания опций не приводил -
есть куча всяких разных FAQ и прочего.
4. Секция мониторов.
В этой секции описываются параметры мониторов.
Section "Monitor" Начало секции.
Identifier "17" ID монитора для дальнейшего использования в XFree86
Vendor Name "Roverscan" Поле для вас - производитель монитора
Model Name "107SE" Поле для вас - модель монитора
Horiz Sync 30.0 - 70.0 Диапазон горизонтальной развертки
Vert Refresh 50.0 - 160.0 Диапазон вертикальной развертки
End Section Конец секции
и второй монитор
Section "Monitor"
Identifier "15"
Vendor Name "Samsung"
Model Name "56E"
Horiz Sync 31.5 - 48.5
Vert Refresh 50.0 - 100.0
End Section
Насчет диапазонов значений - просто берете их из инструкции
к монитору, или получаете с помощью той же xf86cfg, прикинув примерный
класс монитора. Выставлять неверные значения (большие) не рекомендую.
Меньшие можно. По этим значениям будут вычислены допустимые режимы
работы вашего монитора. Использовать Mode Line, к счастью,
уже не надо, если только вас не перестали устраивать стандартные
режимы.
Есть еще одна проблема - если два монитора стоят рядом, и при этом
они работают в одной частоте развертки, то возможно появление бегущих
полос по одному из мониторов. Во избежание этого выберите режимы так,
чтобы частоты не совпадали.
5. Секция экранов.
Здесь описывается логическое подсоединение видеокарты и монитора.
Section "Screen" Начало секции.
Identifier "screen1" ID экрана
Device "GF2" ID видеокарты (из секции device)
Monitor "17" ID монитора (из секции monitor)
Default Depth 16 Палитра по умолчанию
Sub Section "Display" Начало подсекции описания режимов работы
Depth 16 Список допустимых палитр
Modes "1024x768" "800x600" "640x480" Список допустимых режимов
End Sub Section Конец подсекции
End Section Конец секции
и второй экран
Section "Screen"
Identifier "screen2"
Device "PCI-Video"
Monitor "15"
Default Depth 16
Sub Section "Display"
Depth 16
Modes "800x600"
End Sub Section
End Section
Перепутать физическое и логическое подсоединение мониторов и видеокарт
не рекомендую. Использовать опцию Virtual Size также не рекомендую,
так как требуется больше видеопамяти (фактически в два раза -
на виртуальный экран плюс на реальный экран). Если памяти не хватит,
второй монитор не оживет (или оживет, но не в том режиме). Без этой
же опции Xinerama выглядит и работает плохо.
6.Раскладка сервера.
В этой секции идет именно описание сервера.
Section "Server Layout" Начало секции
Identifier "layout1" ID раскладки для ее выбора при запуске Х. Если
не укаывать раскладку явно, то будет выбрана первая встреченная
по ходу конфига
Screen "screen1" 0 0 ID экрана и его абсолютное расположение.
Screen "screen2 Left Of screen1" ID экрана и его расположение относительно другого
Input Device "Mouse 1
Core Pointer" Основное указательное устройство
Input Device "Keyboard 1
Core Keyboard" Основное устройство ввода
Option "Xinerama off" Xinerama выключена
End Section Конец секции
Что касается клавиатуры и мыши, то трогать ничего не надо, просто надо
оставить все настройки как есть. Оставшиеся секции - модули XFree86,
опции сервера, файлы и описание устройств ввода трогать здесь
не будем.
Кто-то когда-то сюда это забабахал :)
Ну, вдруг актуально кому. Для X.Org единственное отличие - нумерация экранов с _0_ должна начинаться - и это важно