Автоконфигурация X-Window.
Владимир Попов <vn_popov at linux-online.ru>
Возможно, не всем известно, что X-Window имеет средства
автоконфигурирования. Средства эти с каждой версией совершенствуются
и, на мой взгляд, в настоящее время уже вполне могли бы конкурировать
со специальными программами настройки, такими как xf86config или
xf86cfg. Об этих самых средствах и речь.
Все описываемые ниже операции проводятся под root-ом в каталоге, опять
же, /root. В консольном режиме, разумеется, поскольку настройка
X-сервера сразу в графическом режиме напоминает ремонт автомобиля в
движении: возможно, но - зачем? Так же, само собой разумеющимся, я
полагаю отсутствие автоматической загрузки графической среды. То есть:
загружаемся в консольном режиме, X-Window запускаем командой startx.
Заранее прошу прощения у специалистов за намеренно упрощённое описание
вывода на экран: хотелось как можно проще, но достаточно для понимания
конфигурационных параметров.
Запуск.
-------
Предельно просто:
$>X -configure
Результат: /root/XF86Config.new
Обычно, этот файл имеет размер менее 3-х килобайт: со времён третьей
версии X-Window XF86Config заметно "похудел" и вряд ли его анализ
окажется затруднительным. К чему и приступим. Секции, не нуждающиеся в
редактировании, просто не упоминаются.
Section "Files"
---------------
Что касается RgbPath и ModulePath, то их редактировать не придётся, а
вот опции FontPath требуют внимания. Если сервер фонтов xfs не
используется (а X-Window так и предполагает), то нужно добавить
строки, указывающие путь к фонтам с кириллицей: ну не догадывается
конфигуратор о нашей привязанности к этому алфавиту. Если же xfs
используется: удаляем все строки с FontPath, и вставляем вместо них
только одну:
FontPath "unix/:7100"
Рекомендации по поводу кириллицы в этом случае аналогичны, только
модифицировать нужно будет файл конфигурации xfs-сервера
(/etc/X11/fs/config)
Section "Module"
----------------
Список загружаемых модулей, обеспечивающих различные аспекты работы
X-Window, можно не трогать: конфигуратор составляет его с учётом
особенностей видеокарты и используемого драйвера и, как правило, не
ошибается. А вот со списком модулей, обеспечивающих растеризацию
шрифтов, можно поспорить: в него включены только type1 и speedo. На
мой взгляд, отказываться от фонтов true-type нынче вряд ли стоит. А
для этого потребуется включить строки
Load "freetype" Load "xtt"
Section "InputDevice"
---------------------
В секции, описывающей мышь, вполне можно согласиться с опцией
Option "Protocol" "auto"
А, если симлинк /dev/mouse указывает на реально имеющуюся мышь, то и
на следующую за ней
Option "Device" "/dev/mouse"
Для 3-х кнопочной мыши не лишним будет добавить
Option "ZAxisMapping" "4 5"
А вот в одноимённой секции для клавиатуры изменений будет побольше:
опять придётся отдать должное нашей привязанности к кириллице.
Вставляем:
Разумеется, количество клавиш на клавиатуре, желание использовать
winkeys, CapsLock в качестве переключателя, а scroll - в качестве
индикатора - дело вкуса.
Section "Monitor"
-----------------
Зона "особого внимания". Буквально два слова теории:
* видимое на экране - кадры, сменяющие друг друга с частотой,
скажем, 25..150 Гц;
* кадры состоят из строк (480 .. 1200 для стандартных нынче
разрешений по вертикали), которые, как нетрудно догадаться, могут
следовать с частотой 25х480 .. 1200х150, или: 12 .. 180 кГц;
* строки состоят из точек, количество которых определяется
разрешением по горизонтали (для приведённых выше значений
разрешения по вертикали это, соответственно: 640 .. 1600). То есть
точки будут следовать друг за другом с частотой 12х640 ..
180х1600, или: 7.68 .. 288 МГц;
* реальная картина несколько сложнее, уже хотя бы потому, что
электронному лучу кроме полезного "рисования" приходится совершать
ещё и так называемый невидимый "обратный ход", но в первом
приближении именно приведённые цифры характеризуют работу монитора
и именно они определяют его способность обеспечивать нужное
разрешение с желаемой кадровой развёрткой;
* справедливости ради, нужно заметить, что видеокарта также имеет
ограничение по частоте "рисования" точки (так называемая
dot-clock) и, по идее, реальным ограничением будет меньшая из двух
величин: dot-clock видеокарты или полоса пропускания (bandwidth)
монитора. Но, практически, первая всегда превышает вторую, так,
что "слабое звено" всё же - монитор.
Секция "Monitor" как раз и содержит информацию о максимально возможных
частотах горизонтальной синхронизации (HorizSync) и вертикальной
развёртки (VertRefresh). Точнее: должна содержать, поскольку опирается
при этом на данные, получаемые от монитора. Так называемый EDID. А
EDID этот самый принят в качестве стандарта только в 1996-м, да и
сейчас не все мониторы выдают корректные данные о себе. Именно это и
"удлиняет несчастьям нашим жизнь", как выразился когда-то Гамлет,
принц датский. Не получен EDID - не будет автоконфигурации. Что не
мешает, разумеется, поправить дело вручную. Если опции HorizSync и
VertRefresh в XF86Config.new отсутствуют, их нужно просто вставить,
почерпнув нужные цифры из документации монитора. Если же документации
нет, то рекомендации следующие:
HorizSync 28.0 - 96.0
VertRefresh 50.0 - 70.0
Если монитор старенький, то с верхней границей частоты горизонтальной
синхронизации мы, возможно, и "погорячились", но страшного в этом нет,
пока не задана слишком большая частота развёртки кадровой. Что бы не
"погорячиться" и с ней, нужно помнить, что для разных разрешений она
различна. Примерно так:
800х600 - 75
1024х768 - 70
1280x1024 - 65
1600x1200 - 60
dot-clock видеокарты Х-сервер проверяет сам, bandwidth монитора при
отсутствии данных EDID - рассчитывает. Так что больше ничего не
требуется.
Section "Device"
----------------
В этой секции находятся опции драйвера, предлагаемого Х-сервером для
использования с данной видеокартой. Все они "закомментированы" и могут
быть востребованы исключительно по инициативе пользователя. Пара
примеров:
Option "LcdCenter" # автоматическое "центрирование" изображения
# для драйвера neomagic
Option "CursorShadow" # для драйвера nvidia
Section "Screen"
----------------
Задаёт используемые видеорежимы. По моему глубокому убеждению,
эксперименты с видеорежимами оправданы только при смене видеокарты или
монитора. В обычной же жизни, в этой секции кроме опций,
идентифицирующих видеосистему, требуется только:
DefaultDepth 24
и всего одна SubSection "Display":
Depth 24 Modes "1024x768"
Разумеется, глубина цветопередачи и разрешение - дело вкуса.
Resume
------
Очевидно, всё описанное не очень изменило размер XF86Config.new,
скорее - наоборот. Осталось переименовать его в XF86Config, перенести,
при желании, в /etc/X11 или куда-то ещё (в зависимости от
дистрибутива), проверить и обеспечить графический вход в систему, если
уж такая привычка имеет место.
Bonus
-----
* три с лишним десятка драйверов, входящих в версию 4.3 покрывают
очень широкий спектр оборудования. Но "нельзя объять необъятное" и
не исключено, что как раз нужного-то драйвера и нет. В этом случае
рекомендуется пробовать универсальные драйвера: fbdev, vesa и vga,
подставляя их в опцию Driver секции Device;
* если геометрические характеристики изображения
неудовлетворительны, используйте xvidtune, входящую в комплект
X-Window. С её помощью (предварительно нажав Auto), можно изменить
размеры изображения и сместить его в требуемом направлении. Кнопка
Show заставит xvidtune выдать в stdout (куда он попадёт конкретно
- определяется способом запуска xvidtune и Х-сервера) значения,
которые можно подставить в опцию ModeLine. Саму же опцию нужно
поместить в секцию Monitor;
* Х-сервер всегда старается задать максимально возможную для
монитора кадровую развёртку. Для того, чтобы ограничить это
стремление, нужно уменьшить максимальное значение VertRefresh.
Чаще, однако, требуется обратное: монитор поддерживает более
высокую частоту кадровой, а Х-сервер её не выдаёт. Объяснение
просто: Х-сервер "перебирает" только стандартные значения
развёртки, "освящённые", так сказать, VESA. Что не мешает нам
навязать ему любой видеорежим с помощью всё той же опции ModeLine.
Осталось выяснить, где взять желаемые значения для ModeLine.
Лучшее из известных мне средство videogen
(http://www.dynaweb.hu/opensource/videogen/). Сочетание videogen
и xvidtune позволяет "выжать" из монитора максимум.