2004 г.
Linux для пользователя
Виктор Костромин,
http://rus-linux.net/
Глава 7. Графический интерфейс
7.3. Конфигурирование X-сервера
Рассмотрим ситуацию, когда после инсталляции Linux вы либо не можете выйти в графический режим, либо недовольны тем, как выводится изображение в графическом режиме. Если вы при инсталляции задали автоматический выход в графический режим, то вам может показаться, что система вообще отказывается загружаться. Именно поэтому я рекомендовал вам при инсталляции отказаться от автоматической загрузки в графику. Если вы все же попали в такую ситуацию, то попробуйте выйти в однопользовательский режим. О том, как это сделать, рассказано в разд. 8.2.5.
Итак, в графический режим вы выйти не можете, но текстовый режим вам доступен, и, значит, можно воспользоваться некоторыми программами или командами ОС Linux для настройки графического режима. Будем предполагать, что пакет XFree86 у вас установлен, и все файлы, упоминаемые ниже, на диске имеются. Если это не так, то сначала установите пакет XFree86, (о том, как устанавливаются программные пакеты, рассказано в гл. 10). Если эти предварительные условия выполнены, я надеюсь, что приводимые ниже инструкции по настройке графического режима позволят вам осуществить эту настройку.
Предупреждение
Согласно документации к Xfree86 для некоторых типов мониторов, особенно старых моделей, задание недопустимых значений частот вертикальной и горизонтальной развертки может повредить монитор. Поэтому автор не может гарантировать, что, следуя приведенным ниже советам, вы получите желаемый результат, и не повредите вашему компьютеру! Все, что вы будете делать, вы будете делать на свой страх и риск!
7.3.1 Сбор необходимых данных
Для настройки вам потребуются некоторые данные, а именно:
тип набора микросхем, применяемых в видеоадаптере (по нему определяется тип X-сервера, который должен работать у вас);
объем имеющейся видеопамяти;
допустимые интервалы частот горизонтальной и вертикальной синхронизации для вашего монитора (берутся из документации на монитор; эти две частоты надо узнать обязательно).
К числу необходимых для установки X Window сведений относятся также тип вашей мыши и клавиатуры. Работать в графическом режиме без мыши довольно неудобно, а без клавиатуры и вовсе нельзя, так что X-сервер должен быть настроен на использование имеющихся у вас типов этих устройств.
Кое-какую информацию можно получить с помощью программы SuperProbe (её вывод можно перенаправить в файл, например, sprobe.txt):
[root]# SuperProbe > sprobe.txt
Заглянув в этот файл (воспользуйтесь клавишей <F3> в программе Midnight Commander), вы узнаете тип набора микросхем и обьем имеющейся у вас видеопамяти. У меня, например, SuperProbe выдала в одном случае
Chipset: S3 Trio64 (Port Probed)
Memory: 1024 Kbytes
RAMDAC: Generic 8-bit pseudo-color DAC
(with 6-bit wide lookup tables (or in 6-bit mode))
в другом случае
Chipset: Trident 3DImage985 (PCI Probed)
Memory: 4096 Kbytes
RAMDAC: Trident Built-In 15/16/24-bit DAC
(with 6-bit wide lookup tables (or in 6-bit mode))
Тип микросхем видеоадаптера необходимо знать в том случае, если у вас третья версия XFree86. Вообще говоря, программа инсталляции Linux автоматически определяет, какой сервер у вас должен стоять и инсталлирует его. Одновременно в каталоге /etc/X11/ формируется ссылка с именем X на этот сервер примерно такого вида:
@X -> /usr/X11R6/bin/XF86_SVGA (для 3 й версии XFree86).
@X -> /usr/X11R6/bin/XFree86 (для 4 й версии XFree86).
Загляните в каталог /etc/X11 и если обнаружите, что файла-ссылки с именем X там нет, создайте такую ссылку командой
[root]# ln -s /usr/X11R6/bin/XFree86 X
(естественно, файл /usr/X11R6/bin/XFree86 должен существовать).
7.3.2 Структура файла /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 — общие установки;
- InputDevice — описания устройств ввода;
- Screen — конфигурация экрана;
- Device — описания графических карт;
- Monitor — описания монитора;
- Modes — описания видеорежимов;
- Files — пути к файлам;
- ServerFlags — опции сервера;
- VideoAdaptor — описание адаптера Xv (как сказано в интерактивном руководстве man, никто не говорит, что это такое, даже если знает!);
- Module — динамически загружаемые модули;
- DRI — конфигурация DRI;
- Vendor — установки для оборудования конкретных поставщиков (Vendor-specific configuration).
причем наличие всех секций не обязательно, но могут существовать несколько разных секций одного типа (только они должны иметь уникальные идентификаторы).
Секция 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-сервер определяет, что данная строка или группа строк служат для задания видеорежима. Следующее слово (в кавычках) является названием данного режима. Вы можете выбрать это название по своему вкусу (хотя, как пишет Игорь Николаев [П9.1], "я бы не стал использовать в названии ничего, кроме цифр и букв латинского алфавита").
Следующее число (оно может быть дробным) задает тактовую частоту развертки (частоту вывода точек на экран) в мегагерцах.
Далее следуют четыре целых числа (группа 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. Оставьте эти секции в том виде, как они созданы программой конфигурации.
7.3.3 Настройка /etc/X11/XF86Config
Теперь, когда вы знаете, как устроен файл XF86Config, определяющий настройки X сервера, и где какую настойку задавать, давайте подробно разберем, как его (X сервер) настроить, редактируя файл /etc/X11/XF86Config. Точнее, нашей целью пока что будет только получение на экране серого прямоугольника с крестиком-курсором посередине, а процедура запуска графической среды в целом будет рассматриваться позже.
Как было сказано выше, создать первоначальную версию файла /etc/X11/XF86Config можно с помощью программы Xconfigurator в 3 й версии XFree86 или командой:
[root]# /usr/X11R6/bin/XFree86 -configure
в 4–й версии XFree86. В последнем случае создается конфигурационный файл /root/XF86Config.new. Его можно опробовать с помощью команды
[root]# XFree86 -xf86config /root/XF86Config.new
явно указывая X-серверу, какой конфигурационный файл использовать. Но проще сразу перенести его в каталог /etc/X11 под именем XF86Config-4 и работать стандартным образом.
Итак, вы имеете какой-то вариант файла /etc/X11/XF86Config-4. Попробуйте просто запустить графический режим командой X (еще раз напомню, что это просто ссылка на сервер и если команда не работает, то ссылка должна быть создана, либо нужно вместо X указывать имя используемого сервера, может быть, даже с указанием полного пути). Если вам удалось запустить X-сервер, и вы увидели курсор посредине экрана, то, значит, вы можете пропустить оставшийся текст данного подраздела и перейти к разд. 7.4.
Если вы увидели черный экран или какие-то мелькающие полоски, то вернитесь в текстовый режим, нажав комбинацию <Ctrl>+<Alt>+<Backspace> (эта комбинация может выручить вас в случае многих затруднений с графическим режимом, так что рекомендую запомнить, что она позволяет завершить работу X-сервера, а, значит, и графического режима в целом). Однако не слишком торопитесь воспользоваться этой магической комбинацией, поскольку переход в графический режим требует определенного времени; я вначале несколько раз прерывал загрузку комбинацией <Ctrl>+<Alt>+<Backspace> и не мог понять, почему у меня графика не запускается, хотя вся причина заключалась в моей поспешности.
Однако, поскольку существует опасность повредить монитору неправильным заданием параметров, лучше не заниматься экcперементами с непредсказуемыми последствиями. Целесообразней вначале протестировать тот вариант файла, который был создан, и посмотреть, нет ли в нём явных ошибок. Для этого нужно воспользоваться командой
[root]# X -probeonly > probe.log 2>&1
Эта команда запускает X-сервер в тестовом режиме и выдает протокол в файл probe.log. После запуска этой команды на экране что-то помелькает, и вновь появится командная строка оболочки, а в текущем каталоге появится файл probe.log.
В этом файле много очень полезной информации, которую надо использовать при настройке X Window (отметим, что в файле протокола /var/log/XFree86.0.log содержится еще больше информации, но нам достаточно и того, что есть в probe.log). В первых строках файла probe.log содержатся сообщения о версии XFree86 и версии ядра Linux. Затем идет сообщение о том, куда записывается протокол работы (обычно это /var/log/XFree86.0.log), и какой конфигурационный файл используется (Помните, выше было сказано, что программа ищет этот файл в нескольких местах? Так что не лишне будет узнать, какой именно файл используется.).
(==) Log file: "/var/log/XFree86.0.log", Time: Mon Feb 12 17:20:25 2001
(==) Using config file: "/etc/X11/XF86Config-4"
Далее в probe.log идет небольшое пояснение тех служебных пометок, которые используются в этом файле в начале информационных строк:
- (--) — означает, что соответствующие значения получены путем тестирования;
- (**) — означает, что установки взяты из конфигурационного файла (в нашем случае — из /etc/X11/XF86Config-4);
- (++) — означает, что установки взяты из командной строки запуска;
- (==) — означает, что используются установки по умолчанию;
- (II) — за таким значком следует информационное сообщение;
- (WW) — за таким значком следует предупреждение;
- (EE) — за таким значком следует сообщение об ошибке.
Ошибки надо, естественно, постараться исправить путем соответствующей модификации файла /etc/X11/XF86Config-4. Но мы пока продолжим рассмотрение файла probe.log, в котором далее идет несколько чисто информационных строк (отметим, что в них отображена взаимосвязь секций конфигурационного файла):
(**) |-->Screen "Screen0" (0)
(**) | |-->Monitor "Monitor0"
(**) | |-->Device "Card0"
(**) |-->Input Device "Mouse0"
(**) |-->Input Device "Keyboard0"
(**) FontPath set to "unix/:-1"
(**) RgbPath set to "/usr/X11R6/lib/X11/rgb"
(**) ModulePath set to "/usr/X11R6/lib/modules"
(--) using VT number 7
и сообщения о том, какие модули загружаются, вроде следующего:
(II) Loading /usr/X11R6/lib/modules/fonts/libbitmap.a
(II) Module bitmap: vendor="The XFree86 Project" compiled for 4.0.2, module version = 1.0.0
После исправления тех ошибок, о которых сообщают строки, помеченные значком (EE), беремся за строки с предупреждениями. В частности, вы наверняка увидите строки следующего вида:
(WW) MGA(0): Monitor0: Using default hsync range of 28-33kHz
(WW) MGA(0): Monitor0: using default vrefresh range of 43-72Hz
вслед за которыми последует множество указаний на отбраковку каких-то видеорежимов монитора:
(WW) MGA(0): Default mode "1856x1392" deleted (hsync out of range)
Строки эти являются сообщениями о тех режимах, которые X-сервер не в состоянии отображать. О важности правильного выбора частот вертикальной и горизонтальной синхронизации было уже сказано неоднократно. Тем не менее, здесь появляется повод вспомнить об этом снова. Проверьте правильность их задания еще раз.
Снова выполнив после этого команду
[root]# X -probeonly > probe.log 2>&1
и заглянув в файл probe.log, вы увидите, какие режимы для вас недоступны (обычно это режимы с высоким разрешением, типа 1600 * 1200).
Давайте теперь отыщем в файле probe.log две строки следующего вида (цифры у вас, конечно, могут быть другими):
(--) MGA(0): Virtual size is 640x480 (pitch 640)
(**) MGA(0): Default mode "640x480": 25.2 MHz, 31.5 kHz, 60.0 Hz
а также строку вида (она находится где-то отдельно от двух предыдущих)
(**) MGA(0): Depth 24, (--) framebuffer bpp 24
В совокупности эти три строки указывают на то, что у вас (точнее, у меня) используется глубина цвета 24 и разрешение экрана "640 x 480" с частотой обновления картинки 60 Гц. Такие параметры совершенно неудовлетворительны, поэтому снова обращаемся к корректировке /etc/X11/XF86Config-4. Вначале надо задать нужную глубину цвета. Естественно, побольше. Предельно допустимое значение определяется объемом видеопамяти. О том, как его рассчитать, было сказано в предыдущем подразделе.
В файле /etc/X11/XF86Config-4 для каждой глубины цвета задается своя подсекция Display в секции Screen. Выбор нужной подсекции определяется строкой вида
DefaultColorDepth 24
секции Screen. Чтобы изменить разрешение экрана, например, на значение 1024 x 768, вставляем во все подсекции Display секции Screen строку
Modes "1024x768"
(разрешение выбираете по своему вкусу из стандартного ряда "640 x 350", "640 x 400", "640 x 480", "800 x 600", "1024 x 768", "1152 x 864", "1280 x 1024", "1600 x 1200" и т.д.). Можно ограничиться добавлением только одной такой строки в ту подсекцию Display, которая задана строкой DefaultDepth (или DefaultColorDepth). После этого снова выполняем команду
[root]# X -probeonly > probe.log 2>&1
чтобы убедиться, что нет грубых ошибок, и, если таковых нет, можем рискнуть и запустить графический режим командой X.
Надо иметь в виду, что отсутствие указаний на ошибки еще не гарантирует успешный запуск графического режима. Если результатом этой команды снова будет черный экран, то выйдите из графического режима с помощью комбинации <Ctrl>+<Alt>+<Backspace> и снова внимательно проанализируйте вывод команды
[root]# X -probeonly > probe.log 2>&1
Если графический режим не запускается, попытайтесь задать меньшее разрешение или меньшую глубину цвета. Обычно таким образом удается добиться успешного запуска графического режима при желаемом разрешении "1024 x 768".
Но может быть и иначе. У меня, например, на одном из компьютеров никак не удавалось запустить графический режим с разрешением "1024 x 768", графическая оболочка нормально загружалась только при разрешении "800 x 600", а при более высоком — загрузка осуществлялась, но экран дрожал и трясся. С этой проблемой мне удалось справиться путем явного задания строки Modeline в секции Monitor и подбора указанных в ней значений параметров. Делал я это следующим образом. Вначале, не обращая внимания на мерцание и дрожание экрана, запустил графический режим и программу xvidtune (о ней будет рассказано ниже). С ее помощью (кнопка "Show") определил, что по умолчанию используется режим, имеющий следующие параметры:
# 1024x768 @ 85 Hz, 68.31 kHz hsync
Modeline "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync
Я прописал эти две строки явным образом в секции Монитор и стал менять различные параметры строки Modeline. В конце концов, удалось определить, что причиной дрожания изображения являлась слишком высокая частота тактового генератора (DotClock) — 94.5 МГц. Уменьшение ее до 94 МГц привело к стабилизации изображения. Частота обновления экрана при этом снизилась до 84,55 Гц, но это, на мой взгляд, несущественно. Впрочем, при желании ее можно даже повысить, если еще поэкспериментировать с программой xvidtune. Я же этим ограничился, а окончательную корректировку изображения провел с помощью аппаратных средств монитора.
О программе xvidtune надо рассказать отдельно. Эта программа очень полезна для окончательного выбора оптимального видеорежима. Но запустить её можно только после того, как запустится графический режим. Выйдите в графический режим командой startx и запустите xvidtune в окне эмулятора терминала. Вы увидите вначале суровое предупреждение:
Рис. 7.2. Первое сообщение программы xvidtune
в котором сообщается, что ни разработчик программы, ни XFree86 Project Inc. не несут никакой ответственности за последствия ее применения. И если вы не понимаете, что делаете, то лучше не беритесь! Говорят, что на старых типах мониторов неправильной установкой параметров можно добиться того, что ваш монитор начнет дымиться (за счет неправильной установки частот синхронизации, насколько я понимаю). Но я надеюсь, что вы будете достаточно осторожны и семь раз подумаете, прежде чем применить какое-то значение режима. Если так, то вперед!
Закрываем окно с предупреждением (кнопка OK) и видим основное окно программы xvidtune (рис. 7.3).
Рис. 7.3. Основное окно программы xvidtune
Теперь вы можете начать настраивать изображение на мониторе. Если вы хотите сместить его вправо, то щелкните мышкой по кнопке Right (обратите внимание на изменение некоторых цифр в окне программы), а затем по кнопке Apply. Вы увидите, что изображение сдвинется вправо. Аналогично можно подвинуть его влево (кнопка Left), вверх (Up) и вниз (Down). Можно также увеличить размер изображения по горизонтали (Wider) или вертикали (Taller) и, наоборот, уменьшить (соответственно Narrower и Shorter).
Запомните, что первоначальные установки можно всегда вернуть нажатием клавиши R или щелчком по кнопке Restore. Эта возможность особенно полезна в тех случаях, когда необходимо восстановить стабильный режим работы после слишком кардинальных изменений, когда изображение на экране пропадает вовсе или начинает мелькать. Кнопка Fetch служит для запроса текущих значений установок режима работы монитора.
Кнопка Auto является переключателем, т. е. в режиме Auto (изображение кнопки инвертируется, т. е. отображается белыми буквами на черном фоне) нажатие на кнопки Up/Down/Right/Left и Wider/Narrower/Shorter/Taller приводит к немедленному (без щелчка по кнопке Apply) изменению размера или положения изображения.
Кнопка Test временно переключает установки в указанные значения. Кнопка Show служит для того, чтобы вывести выбранные значения на стандартный вывод (практически — в окно эмулятора терминала, из которого была запущена программа). Строка выводится в формате "Modeline", т. е. в том виде, как она должна быть записана в файле XF86Config. Кнопка Next переключает X-сервер в следующий видеорежим, а кнопка Prev — в предыдущий видеорежим (как они заданы в строке "Modes").
После того, как вы подобрали оптимальные с вашей точки зрения значения параметров видеорежима, запишите эти значения на бумагу. Не забудьте записать и приведенные в правом нижнем углу значения частот вертикальной и горизонтальной синхронизации. Формально они не нужны, но обычно пишутся в комментарии к строке "Modeline". На всякий случай нажмите кнопку Show и завершите работу программы нажатием кнопки Quit. После этого осталось проверить, правильно ли вы записали значения и вписать новую строку "Modeline" в файл XF86Config.
Теперь еще обратите внимание на то, что как бы мы не изменяли положение изображения, остается неизменным значение Pixel Clock в правом нижнем углу окна программы xvidtune. Этот параметр не поддается изменению в рамках программы xvidtune. Но после того, как выбраны размеры и положение изображения на экране, можно и нужно рассчитать наилучшее значение этого параметра. Принцип расчета прост: берем максимально допустимое для вашего монитора значение частоты горизонтальной синхронизации и делим его на размер фрейма по горизонтали (это последнее число в группе HTimings), выданное программой xvidtune. Это предельно допустимое значение частоты DotClock, которое может быть задано в строке "Modeline". Для перестраховки я немного округляю это значение в сторону уменьшения, чтобы не превысить максимальное значение частоты горизонтальной синхронизации. На этом формирование строки "Modeline" можно считать завершенным.
Аналогично можно подобрать значения для других таких строк (для других разрешений), но, честно признаюсь, что мне эксперименты по изменению видеорежимов через некоторое время наскучили. Я выбрал для себя один режим работы дисплея и успокоился. Думаю, что так же будет и у вас. Но прежде, чем затвердить свой выбор, создайте по одной подсекции Display для каждого из возможных значений глубины цвета. В файле XF86Config имеется как минимум одна такая подсекция, соответствующая глубине цвета 8 бит. Таких подсекций в секции Screen может быть несколько, поэтому не изменяйте существующую, а скопируйте ее (можно несколько раз) и подкорректируйте новые экземпляры в соответствии со своими пожеланиями. А выбор той подсекции, которая будет использоваться, осуществляется заданием нужной глубины цвета в параметре DefaultColorDepht секции Screen, таким вот примерно образом: DefaultColorDepht 24. Пример того, как может выглядеть секция Screen в итоге, был уже приведен выше, когда описывалась структура файла XF86Config, так что здесь не будем приводить его повторно.
На этом рассказ о настройке X-сервера закончен и можно перейти к вопросу о настройке графического режима в целом и как можно на этот процесс повлиять.