Перевод документации драйвера NVIDIA для Linux, часть 5

Глава 13. Настройка TwinView

TwinView – это способ работы, при котором два дисплея (цифровых, электронно-лучевых или телевизора) могут отображать содержимое одного экрана Х-интерфейса в любой произвольной конфигурации. Этот метод использования мультимониторности имеет несколько преимуществ над другими технологиями, такими как Xinerama:

  • используется один экран Х-интерфейса. Драйвер NVIDIA прячет всю информацию мультимониторности от сервера Х-интерфейса до тех пор, пока Х-интерфейсу достаточно одного экрана;
  • оба дисплея используют единый кадровый буфер. Таким образом, вся функциональность, доступная для одного дисплея (например, аппаратное ускорение OpenGL), доступна в режиме TwinView;
  • не создается дополнительная нагрузка для эмуляции единого рабочего стола.

Если вы интересуетесь использованием вывода отдельного экрана Х-интерфейса на каждом дисплее, обратитесь к Главе 15.

13А. Настройки TWINVIEW для Х-интерфейса

Для использования TwinView вам надо включить следующие опции в секции Device файла конфигурации Х-интерфейса:

Option "TwinView"

Также можно задать, хотя это и необязательно, опции:

  • Option "MetaModes" "<список метарежимов>"
  • Option "SecondMonitorHorizSync" "<диапазон частот горизонтальной синхронизации>"
  • Option "SecondMonitorVertRefresh" "<диапазон частот вертикальной синхронизации>"
  • Option "HorizSync" "<диапазон частот горизонтальной синхронизации>"
  • Option "VertRefresh" "<диапазон частот вертикальной синхронизации>"
  • Option "TwinViewOrientation" "<взаимозависимости выходов 1 и 0>"
  • Option "ConnectedMonitor" "<список подключенных дисплеев>"

Смотрите детальные описания каждой опции ниже. Как вариант, можно включить TwinView выполнив:

nvidia-xconfig --twinview

и перезапустив сервер Х-интерфейса. Или можно настроить TwinView в любое время на закладке «Display Configuration» утилиты «nvidia-settings».

13В. Детальные описания настроек

TwinView

Эта опция требуется для использования TwinView; без нее все остальные настройки, связанные с TwinView, не действуют.

SecondMonitorHorizSync, SecondMonitorVertRefresh

Задайте характеристики второго дисплея с помощью этих опций. Значения и их действие совпадают с правилами опций "HorizSync" и "VertRefresh" в секции Monitor. В соответствии с руководством по XF86Config: возможности могут быть заданы в форме списка возможных значений, разделенных запятыми, и/или диапазонами значений в форме двух значений, разделенных двоеточием. Параметр HorizSync исчисляется в килогерцах, VertRefresh — в герцах.

Обычно в этих опциях нет нужды, драйвер Х-интерфейса NVIDIA узнает допустимые диапазоны из информации EDID дисплея (обратитесь к приложению B за описанием опции "UseEdidFreqs"). Опции SecondMonitor имеют приоритет над информацией, полученной от EDID.

HorizSync, VertRefresh

Часто не ясно, какой дисплей «первый», а какой «второй». С этой целью можно использовать эти опции вместо настроек SecondMonitor. В этих опциях можно задать диапазоны в форме граничных значения частоты, разделенные тире, каждый дополнительно может предваряться именем дисплея. Если используется режим SLI Mosaic, дополнительно может быть указан графический процессор. Например:

Option "HorizSync" "CRT-0: 50-110; DFP-0: 40-70"
Option "VertRefresh" "CRT-0: 60-120; GPU-0.DFP-0: 60"

Обратитесь к приложению C за информацией об именовании дисплеев.

Обычно в этих опциях нет нужды, драйвер Х-интерфейса NVIDIA узнает допустимые диапазоны из информации EDID дисплея (обратитесь к приложению B за описанием опции "UseEdidFreqs"). Опции "HorizSync" и "VertRefresh" имеют приоритет над информацией, полученной от EDID, или частотами, заданными в опциях "SecondMonitorHorizSync" и "SecondMonitorVertRefresh".

MetaModes

