Основы работы в ОС Linux

       

Структура файла /etc/X11/XF86Config


Конфигурация X-сервера определяется файлом /etc/X11/XF86Config (для 3 й версии XFree86) или /etc/X11/XF86Config-4 (для 4 й версии XFree86), поэтому самый правильный способ настройки X-сервера состоит в прямом редактировании этого файла.

Примечание

Если быть точным, то X-сервер при запуске ищет конфигурационный файл в нескольких местах, а именно:

  • /etc/X11/XF86Config-4
  • /etc/XF86Config
  • /etc/X11/XF86Config
  • /usr/X11R6/etc/XF86Config
  • <XRoot>/lib/X11/XF86Config

где <XRoot> означает каталог, в котором была установлена система XFree86 (обычно это /usr/X11R6).

Создавать файл XF86Config полностью с нуля не стоит. Если вы не отказались от установки X Window в процессе инсталляции системы (именно от установки, а не от автоматического запуска, не путайте!), то такой файл у вас уже есть. Если по каким-то причинам вы устанавливали XFree86 отдельно от установки Linux, то запустите одну из программ, которые позволяют такой файл сформировать. Когда у меня стояла 3-я версия XFree86, я пользовался для создания этого файла программой Xconfigurator. В 4 й версии для создания конфигурационного файла можно воспользоваться утилитами xf86config или xf86cfg, или же использовать опцию configure X-сервера. Для этого дайте такую команду:

[root]# /usr/X11R6/bin/XFree86 -configure

Эта команда молча отрабатывает, сообщая в конце, что создала новый конфигурационный файл /root/XF86Config.new. Ниже приводится файл /root/XF86Config.new, который сформировался у меня (в дальнейшем речь пойдет в основном о версии 4 XFree86, так что особых упоминаний об этом делать не будем.).

Section "ServerLayout" Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection

Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" ModulePath "/usr/X11R6/lib/modules" FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/" FontPath "/usr/X11R6/lib/X11/fonts/CID/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" EndSection


Section "Module" Load "extmod" Load "xie" Load "pex5" Load "glx" Load "dri" Load "GLcore" Load "dbe" Load "record" EndSection

Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" EndSection

Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "PS/2" Option "Device" "/dev/mouse" EndSection

Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" EndSection



Section "Device" Identifier "Card0" Driver "trident" VendorName "Trident" BoardName "3DImage985" BusID "PCI:1:0:0" EndSection

Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Depth 8 EndSubSection SubSection "Display" Depth 15 EndSubSection SubSection "Display" Depth 16 EndSubSection SubSection "Display" Depth 24 EndSubSection EndSection

Section "DRI" EndSection

Как видите, файл XF86Config состоит из нескольких секций, имеющих следующую структуру:

Section "Название_секции" Identifier "Name" SectionEntry ... EndSection



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

Секция ServerLayout имеет наивысший приоритет, т. е. именно с нее начинается анализ файла XF86Config при загрузке X-сервера. Эта секция определяет, какие устройства ввода/вывода будут использоваться в X-сессии. Устройства ввода - это клавиатура и мышь, которые задаются в секциях InputDevice (такие секции создаются отдельно для каждого устройства). Устройства вывода обычно состоят из нескольких независимых компонентов (графический адаптер и монитор), которые связываются воедино в секции Screen, на которую указывает ссылка в секции ServerLayout. Таким образом, секция ServerLayout должна содержать, как минимум, следующие строки:

Section "ServerLayout" Identifier "MainSection" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer"> InputDevice "Keyboard0" "CoreKeyboard"> EndSection

Секция Screen определяет используемые монитор и видеоадаптер и задает режимы работы экрана. Она может иметь примерно такой вид:

Section " Screen" Identifier "Screen0" Device "Trident 3DImage985 (generic)" Monitor "ViewSonic|ViewSonic G771" DefaultColorDepth 24 Subsection "Display" Depth 8 Modes "1024x768" "800x600" "640x400" ViewPort 0 0 EndSubsection Subsection "Display" Depth 16 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 32 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection EndSection

Как видите, она содержит указания на используемый графический адаптер (задается в секции Device с идентификатором "Matrox Millenium G200") и монитор (задается в секции Monitor с идентификатором "Monitor0").

