Установка второй и последующих видеокарт в Linux
Прежде всего хочу заметить, что основой для сего опуса послужило 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 | <<screen2screen1>> | ID экрана и его расположение относительно другого |
Input Device? | <<Mouse 1? Core Pointer?>> | Основное указательное устройство |
Input Device? | <<Keyboard 1? Core Keyboard?>> | Основное устройство ввода |
Option | <<Xinerama off>> | Xinerama выключена |
End Section? | | Конец секции |
Что касается клавиатуры и мыши, то трогать ничего не надо, просто надо оставить все настройки как есть. Оставшиеся секции модули XFree86, опции сервера, файлы и описание устройств ввода трогать здесь не будем.
[
/ Category Tips ]