Метарежимы являются упаковкой, хранящей информацию о том, какой видеорежим должен быть установлен на дисплее в каждый момент времени. Даже если имеется всего один дисплей, драйвер Х-интерфейса NVIDIA использует метарежим для хранения информации о видеорежимах каждого дисплея, так что можно включать TwinView на ходу. Список записей MetaModes определяет возможные комбинации видеорежимов и последовательность их использования. Когда драйвер NVIDIA

сообщает Х-интерфейсу список доступных видеорежимов, в действительности минимальный набор метарежимов сообщается Х-интерфейсу, тогда как информация о режиме каждого дисплея остается внутри драйвера NVIDIA. В опции MetaMode режимы внутри метарежима разделяются запятыми, а несколько метарежимов разделяются точкой с запятой. Например:

"<mode name 0>, <mode name 1>; <mode name 2>, <mode name 3>"

где <mode name 0> — название видеорежима, используемого для дисплея 0, а <mode name 1>, соответственно, для дисплея 1. Переключение метарежима приводит к использованию видеорежима <mode name 2> на дисплее 0 и <mode name 3> для дисплея 1. Вот пример метарежима:

Option "MetaModes" "1280x1024,1280x1024; 1024x768,1024x768"

Если вы хотите, чтобы какой-то дисплей не был активен в конкретном метарежиме, вы можете использовать в качестве режима "NULL", или просто не вводить имя:

"1600x1200, NULL; NULL, 1024x768"

или

"1600x1200; , 1024x768"

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

"1600x1200 +0+0, 1024x768 +1600+0; ..."

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

Если не задано смещений для метарежима, значения смещений вычисляются по значению опции TwinViewOrientation (см. ниже). Обратите внимание, что если смещения заданы в любом видеорежиме в одном метарежиме, эти смещения будут использованы во всех видеорежимах одного метарежима, если только не заданы значения смещений +0+0.

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

В записи MetaMode дополнительно может быть задана область панорамирования, например:

"1024x768 @1600x1200, 800x600 @1600x1200"

Область панорамирования — это зона, в которой изображение виртуального экрана прокручивается в дисплее, следуя за движением мыши. Панорамирование используется на двух уровнях TwinView: во-первых, изображение прокручивается в одном дисплее в пределах области панорамирования до тех пор, пока находится внутри прямоугольника метарежима. Как только мышь пересекает границу прямоугольника метарежима, изображение панорамируется во всем метарежиме (во всех дисплеях вместе), следуя за мышью внутри виртуального экрана, если только не отключена опция конфигурации Х-интерфейса "PanAllDisplays". Обратите внимание, что области панорамирования отдельных дисплеев по-умолчанию привязаны к положению дисплеев в виртуальном экране, так что изначально области вывода изображения на дисплей взаимно зафиксированы, и используется только второй тип панорамирования.

Лучшее применение панорамирования — устранение «мертвых зон» (областей виртуального экрана, недоступных вследствие использования дисплеев с разными разрешениями). Например:

"1600x1200, 1024x768"

создаст недоступную область под дисплеем с разрешением 1024x768. Задав область панорамирования для второго дисплея:

"1600x1200, 1024x768 @1024x1200"

можно получить доступ к мертвой зоне, прокручивая изображение в дисплее размером 1024x768 вверх и вниз в области панорамирования 1024x1200.

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

"1600x1200 @1900x1200 +0+0, 1024x768 @1900x768 +0+1200"

Поскольку часто неочевидно, какой видеорежим из метарежима будет использован на каждом дисплее, описание режима в метарежиме может предваряться названием дисплея. Например:

"CRT-0: 1600x1200, DFP-0: 1024x768"

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

Каждый режим в метарежиме может дополнительно иметь набор опций, ассоциированный с ним, заданный в форме разделённых запятыми пар «опция=значение» внутри фигурных скобок. В настоящее время из опций доступен только параметр Stereo с возможными значениями PassiveLeft или PassiveRight. При использовании совместно с опцией стерео 4, данный параметр позволяет настроить любой дисплей на показ изображения для того или иного глаза. Например:

"CRT-0: 1600x1200 +0+0 {Stereo = PassiveLeft}, CRT-1: 1600x1200 +1600+0 {Stereo=PassiveRight}"

Если экран Х-интерфейса не настроен на опцию стерео 4, данный параметр будет проигнорирован. Обратитесь к приложению B за дополнительной информацией о настройке стерео.