Cекция Screen может содержать несколько подсекций (Subsection) Display, по одной такой подсекции на каждую глубину цвета. В каждой такой подсекции вы должны прописать те режимы монитора, которые будете использовать. Режимы задаются в строке Modes. Они указываются путем перечисления их наименований, взятых из секции Monitor (в точности в том виде, как эти названия указаны после слова Modeline). В одной строке можно перечислить любое число таких имен режимов. Первый из указанных режимов будет запускаться по умолчанию, в остальные можно будет переключаться (циклически), нажимая комбинацию клавиш <Ctrl>+<Alt>+<+> или <Ctrl>+<Alt>+<-> (используются клавиши <+> и <-> на цифровой клавиатуре).

В этой подсекции указывается также размер виртуального экрана, который будет использоваться сервером. Соответствующая строка имеет вид "Virtual xdim ydim", где xdim и ydim - размерности виртуального экрана. Например, вы можете иметь дисплей с разрешением 800 * 600, а размер виртуального экрана задать равным 1024 * 768. Тогда в каждый момент времени вы будете видеть на дисплее только часть полного изображения. Надо, однако, учитывать, что видеопамять должна хранить изображение, равное по размеру виртуальному экрану, а также то, что нежелательно занимать всю память хранением виртуального экрана, поскольку в этом случае не остается резерва на кэширование, что может повлечь потерю 30-40% производительности сервера.

Секция Monitor обычно начинается тремя строками, в которых указывается производитель монитора и его модель, однако если у вас только одна секция Monitor, то эти строки вполне могут иметь вид:

Identifier "Unknown" VendorName "Unknown" ModelName "Unknown"



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

HorizSync 30-70 VertRefresh 50-180

Для мульти-частотных мониторов с фиксированными частотами:

HorizSync 31.5, 35.2 VertRefresh 60, 65

Для мульти-частотных мониторов с несколькими интервалами допустимых частот:

HorizSync 15-25, 30-50 VertRefresh 40-50, 80-100

Частоты горизонтальной синхронизации задаются в килогерцах, частоты вертикальной синхронизации (обновления экрана) - в герцах.



Внимание!

Обязательно проверьте, что здесь указаны значения, соответствующие характеристикам вашего монитора, приведенным в документации.
Секций Monitor в файле может быть несколько, они различаются уникальными идентификаторами (первая строка в секции). В 4-й версии XFree86 перечисление режимов монитора в этой секции является необязательным, поскольку X-сервер использует встроенный список стандартных VESA-режимов. Однако явное задание режима в секции Monitor и не возбраняется, причем, если заданный вами режим получит такое же название, как один из стандартных режимов, будут использованы ваши установки. Встроенные режимы с именами, не встречающимися в секции Monitor, будут использоваться сами по себе.

Видеорежимы могут быть заданы также в секции Modes. Таких секций в файле тоже может быть несколько. Каждая из них задает некоторый набор видеорежимов, на который можно сослаться из секции Monitor, используя ключевое слово UseModes.

Режимы могут задаваться в двух эквивалентных форматах: в виде одной строки или несколькими строками. Вот пример задания одного и того же режима в этих двух форматах:

Modeline "640x480example" 25.175 640 664 760 800 480 491 493 525 -HSync +VSync

Mode "640x480example" DotClock 25.175 Htimings 640 664 760 800 VTimings 480 491 493 525 Flags "-HSync +VSync" EndMode

