Xorg: немного об автоконфигурировании

Алексей Федорчук
2005 г

Эта заметка была написана давно и по случаю. Ныне методы не только ручного, но и автоматического создания конфигурационного файла Иксов уходят в прошлое — на смену крестьянской лошади идёт железный конь HAL’а. Тем не менее, и старое доброе автоконфигурирование X-сервера может выручить в трудную минуту. Как оно выручило меня после установки CRUX версии 2.5.

Что-то давненько не конфигурировал я Иксов… Ведь одна из прелестей POSIX-систем, неведомая «подоконникам», — возможность раз создать всякие и всяческие конфиги, а потом буквально годами таскать их с машины на машину, из одного дистрибутива Linux в другой, и даже — из Linux’а во FreeBSD и обратно, внося в них лишь косметическую правку.

Так было и у меня с Иксами: запустив последний раз xf86config — страшно подумать — года два назад, я к этой программе почти не притрагивался, разве что иногда — чтоб не отвыкнуть. Мой /etc/X11/XF86Config верой и правдой служил мне на всех моих машинах и во всех операционках, благо видеокарты у меня были всегда на чипах NVIDIA, а ее фирменными драйверами я никогда не пользовался за ненадобностью. И потому великие достижения системы XFree86 в автоконфигурировании, столь красочно описанные некогда Владимиром Поповым и блестяще реализованные им на практике в LiveCD LinuxPop, прошли мимо меня.

А вот недавно сподобился по двум причинам. Во-первых, как уже было сказано, до сих пор я пользовался только чипами NVIDIA, а в новом моем ноутбуке имело место быть интеловское чипсетное видео (вариация на тему 845G), на котором мой старый конфиг работать вроде бы не должен. А во-первых, под влиянием вышепоименованной статьи просто захотелось поглядеть, как это выглядит на практике, тем паче, что в моем новом дистрибутиве Archlinux вместо привычного XFree86 штатно присутствовал Xorg, так что мои наблюдения могли в чем-то ее дополнить.

Наперёд скажу, что никаких америк я не открыл — все примерно соответствовало описывавшемуся ранее, с поправкой на ноутбучную специфику. О ней-то и скажу пару слов.

Итак, самоконфигурирование начинается с запуска X-сервера с соответствующей опцией:

# Xorg -configure

Впрочем, в моем случае оно этим и закончилось: сервер выпал в осадок с сообщением о невозможности отыскать мышиное устройство, успев, правда, перед своей безвременной кончиной создать прототип своего конфига xorg.conf.new (размером менее 3 Кбайт). Внимательное рассмотрение которого показало, что искалось устройство под названием /dev/mouse, функционирующее по протоколу auto. Так что безуспешность поисков была неудивительна: в Archlinux используется файловая система устройств, и, согласно описанию в /etc/devfs.conf, симлинк /dev/mouse по умолчанию не создается.

В наличии же имелись: штатный тачпад и USB-мышка с колесиком имени товарища Logitech’а, которые пытались определиться между тремя файлами устройств — /dev/input/mice, /dev/input/mouse0 и /dev/input/mouse1. Кроме того, обнаружилась и символическая ссылка /dev/usbmouse, указывающая на /dev/input/mice. Из чего я сделал заключение, что именно это устройство и является всамделишней USB-мышью, тогда как соотношения остальных /dev/input/mouse# с тачпадом для меня так и остались загадкой.

Впрочем, проблема эта меня не особо волновала, так как навыков работы с тачпадом я не имел и приобретать не собирался. И потому, предварительно скопировав конфиг куда следует

$ cp /root/xorg.conf.new /etc/X11/xorg.conf

бестрепетно внес в секцию Section «InputDevice» в дополнение к имевшимся там

 Identifier  "Mouse0"
Driver      "mouse"
Option      "Protocol" "auto"

еще и такие строки:

 Option      "Device" "/dev/input/mice"
Option      "ZAxisMapping" "4 5"

После чего, надо сказать, Иксы запустились нормально, и в них заработала и мышь, включая ее колесо, и тачпад (а я уж готовился настраивать их как два отдельных устройства). Можно было бы еще значение опции Protokol заменить на IMPS/2 — но и без этого со скроллингом все было нормально.

Следующая неожиданность подстерегала меня в той секции Section "InputDevice", которая отвечает за клавиатуру. В изначальном полуавтоматическом конфиге она содержала всего две строки:

Identifier  "Keyboard0"
Driver      "keyboard"

которые ни о чем не говорили. Так что описание клавиатуры я вытащил из старого конфига:

Option "XkbRules"   "xfree86"
Option "XkbModel"   "pc104"
Option "XkbLayout"  "us,ru"
Option "XkbVariant" ",winkeys"
Option "XkbOptions" "grp:caps_toggle,grp_led:caps"