TwinViewOrientation

Эта опция управляет положением второго дисплея относительно первого в виртуальном экране Х-интерфейса, когда смещения не заданы в опции MetaModes. Возможные значения:

"RightOf" (справа, по умолчанию)
"LeftOf" (слева)
"Above" (выше)
"Below" (ниже)
"Clone" (клон)

Если задано значение "Clone", оба дисплея будут помещены со смещением 0,0.

Поскольку часто неочевидно, какой дисплей «первый», а какой «второй», опция TwinViewOrientation может привести к неожиданному результату. Вы можете дополнительно использовать имена устройств в TwinViewOrientation для описания, какой дисплей относительно какого как расположен. Например:

"CRT-0 LeftOf DFP-0"

ConnectedMonitor

С помощью этой опции вы можете изменить информацию о подключенных устройствах, определенных модулем уровня ядра драйвера NVIDIA. Эта возможность может пригодиться, если некоторые дисплеи не поддерживают протокол Display Data Channel (DDC). Правильными значениями является список имен дисплеев, разделенных запятыми, например:

"CRT-0, CRT-1"
"CRT"
"CRT-1, DFP-0"

Предупреждение: эта опция имеет приоритет над результатами определения модулем уровня ядра подключенных к видеокарте дисплеев, и нужна крайне редко. Действительно понадобиться ее использование может, если один из ваших дисплеев не обнаружен, как по причине отсутствия информации DDC от него, так и в случае, если используется переключатель KVM (Клавиатура-Видео-Мышь). Во всех остальных случаях лучше не задавать эту опцию.

Так же, как и в остальных опциях конфигурации Х-интерфейса, пробелы игнорируются и все значения нечувствительны к регистру.

13С. DYNAMIC TWINVIEW

Используя расширение Х-интерфейса NV-CONTROL можно динамически изменять конфигурация дисплеев, используемых экраном Х-интерфейса, список видеорежимов, доступных для каждого дисплея, и метарежимы для каждого экрана Х-интерфейса. Закладка «Display Configuration» утилиты «nvidia-settings» использует эти функции для изменения списка метарежимов MetaMode, а затем расширение XRandR для переключения между метарежимами. Таким образом, можно на ходу менять конфигурацию TwinView.

Детально работа данной функции описана в примере nv-control-dpy.c клиента NV-CONTROL в пакете исходных кодов утилиты «nvidia-settings».

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

Одно из последствий данной реализации – необходимость уникальной идентификации каждого метарежима расширением Х-интерфейса XRandR. К сожалению, два метарежима в одной записи MetaModes для XRandR выглядят одинаково. Например, два метарежима с разной ориентацией изображения:

"CRT: 1600x1200 +0+0, DFP: 1600x1200 +1600+0"
"CRT: 1600x1200 +1600+0, DFP: 1600x1200 +0+0"

будут выглядеть одинаковыми для расширений XRandR или XF86VidMode X-интерфейса, так как имеют одинаковое разрешение (3200x1200), и утилита «nvidia-settings» не сможет использовать XRandR для переключения между этими метарежимами. В качестве решения этой проблемы драйвер Х-интерфейса NVIDIA искажает сообщаемые значения частоты обновления изображения из записей MetaMode, используя частоту обновления метарежима как уникальный идентификатор.

Расширение XRandR в настоящее время находится на стадии пересмотра в организации X.Org, так что данное использование значения частоты обновления может быть удалено в будущем. Также его можно отключить, присвоив опции "DynamicTwinView" конфигурации X-интерфейса значение FALSE, что отключит поддержку расширения NV-CONTROL для управления метарежимами, но заставит расширения XRandR и XF86VidMode сообщать истинную частоту обновления изображения.

Часто задаваемые вопросы о TWINVIEW

Вопрос: Ничего не отображается на втором мониторе, что не так?

Ответ: Мониторы, не поддерживающие протокол Display Data Channel (DDC) (включая многие старые мониторы), не определяются как подключенные к видеокарте. Вам надо специально задать драйверу Х-интерфейса NVIDIA подсоединенные к видеокарте устройства в опции "ConnectedMonitor", например:

Option "ConnectedMonitor" "CRT, CRT"

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

