Я так и не смог заставить себя написать текст по настройке X-ов --- не было времени и желания. Спасибо Игорю Николаеву, за его описание. Я сделал некоторые изменения и дополнения.
Решаемая нами задача: запустить монитор под X и поставить достаточно максимальные параметры. Если мы поймем как запустить монитор, то мы поймем как сделать тонкую настройку. Процесс запуска описан в расчете на человека, который знает физику и математику в размере средней школы и карманного калькулятора соответственно, но немного их подзабыл. :-)
В тексте большое внимание обращено тому, как именно картинка формируется на экране монитора. Считается, что Вы знакомы с редактором, умеете редактировать конфигурационные файлы, можете самостоятельно установить программный пакет, прочитать и понять документацию, то есть по крайней мере функционально грамотны и владеете навыками оператора машинного доения.
Процесс описан применительно к широко распространенным мониторам среднего качества. Можно говорить, что это мониторы с невысокой ценой (до $1000 за новый) и последних пяти лет выпуска. Процесс установки экзотических мониторов отличается большей сложностью. Это относится как к устаревшим моделям (мониторы с набором фиксированных частот развертки, с нестандартным для Вашего компьютера интерфейсом), так и к хорошим моделям с большим количеством функций (к примеру lcd, полностраничные, демонстрационные мониторы).
Мы настраиваем X server. Это та программа, которая показывает Вам на экране монитора картинку. Именно она в Xwindow называется сервером. А разные там оконные менеджеры (olvwm, fvwm, twm, motif mvm, afterstep, kwm, enlightenment) и прикладные программы, такие как netscape, xterm etc - клиенты этого сервера.
Кроме монитора, unix-box и Xfree86 нам потребуется простой калькулятор. Извините, но экран будет занят - поэтому отдельный от машины калькулятор.
Итак, перейдем к настройке XFree. Я надеюсь, что Вы установили этот пакет (раздел X в Slackware) и разобрались, в каких каталогах какие файлы лежат (посмотрите содержимое пакетов с именами начинающимися с буквы x, например, в /var/log/packages/x*)- словом освоились немного.
Для начала попробуйте определить тип вашей видеокарты (например, по команде SuperProbe), параметры монитора (диапазоны горизонтальной и вертикальной разверток) и тип мышки.
Просмотрите man 5 XF86Config и man 1 xf86config. Бывает полезно также почитать документацию в /var/X11R6/lib/docs. Если Вам понравилось читать документацию, то запустите man X, но учтите, что эту документацию приятнее читать внутри X. Первый man - это описание файла настроек XFree, а второй - программы для генерации образца такого файла. Воспользуйтесь программой xf86config и сгенерируйте файл /etc/XF86config.
Постарайтесь более-менее правильно отвечать на вопросы - это может значительно облегчить работу. Если Вы не знаете, как ответить на вопрос - то просто нажмите enter, значения по умолчанию разумны.
Здесь нужно обратить внимание на следующие места. Во-первых, xf86config назойливо предлагает ввести кучу имен как видеокарты так и для монитора. Вам ничто не мешает спокойно вводить одинаковые имена для каждого или просто жать enter. Во-вторых, Вам необходимо руками верно выбрать один из акселерированных драйверов, если такой драйвер есть для вашей карты. Так как скорее всего такой драйвер есть, то это нужно сделать. xf86config поставит символический линк между /usr/X11/bin/ваш_драйвер и /usr/X11/bin/X. В-третьих, xf86config попытается сам определить параметры Вашей карты, попросив у Вас разрешения запустить X -probeonly. Позвольте ему это сделать.
Если Вы не нашли вашей карты в списке поддерживаемых данной версией XFree,
не отчаивайтесь.
Если Вы сомневаетесь, лучшим выбором для пробы будет SVGA сервер,
или даже VGA16. Почти все карты работают с ними (но не всегда на все 100%
от возможной производительности). Следите за новейшими версиями
XFree
(скоро должна выйти, на смену версии 3.3 версия 4.0.
Можно попробовать также найти коммерческие версии X серверов,
как то:
MetroX http://www.metrolink.com/
XInside http://www.xinside.com/
В файле желательно получить хотя бы одну рабочую моду (640x480 к примеру). Других мод можно не делать - мы их построим ручками.
Запустите сначала
X -probeonly >/tmp/x 2>&1и рассмотрите результат в файле /tmp/x. Постарайтесь понять, что там написано.
Посмотрите, какая линейка частот доступна. Запишите ее на бумажку. Линейку частот X пишет при старте. Некоторые платы имеют плавно программируемый тактовый генератор. В этом случае стоит записать максимально допустимую частоту.
Затем запустите X и убедитесь, что на экране возникла картинка, что мышка шевелится, что по кнопкам left_Ctrl + left_Alt + gray_plus режимы переключаются (или нет, если Вы сконфигурировали только одну моду). Если у Вас проблемы с мышкой, то учтите, что можно управлять движением курсора мыши по NumLock:
Если у Вас проблемы с мышью, то попытайтесь получить с нее
несколько байт по команде
В системе Xfree каждый режим работы монитора может описываться в файле /etc/XF86config в таком формате:
Modeline "mode_name" D H1 H2 H3 H4 V1 V2 V3 V4 Flags
Это "mode_name" используется в качестве ссылки на
имя режима в
Section "Screen"
Subsection "Display"
Modes "mode_name"
Режимы устанавливаются в порядке перечисления.
Когда Вы заводите новый режим, то назовите его "test"
и включите в
Modes например так:
Modes "test" "640x480" "800x600"
Давным давно эта частота соответствовала частоте одного из кварцевых генераторов на Вашем видеоадаптере. Сейчас используются синтезаторы частоты, приборы с зарядовой связью и прочие чудеса техники, позволяющие формировать точки на экране существенно быстрее, чем частота кварца в Вашем адаптере. Однако в любом случае мы должны действовать так, как будто именно с этой частотой адаптер работает внутри себя и выдает точки на экран.
Есть некоторая польза от графической программы xvidtune, которая позволяет подстроить видеорежимы интерактивно. Однако, я не советую излишне увлекаться нажатием кнопочек, так как возможности xvidtune ограничены. Важно понимать куда двигаться.
К сожалению, числа, отвечающие за развертку выбраны так, чтобы их было удобно запихивать в видеоадаптер, а вовсе не воспринимать человеку. Разберемся с ними сначала на примере строчной синхронизации. Представим себе, что только что кончился импульс синхронизации и монитор начал двигать луч слева направо. Один тик соответствует частоте тактового генератора - параметру D.
Через K тиков тактового генератора видеокарта начала выдавать картинку. И выдавала ее L тиков (то есть L точек изобразились на экране). Затем через M тиков карта подождала и выдала строчный синхроимпульс, который длился N тиков. По началу строчного синхроимпульса монитор начал обратный ход развертки, и через некоторое время (какое то, не обязательно N или еще что-то) его закончил.
Так вот, для формирования такой временной диаграммы необходимо задать следующие параметры:
H1 = L
H2 = L + M
H3 = L + M + N
H4 = L + M + N + K
Иначе говоря, H1 - это количество точек, изображаемых в одной строке на экране, то есть ширина экрана в тиках тактового генератора. H2 - расстояние в тиках между началом картинки и началом синхроимпульса. H3 - расстояние в тиках между началом картинки и концом синхроимпульса. H4 - полная длина одной строки в тиках.
Это означает, что частота строк равна частоте тактового генератора D поделенной на общее количество тиков в одной строке H4.
Для кадровой развертки в качестве тика используется частота строк, иначе говоря: V1 - количество строк, отображаемых в одном кадре, V2 - количество строк от начала кадра до начала кадрового синхроимпульса, V3 - от начала кадра до конца кадрового синхроимпульса, V4 - общее количество строк в кадре.
Таким образом, частота кадров определяется как частота тактового генератора D поделить на общее количество тиков в строке H4 поделить на общее количество строк V4.
Начнем рассчитывать реальные числа. Возьмем желаемую частоту кадров, к примеру 72 Hz. Если наш монитор позволяет вытянуть 64 kHz строчной частоты, то это значит, что V4 можно принять равным 64000/72 = 888. Для выполнения обратного хода по кадрам обычно достаточно принять V2 = V1 + 1 и V3 = V2 + 1. Тогда обратный ход кадровой развертки будет выполняться сразу после окончания кадра. Длительность хода кадровой развертки обычно около 5..10 строк. Примем V1=880, V2=881, V3=882. Если мы ошибемся в кадровой развертке - то обычно это проявится только как "загнутость" или неравномерность верхних строчек.
Теперь посмотрим, что можно сделать с H. Если мы хотим, чтобы картинка соответствовала пропорции экрана 3x4, то H должно быть порядка 1200. Здесь есть одна тонкость, про которую не нужно забывать. А именно: H1 должна делиться на 2**n. Подробнее написано при обсуждении ЦАП. Значения H2, H3, H4 также обычно должны делиться по крайней мере на 8. Обратный ход строки составляет примерно 2..5% от длины развертки. Для надежности выберем H1 из ряда 960, 1024, 1088, 1152, 1216, 1280, например 1152. Итак пусть H1=1152, H2=1168, H3=1184, H4=1248.
При этом D = 72Hz * V4 * H4 = 72Hz * 888 * 1248 = 79.8 MHz
Если такой частоты в линейке частот нет, то нужно установить ближайшую. Если ближайшая расположена не очень близко, то пересчитать числа, исходя из частоты тактового генератора и частоты строк. Учтите, что увеличить частоту кадров можно всегда просто уменьшив количество строк в кадре, а вот изменение в количестве точек в строке всегда болезненная процедура.
Итого записываем в XF86config
Modeline "test" 79.8 1152 1168 1184 1248 882 883 884 888
Не забываем оформить секцию Screen:
Subsection "Display"
Depth 8
Modes "test" "640x480" "800x600" "1024x768"
ViewPort 0 0
# Virtual 1024 768
EndSubsection
Обратите внимание на то, что Virtual пришлось закомментировать - значение по умолчанию нас не очень устраивает. Запускаем X. Выставляем контрастность поменьше, а яркость побольше, так чтобы была видна не только картинка, но и поля вокруг нее. Рассматриваем экран на тему загибающихся краев, подергивающейся синхронизации etc. Если так ничего и не получается, но какой-то режим работает, полезно скопировав работающую моду в "test" немного поиграть параметрами, чтобы усвоить их назначение еще раз.
Для поддержки этого режима необходимо вставить в конфигурационный файл XF86Config в конец раздела Section "Device" следущие несколько строк:
... Option "power_saver" EndSection Section "Screen" StandbyTime 10 SuspendTime 15 OffTime 20 EndSection
Время в опциях указано в минутах. Для проверки того, что данный режим подключен можно воспользоваться после загрузки X Window очень полезной командой xset q.
Не забудьте, что H1 * V1 не должно быть больше, чем максимальное количество точек, определяемое оперативной памятью и глубиной цвета.
Учтите, что некоторые старинные "несколькочастотные мониторы" определяют частоту синхронизации по полярностям сигналов кадровой и строчной разверток. Наша цель в таком случае - попытаться выставить максимальный вариант. Именно в этом случае нужно попробовать поменять флаги +hsync, -hsync, +vsync, -vsync.
Если синхронизация дрожит, то нужно увеличивать H4 или уменьшать D, видимо монитор не может вытянуть заданную синхронизацию.
Если курсор раздвоился на небольшом расстоянии, значит нужно увеличить n в признаке делимости на 2**n для всех H1..4
Иногда синхронизации нет оттого, что длительность строчного синхроимпульса слишком мала. В этом случае можно не стесняясь увеличивать H3 вплоть до H4 и наблюдать за результатом. Такой болезнью обычно болеют цифровые мониторы.
На некоторых мониторах чтобы достичь максимальной строчной частоты приходится устанавливать H1=H2 или даже H1>H2. Не все видеокарты это позволяют или обрабатывают корректно. Остерегайтесь ставить H2=H3. Обычно это имеет мало смысла так как строчная развертка может не сработать на маленьком иголочном импульсе, который выдаст видеоплата. Такое желание скорее говорит о необходимости изменить флаг hsync.
Если Вы превысите паспортное значение строчной частоты, то синхронизация не обязательно сорвется. Однако через некоторое время может сгореть строчный трансформатор. На гарантийных мониторах я бы посоветовал экспериментировать и задирать частоту насколько можно. Так как если монитор можно выжечь программно - то кому нужен такой монитор? Жгите и пусть продавец меняет.
На больших мониторах Вы можете наткнуться на ограничение по частоте видеоусилителя. Оно выражается в том, что вертикальная линия в один пиксел будет серой или почти невидимой. Хороший монитор должен воспроизводить вертикальные черные и белые линии с одинаковой четкостью.
Большие проблемы может также доставить муар, причем как по горизонтали, так и по вертикали. Путем тонкой подгонки частот с ним тоже можно бороться. Хорошие монитору имеют регулировку для устранения муара.
Как было сказано в начале, X Window состоит из двух частей: X-сервер и X-клиент. Перейдем к настройкам интерфейса пользователя (X-клиента). Slackware предоставляет здесь большой выбор от простейших оконных менеджеров до пышных и ресурсоемких графических сред (Gnome, KDE). Мой выбор --- OpenWindows Virtual Desktop Manager (olvwm): ничего лишнего, симпатичный графический (библиотека xview) интерфейс Sun Solaris, откуда этот менеджер был взят. Ваш выбор может быть иным, поэтому я постараюсь описать разнообразные варианты. Для того, чтобы запустить olvwm надо набрать openwin, для других менеджеров --- startx.
При наличии пользовательских настроечных файлов, лежащих в домашнем каталоге пользователя, используются они. Если их нет, используются стандартные, общественные, обычно лежащие в каталоге /usr/lib/X11 или /usr/openwin/lib.
Персональные и общественные пользовательские настройки хранятся в файлах:
$HOME/.Xdefaults $HOME/.OWdefaults /usr/lib/X11/Xdefaults /usr/openwin/lib/Xdefaults /usr/openwin/lib/app-defaults/*
После любых исправлений файл с ресурсами необходимо перечитать:
xrdb -merge .Xdefaults
Окружение (desktop) - т.е. программы, которые стартуют
автоматически при запуске X Window находится в файлах:
Openwin:
$HOME/.openwin-init /usr/openwin/lib/openwin-init
"Стандартный" X window:
$HOME/.xinitrc /usr/lib/X11/xinit/xinitrc
Настройки window-manager'a - т.е. - поведение окон, менюшки пользователя, раскладка команд на клавиши мышки, ...
Openwin:
$HOME/.openwin-menu $HOME/.openwin-menu-* /usr/openwin/lib/openwin-menu /usr/openwin/lib/openwin-menu-*
Fvwm
$HOME/.fvwmrc /usr/lib/X11/fvwm/system.fvwmrc
Как Вы уже обратили внимание, я не уделил внимания кнопкам, мышке, фонтам... Много чему. Наверное, это тема для отдельной рассказки. В эту рассказку неплохо бы добавить подробное описание борьбы с флагами и с глубиной цвета. Но пора бы и честь знать.