В.А.Костромин

ОС Linux на Вашем персональном компьютере

Купить в LinuxCenter
Закажите в LinuxCenter



Инсталляция и настройка XFree86[tm] версии 4.0.2

(продолжение, начало смотри здесь)

5. Настройка X-сервера из XFree86 версии 4

Итак, изложение руководства по установке, поставляемого вместе с XFree86 версии 4.0.2, на этом закончено. Установка тоже завершилась сообщением о полном успехе. Однако попытка запустить привычную команду startx окончилась у меня полной неудачей и появлением сообщения: "Fatal server error: no screens found". Причем такой результат получился на разных компьютерах. Начинаем разбираться...

Заглянув в каталог /etc/X11, обнаруживаем, что нового файла XF86Config там нет, там сохранен конфигурационный файл от предыдущей версии. Там также осталась неизмененной ссылка на сервер XF86_SVGA. Очевидно, что надо поправить ссылку и создать новый конфигурационный файл. Ссылку создаем командой

    ln -s /usr/X11R6/bin/XFree86 X
а для создания конфигурационного файла, как было сказано выше, существует три разных способа. Я решил последовательно опробовать все три.

После того, как я воспользовался утилитой xf86config для создания конфигурационного файла XF86Config и перезапустил систему, ничего не заработало (именно в этот момент я проверил упомянутую выше возможность возвращения к предыдущей версии XFree86 за счет восстановления каталогов /usr/X11R6 и /etc/X11). Я отнес эту неудачу за счет того, что утилита XF86Config создана еще для старых версий XFree86 и создает она файл XF86Config старого формата (а ведь формат этого файла изменился в версии 4).

Поэтому я попробовал воспользоваться утилитой xf86cfg. Эта утилита вроде должна работать в графическом режиме. У меня даже выводилась на краткий миг какая-то картинка, после чего монитор снова переключался в текстовый режим и выдавалось сообщение, что "для Вас создан конфигурационный файл /root/XF86Config.new. Но запуск графической оболочки (после перемещения XF86Config.new в каталог /etc/X11 под именем XF86Config) так и не привел к желаемому результату. Замечу кстати, что и после того, как мне удалось настроить X-ы, запуск утилиты xf86cfg тоже оканчивался безрезультатно, несмотря на то, что в man-странице к этой программе утверждается, что она предназначена для внесения изменений в текущую конфигурацию (make customization to the current configuration).

Тогда я попробовал третий способ - использовать опцию -configure X-сервера:

     XFree86 -configure
Эта команда молча отрабатывает, сообщая в конце, что создала новый конфигурационный файл /root/XF86Config.new. Ниже приводится файл /root/XF86Config.new, который сформировался у меня.
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"
	### Available Driver options are:-
        #Option     "SWcursor"
        #Option     "PciRetry"
        #Option     "NoAccel"
        #Option     "SetMClk"
        #Option     "MUXThreshold"
        #Option     "ShadowFB"
        #Option     "Rotate"
        #Option     "VideoKey"
        #Option     "NoMMIO"
        #Option     "NoPciBurst"
        #Option     "MMIOonly"
        #Option     "CyberShadow"
	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     1
	EndSubSection
	SubSection "Display"
		Depth     4
	EndSubSection
	SubSection "Display"
		Depth     8
	EndSubSection
	SubSection "Display"
		Depth     15
	EndSubSection
	SubSection "Display"
		Depth     16
	EndSubSection
	SubSection "Display"
		Depth     24
	EndSubSection
EndSection

Section "DRI"
EndSection
Вначале я, конечно, заглянул в этот файл. Что сразу обращает на себя внимание, по сравнению с таким же файлом предыдущей версии, - полное отсутствие комментариев (в 3-ей версии можно было пытаться разобраться в настройках с помощью только комментариев). Отсутствуют также строки "Modeline", которые раньше служили для задания режима работы монитора. Пришлось заглянуть в man XF86Config. Там написано следующее:

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

           Section  "SectionName"
               SectionEntry
               ...
           EndSection