Ответ: Да. Драйвер Х-интерфейса NVIDIA поддерживает расширение Xinerama, которое клиенты Х-интерфейса (такие, как диспетчеры окон) могут использовать для определения текущей конфигурации TwinView. Учтите, что протокол Xinerama не предусматривает оповещения клиентов об изменениях конфигурации, так что если вы переключились в другой метарежим, диспетчер окон по-прежнему будет считать, что используется предыдущая конфигурация. Используя расширение Xinerama совместно с расширение XF86VidMode для сообщения о событиях изменения режима, диспетчер окон может отслеживать конфигурацию TwinView в любой момент времени.

К сожалению, данные, сообщаемые по вызову XineramaQueryScreens() могут сбить настройки некоторых диспетчеров окон. В качестве обходного пути в случае таких ошибочно работающих диспетчеров окон, вы можете отключить обмен информацией с TwinView о режиме экрана с помощью опции "NoTwinViewXineramaInfo" конфигурации X-интерфейса (обратитесь к приложению B за дополнительной информацией).

Порядок следования дисплеев в информации о TwinView для расширения Xinerama может быть определен в опции TwinViewXineramaInfoOrder конфигурации X-интерфейса.

Обратите внимание, что драйвер NVIDIA не может поддерживать расширение Xinerama, если используется встроенная поддержка Xinerama сервера Х-интерфейса. Явное включение Xinerama в файле конфигурации Х-интерфейса или в ключе запуска сервера Х-интерфейса воспрепятствует установке поддержки расширения Xinerama от NVIDIA, так что проверьте, что файл журнала Х-интерфейса не содержит строку:

(++) Xinerama: enabled

если вы хотите использовать поддержку Xinerama драйвера NVIDIA в режиме TwinView.

Другое решение заключается в использовании областей панорамирования для устранения недоступных частей виртуального экрана (см. описание опции MetaMode выше).

Третье решение заключается в использовании двух отдельных экранов Х-интерфейса вместо TwinView. Обратитесь к Главе 15.

Вопрос: Почему я не могу получить разрешение 1600x1200 на втором дисплее при использовании видеокарты GeForce2 MX?

Ответ: Поскольку поддержка второго дисплея GeForce2 MX была разработана для поддержки цифровых плоских мониторов, максимальная пиксельная частота для второго дисплея ограничена 150 МГц. Это автоматически ограничивает разрешение для второго дисплея 1280x1024 (за описанием, как пиксельная частота ограничивает возможные видеорежимы смотрите документ «XFree86 Video Timings HOWTO»). Этого ограничения нет в графических процессорах GeForce 4 или GeForce FX — максимальная пиксельная частота одинакова для обоих выходов.

Вопрос: Работает ли видеоналожение сразу для двух дисплеев?

Ответ: Аппаратные видеоналожения работают только для первого дисплея. В настоящее время для отображения видео в режимах TwinView используется блиттинг (bit block transfer).

Вопрос: Как определяется размер виртуального экрана в TwinView?

Ответ: После проверки доступности всех запрошенных видеорежимов, и вычислении смещений для каждой области вывода метарежимов, драйвер NVIDIA вычисляет прямоугольники областей панорамирования для каждого метарежима. Затем находится прямоугольник максимальной высоты и ширины.

Обратите внимание, что побочным эффектом этого механизма является то, что максимальные высота и ширина виртуального экрана могут быть взяты из разных метарежимов. Присвоение опции MetaMode значения в виде строки:

"1600x1200,NULL; 1024x768+0+0, 1024x768+0+768"

приведет к установке размера виртуального экрана 1600 x 1536.

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

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

Option "MetaModes" "1024x768,1024x768; 800x600,800x600"
Option "TwinViewOrientation" "RightOf"

создадут два видеорежима: один с разрешение 2048x768, и другой с разрешением 1600x600. Такие игры как Quake 3 Arena используют расширение VidMode для определения доступных разрешений. Для настройки Quake 3 Arena на использование вышеприведенного метарежима, добавьте следующие строки в файл q3config.cfg:

seta r_customaspect "1"
seta r_customheight "600"
seta r_customwidth "1600"
seta r_fullscreen "1"
seta r_mode "-1"