Первое слово в каждом формате (Modeline или Mode), как и слово EndMode, являются служебными. По ним X-сервер определяет, что данная строка или группа строк служат для задания видеорежима. Следующее слово (в кавычках) является названием данного режима. Вы можете выбрать это название по своему вкусу (хотя, как пишет Игорь Николаев http://knot.pu.ru/faq/xfaq.html, "я бы не стал использовать в названии ничего, кроме цифр и букв латинского алфавита").

Следующее число (оно может быть дробным) задает тактовую частоту развертки (частоту вывода точек на экран) в мегагерцах.

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

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

Аналогично формируются следующие 4 числа (VTimings) в описании формата, только в данном случае речь будет идти о числе строк на экране (видимых и невидимых) и импульсе вертикальной синхронизации (началом экрана считаем верхнюю границу видимой части изображения).

О последней группе параметров в описании видеорежима (группа Flags) мы поговорим позже, когда рассмотрим вопрос о том, как правильно сформировать значения числовых параметров.

В большинстве случаев нет необходимости в наличии секции Modes и строки UseModes, так как достаточно встроенного в сервер набора видеорежимов, соответствующих стандарту VESA. При запуске X-сервера он автоматически выбирает из возможных режимов лучший вариант, поддерживаемый монитором и видеокартой (решение принимается на основе значений, указанных в строках HorizSync и VertRefresh секции Monitor, так что очень важно, чтобы они были заданы корректно).

Следующая секция Device, описывает вашу видеоплату. По-видимому, самая важная строка в этой секции - указание на драйвер. У меня эта строка имеет вид:

Driver "mga"



В этой секции могут быть также указаны следующие данные:

  • тип набора микросхем (Chipset);
  • количество видеопамяти (указывается в килобайтах);
  • допустимые значения тактовой частоты развертки (dot-clocks) или наименование используемого генератора тактовой частоты;
  • тип RAMDAC (RAMDAC - это часть графического контроллера, отвечающая за преобразование изображения из цифровой в аналоговую форму).


Эти параметры были, по-видимому, критичны для старых видеоплат, но для современных они перестали играть существенное значение. Большинство современных видеоплат имеют программируемые генераторы частот, которые могут задавать тактовую частоту развертки в очень широких пределах. Только в том случае, если у вас какой-то экзотический тип видеоплаты (особенно если вы знаете, что она поддерживает только ограниченное число частот генератора), надо позаботиться о корректном задании режимов в этой секции. В этом случае вначале воспользуйтесь программой SuperProbe для того, чтобы узнать нужные параметры, а затем пропишите полученные значения в секции Device.

Две секции InputDevice определяют мышь и клавиатуру (в 3-й версии XFree86 вместо секций InputDevice имелись секции: Keyboard и Pointer). Во-первых, здесь нужно указать тип клавиатуры. Помните, что обычная клавиатура для персональных компьютеров обозначается как "Generic 102-key PC (intl)" вместо предлагаемого по умолчанию варианта "Generic 101-key PC". Однако наиболее часто сейчас встречаются 104-клавишные клавиатуры, так что секция, определяющая конфигурацию клавиатуры должна содержать следующие строки:

Option "XkbRules" "xfree86" Option "XkbModel" "pc104" Option "XkbLayout" "ru" Option "XkbOptions" "grp:ctrl_shift_toggle"

Последняя из этих строк определяет переключатель, который будет менять раскладку клавиатуры с американской на русскую (в данном примере - <Ctrl>+<Shift>).

Кроме того, здесь можно указать протокол для работы с клавиатурой (Xqueue или Standart), скорость повтора (the repeat rate), а также переопределить значения некоторых клавиш. Для начала, пожалуй, не стоит тут слишком экспериментировать. Подробнее о настройке клавиатуры будет рассказано в разд. 9.3.

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

Option "Protocol" "PS/2" Option "Device" "/dev/mouse"



определяющие протокол и файл устройства. Если ваша мышь подключена к специальному ("мышиному") разъему, то в качестве параметра Protocol должно быть указано либо "PS/2", либо более длинное слово, оканчивающееся на "PS/2". Остальные протоколы используются для мышей, подключаемых через последовательный порт. Обратите внимание на то, что не всегда протокол совпадает с названием фирмы-производителя. Так, некоторые из мышей фирмы Logitech используют либо протокол MouseMan, либо Microsoft. Если ваша мышь выпущена относительно недавно, можно поставить "Auto" в графе Protocol.

Секция Files содержит несколько строк, в которых прописаны пути к файлу с базой цветов (это таблица, задающая соответствия между цифровым и словесным заданием цветов, эту строку не стоит редактировать) и каталогам с файлами шрифтов. Путей к каталогам со шрифтами может быть задано несколько. Убедитесь только, что все указанные каталоги существуют и действительно являются каталогами шрифтов (там должен быть специальный файл fonts.dir, создаваемый командой mkfontdir, этот файл не рекомендуют создавать вручную). Если при запуске сервер будет выдавать сообщение типа "Can't open default font 'fixed'" или что-то еще в таком роде, это свидетельствует о том, что в секции Files ошибка в указании пути к файлу шрифтов (нужный шрифт не найден).

В этой же секции могут быть заданы пути к каталогам, содержащим загружаемые модули. Какие именно модули загружаются, и параметры загрузки определяются в секции Module, о которой мы сейчас говорить не будем, как и о секциях ServerFlags, VideoAdaptor, DRI, Vendor. Оставьте эти секции в том виде, как они созданы программой конфигурации.


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