И все было нормально, но вот на вариант winkeys Иксы реагировать не желали категорически — на лицо была раскладка, соответствующая DOS-маркировке клавиш. После некоторого размышления я выкинул строку с XkbVariant, модернизировав предыдущую:

 Option "XkbLayout"  "us,ru(winkeys)"

после чего все пришло в норму.

Далее, рассмотрение секции «Module» показало полное наличие отсутствия подгрузки модуля xtt, необходимого для восприятия Иксами ttf-шрифтов (зато в изобилии присутствовали модули типа dri и glx, а также же несколько, смысла которых я просто не знаю). Так что я внес сюда строку

 Load  "xtt"

исключив заодно все ненужное (типа модуля поддержки шрифтов speedo).

Теперь собственно о шрифтах. В соответствие с доброй традицией «неправильного» XFree86, Xorg продолжает категорически игнорировать кириллические шрифты, штатно входящие в его состав (каталог /usr/X11R6/lib/X11/fonts/cyrillic). Потеря небольшая — так себе шрифты, между нами говоря, — но само по себе явление показательное. Так что ручная правка секции Files потребуется в любом случае.

В качестве альтернативы штатным шрифтам в качестве растровых лучше задействовать комплект cyr-rfx Дмитрия Болховитянинова. А в качестве векторных — есть выбор между идеологически чистыми шрифтами Валентина Филиппова, существующими как в ATM, так и в TTF-формате, и достижением враждебного лагеря — шрифтам от Microsoft. На самом деле, это — разработка фирмы Monotype, так что идеологических препятствий к их использованию я не вижу. А физически их вовсе не обязательно тянуть с дистрибутива Windows — в виде пакета corefonts они легко находятся на многих сайтах (правда, не знаю, как это выглядит с точки зрения лицензионной чистоты). Или, если уж быть совсем последовательным, с помощью утилиты cabextract извлечь их cab-архива, некогда свободно доступного на сайте Microsoft (и распространение которого по Сети официально вроде так и не было запрещено).

И, наконец, то, что традиционно считается главным при конфигурировании Иксов (и ранее вызывало наибольшие проблемы) — настройка видеорежима. Тут у меня к автоконфигурированию претензий нет: X-сервер при первом старте правильно опознал мой чипсет (официально, согласно документации, именуемый Intel 82852/82855GM), приписал ему соответствующий драйвер (который по сию пору именуется i810), сам собой установил разрешение 1024×768 (что равно физическому разрешению матрицы) и 24-битную глубину цвета. А частотные характеристики для LCD-дисплея, как известно, никакого рояля не играют, так что я этим и не озадачивался.

Конечно, в секции Device можно было бы еще кое-что подретушировать, сняв комментарии со строк соответствующих опций. Однако одни опции для меня были не важны, смысла других я не понимаю, действие же третьих (DRI) мне все равно не на чем было бы проверить.

В итоге путем некоторых обычных манипуляций я довел автосгенерированный конфиг до удовлетворяющего меня состояния, на котором можно было бы и успокоиться. Но для сравнения решил все же запустить и штатный конфигуратор для текстового режима, который теперь носит имя xorgconfig (есть еще и конфигуратор для режима графического — xorgcfg, наследник древнего XF86Setup, — но я ему не доверяю со дня появления).

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

Однако на этот раз результатом-то я и был разочарован. Все началось почти сразу — отказом задействовать расширения Xkb, мотивированным отсутствием соответствующих rules, хотя таковые имели место быть — и именно там, где xorgconfig пытался их отыскать. Соответственно, отпал один из первых плюсов конфигуратора — возможность настройки клавиатуры под свои потребности. Второй же плюс — точное задание диапазонов кадровой и строчной развертки, — как я уже говорил, для LCD-дисплеев не существенен. А все остальное — драйвер видеокарты, разрешение и глубина цвета, — я все равно установил такими же, какие были получены автоматически в предыдущем случае.

А окончательным результатом явился своеобычный конфиг объемом почти в 15 Кбайт, забитый многочисленными (и, ИМХО, ненужными) комментариями и описаниями заведомо избыточных устройств. Плюс время, затраченное на ответы на вопросы, кое-какие из них — просто дурацкие (например, об объеме видеопамяти — все равно в итоговом конфиге соответствующая строка комментируется).

Так что в итоге остается согласиться с мнением Владимира: с точки зрения конечного результата автоконфигурирование Иксов дает ничуть не худший результат, нежели xorgconfig, но избавляет от скучной процедуры, позволяет сэкономить время, а в итоге дает компактный и, главное, удобопонятный, конфиг. А ручная доводка требуется в обоих случаях. Хотя при наличии старого рабочего конфига занимает считанные минуты.