Обратите внимание, что в вышеприведенной конфигурации недоступен видеорежим с разрешением 800x600 (помните, что метарежим "800x600, 800x600" имеет результирующее разрешение 1600x600), так что при настройке Quake 3 Arena на использование разрешения 800x600, изображение будет расположено в верхнем левом углу экрана, а вся остальная часть будет залита серым цветом. Для одновременной доступности режимов для одного дисплея соответствующая строка опции MetaMode должна выглядеть наподобие:

"800x600,800x600; 1024x768,NULL; 800x600,NULL; 640x480,NULL"

Более точная информация о настройках для отдельных игр лежит за пределами области применения данного документа, однако, вышеприведенные примеры совместно с информацией ряда источников в сети Интернет должны быть достаточными для выбора вами правильного направления в настройке.

Глава 14. Настройка поддержки GLX в Xinerama

Драйвер NVIDIA для Linux поддерживает GLX при включенном расширении Xinerama на однотипных графических процессорах. Расширение Xinerama собирает множество физических экранов Х-интерфейса (возможно расположенных на нескольких графических процессорах), и помещает их в один логический экран Х-интерфейса. Это позволяет перетаскивать окна между графическими процессорами и растягивать на несколько процессоров. Драйвер NVIDIA поддерживает аппаратное ускорение OpenGL на всех графических процессорах NVIDIA при включении Xinerama.

Чтобы настроить Xinerama:

  1. Создайте несколько экранов Х-интерфейса (обратитесь к страницам руководства по XF86Config(5x) или xorg.conf(5x) за дополнительной информацией).
  2. Включите расширение Xinerama, добавив строку:

Option "Xinerama" "True"

в секцию "ServerFlags" файла конфигурации X-интерфейса.

Требования:

  • рекомендуется использовать идентичные графические процессоры. Некоторые комбинации не идентичных, но схожих графических процессоров также поддерживаются. Если графический процессор несовместим с прочими в рабочем столе Xinerama, то OpenGL изображение не будет появляться на экранах, размещенных на этом процессоре. Изображение тем не менее будет появляться на экранах, размещенных на других графических процессорах. В этой ситуации файл журнала Х-интерфейса будет включать сообщения вида:

    (WW) NVIDIA(2): The GPU driving screen 2 is incompatible with the rest of
    (WW) NVIDIA(2): the GPUs composing the desktop. OpenGL rendering will
    (WW) NVIDIA(2): be disabled on screen 2.
  • Реализация GLX от NVIDIA поддерживает Xinerama только если физический экран Х-интерфейса с номером 0 управляется драйвером NVIDIA. Это обусловлено тем, что сервер Х-интерфейса X.Org размещает отображения логических экранов Xinerama в отображении экрана Х-интерфейса с номером 0. Если экран с номером 0 управляется драйвером, отличным от драйвера NVIDIA и используется Xinerama, GLX будет отключен.
    Если некоторые экраны Х-интерфейса с номерами, отличными от 0, управляются не драйвером NVIDIA, рендеринг OpenGL на них не будет осуществляться;;
  • только выборка из возможностей, поддерживаемая всеми графическими процессорами, будет поддерживаться;
  • максимальное разрешение видимой области изображения OpenGL зависит от используемого оборудования, и указано в нижеприведенной таблице. Если окно OpenGL размером превышает размеры максимальной видимой области изображения, области за пределами видимости будут пустыми;
  • пределы видимой области изображения OpenGL для Xinerama, пикселей:
    GeForce до серии 84096 x 4096
    GeForce от серии 8 до GTX 4008192 x 8192
    GeForce GTX 40016384 x 16384
    Quadro до G80по размеру рабочего стола
    Quadro от G80 до Fermi8192 x 8192
    Quadro Fermi и более новые16384 x 16384
  • опции настройки Х-интерфейса, затрагивающие процедуры GLX (стерео, наложения) должны быть установлены одинаково для всех экранов сервера Х-интерфейса.

Известные проблемы:

Версии XFree86 до 4.5 и X.org до 6.8.0 содержат неполные интерфейсы для правильной поддержки наложений с расширением Xinerama. На ранних версиях сервера одновременно использование наложений и Xinerama приводит к порче изображения. Если вы используете расширение Xinerama вместе с наложениями, рекомендуем обновить Х-интерфейс до версий XFree86 4.5 или X.org 6.8.0, или более новых.

 /