Linux - статьи

Настройка монитора


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

Картинка формируется на экране следующим образом. Видеокарта инициирует движение луча ЭЛТ-монитора, заставляя его подсвечивать пиксели. Луч движется слева направо со скоростью, определяемой частотой генерации точек видеокарты (dot clock). Эта величина (DC) имеет верхний предел, но даже у старых видеокарт этот предел ревышает 100 МГц, так что он редко является сдерживающим фактором для реализации необходимой частоты развертки.

Таким образом, луч проходит HV видимых точек. Далее следует сигнал, гасящий, но не останавливающий луч. Это необходимо, чтобы избежать искажений по краям изображения. Такое состояние "захватывает" еще HR точек. Когда луч достигает правого края строки, видеокарта генерирует так называемый горизонтальный синхроимпульс. Луч возвращается в свое "левое" положение и сдвигается на одну строку вниз. Длительность такого импульса должна быть достаточной, чтобы стабилизировать ЭЛТ для генерации следующей горизонтальной строки. Будем считать, что времени синхроимпульса достаточно, чтобы луч успел "пробежать" HS точек. Находясь в левом крайнем положении и в выключенном состоянии, луч проходит HL точек, блокируя краевые эффекты. Полный цикл движения луча по горизонтали завершен.

Аналогичным образом организовано движение луча по вертикали. Его основными параметрами будут:

VV - количество видимых строк;

VD - количество строк от нижнего края до начала вертикального синхроимпульса;

VS - длительность вертикального синхроимпульса;

VU - верхний отступ до первой строки.

Для пользователя эти технические подробности выливаются в такую важную величину, как частота смены кадров F. При частоте в 60 Гц работать можно, но большинство будет замечать мерцание люминофора, что очень вредно для здоровья. Нужно стремиться установить частоту работы монитора выше 75 Гц - и чем больше, тем лучше.


Так вот, полное число точек, формирующих кадр, будет HxV, где



H = HV + HR + HS + HR,

V = VV + VD + VS + VU

Чтобы эта матрица точек прорисовывалась с частотой F, нужно установить частоту видеокарты равной

DC = HxVxF

Как уже говорилось, с видеокартой проблем обычно не возникает. Частота смены кадров может ограничиваться недостаточной максимальной частотой строчной развертки монитора (FH).

Действительно, если такая частота равна FH, то условная матрица из одной строки будет разворачиваться с частотой FH, а матрица из V строк - с пропорционально меньшей частотой HF/V. Например, если частота строчной развертки монитора составляет 55 KГц, то при разрешении 1024 x 768 частота смены кадров ограничена величиной 55000/768 = 72 Гц. На самом деле она меньше, ведь V < VV. Вот примеры из реальной жизни: указаны максимальные частоты развертки мониторов и частоты смены кадров для различных режимов. Как видно из нее, монитор с частотой горизонтальной развертки меньше 55 KГц лучше не покупать.

Теперь посмотрим, какое отношение все это имеет к XFree86. Для этого заглянем в журнал запуска X-сервера - файл /var/log/XFree86.0.log:

.............. (II) NV (0): Monitor: Using hsync range of 37.00-93.00 kГц (II) NV (0): Monitor: Using vrefresh range of 70.00-100.00 Гц (II) NV (0): Clock range: 12.00 to 256.00 MГц ........................................................................ ....................................................................... (II) NV (0): Not using default mode "800x512" (vrefresh out of range) (II) NV (0): Not using default mode "1920x1200" (insufficient memory for mode) (**) NV (0): Virtual size is 1024x768 (pitch 1024) (**) NV (0): Default mode "1024x768": 94.5 MГц, 68.7 kГц, 85.0 Гц (II) NV (0): Modeline "1024x768" 94.50 1024 1072 1168 1376 768 769 772 808 +hsync +vsync (**) NV (0): Default mode "800x600": 56.3 MГц, 53.7 kГц, 85.1 Гц (II) NV (0): Modeline "800x600" 56.30 800 832 896 1048 600 601 604 631 +hsync +vsync (**) NV (0): Default mode "640x480": 74.2 MГц, 85.9 kГц, 85.1 Гц (D) NV (0): Modeline "640x480" 74.25 640 672 752 864 480 480 482 505 doublescan +hsync +vsync



Во время загрузки ОС определяет базовые параметры работы графической подсистемы: частота строчной развертки (hsync) - 37,00-93,00 KГц, вертикальной развертки (vrefresh) - 70,00-100,00 Гц, видеокарты - 12,00-256,00 MГц.

После этого X пытается в автоматическом режиме воссоздать возможные режимы работы монитора при разных разрешениях и частотах кадров. Например, мы видим, что наша система может работать при разрешении 1024 x 768 с частотой кадровой развертки 85 Гц. А такое разрешение, как 800 x 512, вообще не удалось реализовать. Если пользователь не указывает этого специально, Linux самостоятельно выбирает приемлемый режим. Обратим внимание на следующие строки:

(**) NV (0): Default mode "1024x768": 94.5 MГц, 68.7 kГц, 85.0 Гц NV (0): Modeline "1024x768" 94.50 1024 1072 1168 1376 768 769 772 808 +hsync +vsync

Последняя требует пояснения. В специальной терминологии она называется "модлайн" и имеет следующий формат:

Modeline "имя_моды" DC HV HR HS H VV VR VS V

Значения условных обозначений вы уже знаете. X раздает имена модам согласно разрешениям: "800 x 600", "1024 x 768" и т.д. Флаги +hsync и +vsync определяют прямой или инвертированый уровень импульсов видеокарты. Они могут иметь знак "минус" или вообще отсутствовать. Иногда их приходится подбирать экспериментальным путем.

Теперь скажем несколько слов о том, как параметры, необходимые для правильной работы дисплея, описываются в XF86Config-4. В этом процессе участвуют три секции: Device, Monitor, Screen.

Device определяет модуль видеокарты, и для ручной настройки можно воспользоваться программой Xconfigurator.

В разделе Monitor описываются параметры дисплея ПК: строка Identifier определяет условный идентификатор монитора в пределах файла. VendorName - необязательный параметр, указывающий производителя и модель. Более важную информацию несут значения вертикальной и горизонтальной синхронизации, HorizSync 37-93 и VertRefresh 70-75. При сканировании режимов работы XFree не будет превышать эти величины, чтобы не вывести из строя монитор. В разделе Monitor также определяются необходимые моды:

# 1024x768 @ 60 Гц, 48.4 kГц hsync Modeline"1024x768"65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync



Если в конфигурационном файле есть мода HHHxVVV, то она перекроет свою "тезку", создаваемую в автоматическом режиме при загрузке X.

Чтобы согласовать параметры монитора и видеокарты, используется раздел Screen. В нем подраздел Device содержит параметры видеокарты, а Monitor - параметры дисплея. Обратите внимание на параметр DefaultColorDepth, определяющий количество цветов на экране. Не забывайте, что для реализации необходимой глубины цвета видеокарта должна обладать достаточным объемом памяти. Впрочем, для современных карт это не проблема. А подсчитать необходимое количество памяти можно по формуле:

M = HxVxB

где H - разрешение по горизонтали, V - разрешение по вертикали, B - количество байт, отводимых на оцифровку цвета. Для 256-ти цветов B=1, для 65536-ти цветов - B=2, для 16-ти миллионов - B=3. Таким образом, из нескольких подсекций будет выбрана та, которая обладает подходящим значением Depth.

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

Section "Monitor" Identifier "Monitor" VendorName "PHL" HorizSync 37-93 VertRefresh 70-75 #640x480 @ 75.0 Гц, 37.5 kГц hsync Modeline"640x480"31.5 640 656 720 840 480 481 484 500 -Hsync -Vsync # 1024x768 @ 60 Гц, 48.4 kГц hsync Modeline"1024x768"65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync EndSection Section "Screen" Driver"Accel" Device"NVidia / SGS Thomson|Riva128" Monitor"Monitor" DefaultColorDepth16 SubSection "Display" Depth16 Modes"1024x768" Virtual1024x768 EndSubSection EndSection

Исходя из своей скромной практики, я сделал вывод, что существует два основных способа подстройки монитора средствами X86Config-4.





Предположим, у нас все работает, но работает плохо. Монитор мигает, хотя должен функционировать на нормальной частоте. Определить режим работы дисплея в Gnome или KDE можно с помощью команды xvidtune.

Одной из возможных причин такого состояния может быть неправильная настройка модлайна в файле настройки X. Определив с помощью xvidtune разрешение монитора, например 800 x 600, можно найти все модлайны с таким именем и "закомментировать" их в расчете на то, что при старте X автоматически подберет оптимальные параметры.

В примере, приведенном выше, выбрана неудачная мода 1024 x 768 @ 60 Гц. "Закомментируем" ее: ведь мы знаем, что "автоматическая" мода "1024 x 768" работает на частоте 85 Гц.



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

Вот, например, что предлагает эта утилита для реализации моды 1024 x 768 @ 85 Гц:

Modeline "1024x768" 97.40 1024 1072 1192 1416 768 768 771 809 94.50

Очень близко к данным, которые содержатся в приведенном выше фрагменте. Если этот способ не работает, попробуйте другие утилиты, которых достаточно в интернете (например ). В особо сложных случаях следует предварительно изучить упомянутую документацию и пробовать воссоздать необходимые параметры самостоятельно. Тогда недостаток данного метода может превратиться в его достоинство: таким образом можно "выжать" из монитора дополнительные герцы или установить нестандартное разрешение. Так, мне удалось на 15-дюймовом мониторе получить разрешение 926 x 698 - при работе в Web это удобнее, чем стандартные 800 x 600.

В заключение - несколько дополнительных замечаний и советов. Для описания мод существует альтернативный способ - подсекция Mode:

Mode "имя моды" DotClock частота_видеокарты HTimings HV HR HS H VTimingVV VR VS V Flags+(-) hsync +(-) vsync


Содержание раздела