Секции могут быть расположены в файле в произвольном порядке. Могут присутствовать следующие секции
           ServerLayout   Общие установки (Overall layout)
           InputDevice    Описания устройств ввода
           Screen         Конфигурация экрана
           Device         Описания графических карт
           Monitor        Описания монитора
           Modes          Описания видеорежимов
           Files          Пути к файлам
           ServerFlags    Опции сервера (Server flags)
           VideoAdaptor   Описание адаптера Xv (как сказано в man, никто 
			  не говорит, что это такое, даже если знает!)
           Module         Динамически загружаемые модули
           DRI            Конфигурация DRI
           Vendor         Установки для оборудования конкретных 
			  поставщиков (Vendor-specific configuration)
причем наличие всех секций не обязательно, но может существовать несколько разных секций одного типа (только они должны иметь уникальные идентификаторы). Секция ServerLayout имеет наивысший приоритет. Она определяет, какие устройства ввода/вывода будут использоваться в X-сессии. Устройства вывода обычно состоят из нескольких независимых компонент (графический адаптер и монитор), которые связываются воедино в секции Screen, на которую указывает ссылка в секции ServerLayout. Графический адаптер задается в секции Device, а монитор - в секции Monitor.

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

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

Полученный конфигурационный файл можно опробовать с помощью команды

     XFree86 -xf86config /root/XF86Config.new
но, я сразу перенес его в каталог /etc/X11 под именем XF86Config и провел попытку запустить графический режим, окончившуюся неудачей (так и хочется сказать, "как и следовало ожидать", хотя ожидать всегда хочется другого).

Этот файл и будем редактировать для настройки графической системы. Но прежде давайте посмотрим, что же в нем неправильно. Для этого воспользуемся командой

[root]# X -probeonly > probe.log 2>&1
Эта команда запускает систему X Window в тестовом режиме и выдает протокол в файл probe.log. Надо заметить, что в такой форме команда сработает только при условии, что Вы создали ссылку с именем X, как это было сказано в начале настоящего раздела. Если такая ссылка не была создана, то вместо X надо указывать XFree86 (может быть, даже с указанием пути). После запуска этой команды на экране что-то помелькает и вновь появится командная строка оболочки, а в текущем каталоге появится файл probe.log.

В этом файле масса очень полезной информации, которую надо использовать при настройке X-ов (отметим, что в файле протокола /var/log/XFree86.0.log содержится еще больше информации, но нам достаточно и того, что есть в probe.log). В первых строках файла probe.log содержатся сообщения о версии XFree86 и версии ядра Линукс. Затем идет сообщение о том, куда записывается протокол работы (у меня /var/log/XFree86.0.log) и какой конфигурационный файл используется (/etc/X11/XF86Config).

(==) Log file: "/var/log/XFree86.0.log", Time: Mon Feb 12 17:20:25 2001
(==) Using config file: "/etc/X11/XF86Config"

Далее в probe.log идет небольшое пояснение тех служебных пометок, которые используются в этом файле в начале информационных строк:

  • (--) - означает, что соответствующие значения получены путем тестирования,
  • (**) - означает, что установки взяты из конфигурационного файла (/etc/X11/XF86Config),
  • (++) - означает, что установки взяты из командной строки запуска,
  • (==) - означает, что используются установки по умолчанию,
  • (II) - за таким значком следует информационное сообщение,
  • (WW) - за таким значком следует предупреждение,
  • (EE) - за таким значком следует сообщение об ошибке.

    Сообщения об ошибках надо, естественно, постараться убрать путем соответствующей модификации файла "/etc/X11/XF86Config". Но мы пока продолжим рассмотрение файла probe.log, в котором далее идет несколько чисто информационных строк (отметим, что в них отображена взаимосвязь секций конфигурационного файла):

    (**) |-->Screen "Screen0" (0)
    (**) |   |-->Monitor "Monitor0"
    (**) |   |-->Device "Card0"
    (**) |-->Input Device "Mouse0"
    (**) |-->Input Device "Keyboard0"
    (**) FontPath set to "unix/:-1,/usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/Speedo/,/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/CID/,/usr/X11R6/lib/X11/fonts/75dpi/,/usr/X11R6/lib/X11/fonts/100dpi/"
    (**) 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
    
    Поскольку о модулях я пока ничего сказать не могу, то я оставил секцию "Module" без изменения, несмотря на то, что один из модулей сообщал об ошибке:
    (WW) Warning, couldn't open module mga_hal
    (EE) MGA: Failed to load module "mga_hal" (module does not exist, 0)
    
    Но на другие сообщения с кодом (EE) надо, естественно, обратить самое пристальное внимание и постараться ошибки исправить. Не имея опыта, я не могу дать более конкретных рекомендаций о том как исправлять те или иные ошибки. После исправления явных ошибок беремся за строки с предупреждениями. В частности, стоит проверить, нет ли строк следующего вида:
    (WW) MGA(0): Monitor0: Using default hsync range of 28-33kHz
    (WW) MGA(0): Monitor0: using default vrefresh range of 43-72Hz
    
    вслед за которыми наверняка встретится множество указаний на отбраковку каких-то видеорежимов монитора, поскольку частоты вертикальной и горизонтальной синхронизации заданы неправильно. Правильные значения надо найти в спецификации на Ваш монитор, после чего вставить в секцию "Monitor" файла /etc/X11/XF86Config две строки с указанием правильных интервалов:
    	HorizSync	30-70
    	VertRefresh	50-120
    
    Снова выполнив после этого команду
    X -probeonly >probe.log 2>&1
    
    и заглянув в файл probe.log, Вы увидите, что число строк с отбракованными видеорежимами существенно уменьшилось, а значит, увеличились Ваши возможности по выбору удобного для Вас видеорежима. Давайте его зададим. Сначала снова заглянем в файл 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 и разрешение экрана "640x480" с частотой обновления картинки 60 Гц. Такие параметры совершенно неудовлетворительны, поэтому снова обращаемся к корректировке /etc/X11/XF86Config. Вначале надо задать нужную глубину цвета. Естественно, побольше. Предельно допустимое значение определяется объемом видеопамяти. О том, как его рассчитать, можете посмотреть в разделе о конфигурировании X-сервера для 3-ей версии XFree.

    В файле /etc/X11/XF86Config для каждой глубины цвета задается своя подсекция "Display" в секции "Screen". Выбор нужной подсекции определяется строкой вида "DefaultDepth 24" секции "Screen". Чтобы изменить разрешение экрана, вставляем во все подсекции "Display" ("SubSection "Display" ) секции "Screen" строку

        Modes  "1024x768"
    
    (разрешение выбираете по своему вкусу из стандартного ряда "640x350", "640x400", "640x480", "800x600", "1024x768", "1152x864", "1280x1024", "1600x1200" и т.д.). Можно ограничиться добавлением только одной такой строки в ту подсекцию "Display", которая задана строкой "DefaultDepth". После этого снова сначала выполняем команду
    X -probeonly >probe.log 2>&1
    
    
    чтобы убедиться, что нет грубых ошибок, и, если таковых нет, можем рискнуть и запустить графический режим командой startx.

    Надо иметь в виду, что отсутствие указаний на ошибки еще не гарантирует успешного запуска графического режима. Если после startx Вы увидите черный экран, то выйдите из графического режима с помощью комбинации [Ctrl]-[Alt]-[Backspace] и снова внимательно проанализируйте вывод команды

    X -probeonly >probe.log 2>&1
    
    Если графический режим не запускается, попытайтесь задать меньшее разрешение или меньшую глубину цвета. Мне таким образом удалось добиться на одном из компьютеров успешного запуска графического режима при желаемом разрешении "1024x768" (правда, KDE не запустилась, но об этом чуть позже). Но на другом компьютере при этом разрешении ничего не получалось, графическая оболочка нормально загружалась только при разрешении "800x600", а при более высоком загрузка осуществлялась, но экран дрозжал и трясся.

    С этой проблемой мне удалось справиться путем явного задания строки 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. Я же этим ограничился, а окончательную корректировку изображения провел с помощью аппаратных средств монитора.

    6. Проблемы со шрифтами и запуском KDE

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

    Начнем, пожалуй со шрифтов. При решении проблемы шрифтов я обратился к собственным заметкам об установке фонтов в Линукс. Если хотите подробно, то прочитайте эти заметки или их печатный вариант в журнале "BYTE/Россия" (# 12 за 2000 год). А если вкратце, то проделайте следующее:

    1. Проверьте, что фонты у Вас обслуживаются фонт-сервером xfs, то есть что этот фонт-сервер запущен, для чего выполните команду
      [root]# ps ax | grep xfs
      
      Вы должны увидеть строку примерно такого вида:
        401 ?        S      0:04 xfs -droppriv -daemon -port -1 
      
      По этой строке можно определить, какой порт использует эта программа. Этот же номер должен быть указан в строке вида
                      FontPath "unix/:port_number" 
      
      в секции "Files" в конфигурационном файле X-сервера /etc/X11/XF86Config.

    2. Загляните в файл /etc/X11/XF86Config и найдите секцию "Files". При установке XFree четвертой версии в этой секции прописываются пути к файлам фонтов (строки "FontPath"). Если работа с фонтами организована через фонт-сервер, то эти строки здесь не нужны. Можете их просто удалить (только не удаляйте строки "RgbPath" и "ModulePath"), заменив всего одной строкой
                      FontPath "unix/:-1" 
      
      (номер порта проверьте!). В заключение приведу секцию "Files" из /etc/X11/XF86Config в том виде, какой она приняла у меня. В ней всего три строки:
      		RgbPath		"/usr/X11R6/lib/X11/rgb"
      		ModulePath	"/usr/X11R6/lib/modules"
                      FontPath 	"unix/:-1" 
      
      Я не стал бездумно удалять строки с указаниями путей к фонтам, появмвшиеся при установке XFree версии 4, а проверил вначале, что все указанные в них пути перечислены в конфигурационном файле фонт-сервера /etc/X11/fs/config. В моем случае оказалось, что все они уже были там указаны, у Вас может оказаться иначе. Заодно проверьте, что все каталоги фонтов, указанные в /etc/X11/fs/config, существуют и в них имеются файлы fonts.dir.

    3. Что еще надо проверить, на мой взгляд, особенно если Вы в старую версию X Window устанавливали какие-то нестандартные фонты, так это перенести все такие фонты из резервного каталога (Вы же сделали его перед инсталляцией XFree 4 ?!) и подправить соответственно файлы fonts.dir, fonts.alias.
    Этого достаточно для того, чтобы восстановились все фонты, которыми Вы привыкли пользоваться.

    Теперь восстановим KDE. Может быть у Вас проблем и нет, а у меня на обеих компьютерах после установки XFree86 4.0.2 KDE перестал загружаться по startx. На одном вылез оконный менеджер twm, на другом - уж не помню что, кажется GNOME.

    Первым делом проверьте содержимое файла /etc/sysconfig/desktop. В нем достаточно иметь одно слово: "KDE", хотя у меня там стоит "DESKTOP="KDE", что тоже не мешает. Содержимое этого файла проверяется при запуске скрипта startx. Скрипт startx находится в каталоге /usr/X11R6/bin. Думаю, что если Вы до установки новой версии XFree использовали KDE, то проще всего файл startx восстановить из сделанной Вами резервной копии. Если такой резервной копии у Вас нет, то придется подредактировать startx заново. Некоторые рекомендации на эту тему Вы можете найти у меня в разделе о настройке X Window.

    Однако у меня после этого осталась еще одна нерешенная проблема: в окне программы "Консоль" в KDE перестал работать переключатель режимов работы клавиатуры (рус/лат). Впрочем, не работал он и текстовых редакторах. В обычной текстовой консоли переключатель (Ctrl-Shift) работал без проблем. Бился я с этой проблемой довольно долго и решение нашел такое.

    Во-первых, в секцию "InputDevice" конфигурационного файла /etc/X11/XF86Config я вписал следующие строки:

    	Option   "XkbKeycodes"     "xfree86"
    	Option   "XkbTypes"        "default"
    	Option   "XkbCompat"       "default"
    	Option   "XkbSymbols"      "us(pc102)"
    	Option   "XkbGeometry"     "pc"
    	Option   "XkbRules"        "xfree86"
    	Option   "XkbOptions"      "grp:ctrl_shift_toggle"
    	Option   "XkbModel"        "pc102"
    	Option   "XkbLayout"       "ru"
    
    (фактически я взял их из файла /etc/X11/XF86Config для 3-ей версии, только добавил в начало каждой строки слово Option и добавил необходимые кавычки).

    Затем я начал экспериментировать с порядком расположения строк с указаниями путей к фонтам с файле /etc/X11/fs/config. Фонт-сервер ищет нужный фонт в этих каталогах последовательно. В конце концов мне удалось найти такой порядок перечисления путей, при котором переключатель (Ctrl-Shift) заработал.

    Но осталась еще проблема с клавишей Backspace: ее нажатие не имело никакого эффекта при редактировании файлов во встроенном редакторе программы Midnight Commander (Cooledit). При этом в командной строке программы Midnight Commander клавиша Backspace работает вполне корректно, а после запуска редактора по F4 - работать перестает.


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

    (25.04.01) Вот и получил первое дополнение. Привожу полностью.
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
        Date: Вт, 24 апр 2001  12:44:04
        From: Alexander Vasiljev 
          To: kos@nbrt.kazan.su
     Subject: re:XFree4-install
    ----------------------------------------------------------------------------
    
            Здравствуйте, В.А.
            Прочитал Вашу замечательную статью об инсталляции новых иксов и
    попробовал повторить процедуру на своей машине (RH 7.0, XFree 4.0.0).
            Автоматическая установка прошла успешно, хотя после неё сразу
    ничего не заработало ;). 4.0.0 "понимали" XF86config старого формата или
    по крайней мере молчаливо соглашались его использовать. С новыми иксами
    пришлось XFree86 -configure. Видеокарточку и монитор распознали правильно
    (S3 Trio3D/2X & ViewSonic соответственно), для видеокарточки в конфиге
    любезно прописали закомментированные опции настройки. Вставил DefaultDepth
    24 (по умолчанию было - 8). Чуть увеличил HorizSync для монитора. Из
    старого XF86 перенёс
            Option  "XkbModel"      "pc104"
            Option  "XkbLayout"     "ru(winkeys)"
            Option  "XkbOptions"    "grp:ctrl_shift_toggle"
    и настройки для колёсной мыши (тоже с добавлением "Option" в начале). В
    результате иксы стали запускаться, графическая оболочка - нет. Покопался в
    startx и скопировал старые (от RH 7.0)
    /usr/X11R6/bin/startx
    /usr/X11R6/lib/X11/xinit/xinitrc
    на место. Всё заработало. А апгрейд с 4.0.2 до 4.0.3 прошёл вообще без
    каких-либо проблем, для него понадобилось только sh Xinstall.sh.
            с наилучшими,
            Александр Васильев.
    

    Вернуться к оглавлению "Виртуальной энциклопедии"

    Закажите через Интернет:
    AVP для Linux лицензия на 1 год (1-User Pack)
    Купить в LinuxCenter

    В.А.Костромин
    Последние изменения
    в содержание файла внесены
    9 марта 2001 г.
    TopList Aport Ranker