Настройка X-Window включает в себя четыре основных компонента:
В лучших традициях Unix, большая часть этих действий может быть сделана как администратором -- для всей системы сразу, так и конкретным пользователем -- для себя. Исключениями являются лишь X-сервер, конфигурацию которого (из соображений безопасности) может модифицировать только супервизор, и, в меньшей степени, русификация. Если компьютер в основном используется как персональный, т.е. одним человеком, то нет особой разницы, какую конфигурацию править -- общесистемную или свою персональную. Если же с компьютером работает несколько пользователей, то лучше потратить время на настройку общесистемной конфигурации. | ||
Все настройки X-сервера располагаются в файле /etc/X11/XF86Config. Этот файл состоит из нескольких секций, каждая из которых содержит настройки для определенной подсистемы -- шрифты, мышь, клавиатура, монитор, видеоадаптер. Общий вид секции такой: Section "имя-секции" данные ... EndSection Внутри секций могут быть подсекции -- они заключаются в "скобки" SubSection/EndSubsection. Большинство настроек одинаково для всех видеоадаптеров, но параметры, относящиеся непосредственно к видеоадаптеру (секция "Device") зависят от конкретной видеокарты. Стандартный файл XF86Config буквально напичкан комментариями, кроме того, стоит посмотреть man-страницу XF86Config(5) (именно "XF86Config", а не "xf86config"!), а при настройке параметров непосредственно видеоадаптера -- man-страницу по своему X-серверу.
| ||||||||
Секция "Files" Здесь определяется местоположение файла со списком цветов (директива RgbPath) и содержится список директорий, из которых X-сервер должен брать шрифты (директивы FontPath). Порядок директив FontPath имеет значение -- при подборе шрифтов по шаблонам (и по псевдонимам) они будут искаться именно в указанном порядке. Таким образом, если поставить директорию со шрифтами koi8 в начало списка, то во многих случаях вместо европейских будут использоваться русские шрифты. Секция "Keyboard" Здесь настраивается поведение клавиатуры -- действие клавиш <Alt>, <Ctrl> и <ScrollLock> и параметры расширения Xkb. Подробнее см. раздел "Русификация". Секция "Pointer" В этой секции настраиваются параметры мыши -- тип устройства, эмуляция трех кнопок. Обычно здесь все корректно настраивается при установке системы и менять ничего не нужно. Секция "Monitor" Здесь указывается "тип" монитора и его параметры. "Тип" -- это просто название (которое в принципе может быть произвольным), на которое ссылается секция "Screen", он указывается в директиве Identifier. Указываемые параметры -- диапазоны частот горизонтальной (HorizSync) и вертикальной (VertRefresh) развертки, а также список поддерживаемых видеорежимов (директивы ModeLine, имеющиеся в большом количестве). Диапазоны частот следует посмотреть в документации на монитор. Имеющиеся в стандартном файле директивы ModeLine покрывают большую часть мониторов. При сканировании этих директив X-сервер выбирает из видеорежимов с одинаковым именем (например, "800x600") тот, который дает наибольшую кадровую частоту (естественно, при этом учитываются только те видеорежимы, которые совместимы с параметрами монитора и видеоадаптера). Поэтому автоматически выбирается наилучший видеорежим. При использовании нестандартного монитора, или в случае, когда стандартная конфигурация не использует всех возможностей монитора, можно заглянуть в файл-базу данных по мониторам
Секций "Monitor" может быть несколько -- используется та из них, которая указана в секции "Screen". Секция "Device" В этой секции указываются параметры видеоадаптера. Обычно большую часть параметров X-сервер определяет сам, считывая их непосредственно из видеоадаптера. Поэтому чаще всего можно (и лучше всего!) все оставить как есть. В случае же, когда требуется изменить какие-либо настройки, следует посмотреть man-страницу по используемому X-серверу. Чтобы узнать, какой X-сервер используется, надо посмотреть, куда указывает символьный линк /etc/X11/X:
В данном примере X-сервер называется XF86_SVGA, и, следовательно, его описание находится в одноименной man-странице. Названия всех X-серверов начинаются на "XF86_". В приведенной ниже таблице перечислены наиболее часто использующиеся из них.
Практически для всех современных видеоадаптеров можно добавить параметр "power_saver", чтобы X-сервер автоматически отключал монитор при долгом бездействии. Пример секции "Device" (видеоадаптер Matrox Millenium II; выделен текст, добавленный после инсталляции):
В директиве Identifier указывается "имя" данной секции -- на которое затем будет ссылаться секция "Screen". Секций "Device" может быть несколько -- используется та из них, которая указана в секции "Screen". Секция "Screen" Здесь указывается, какую конфигурацию видеоадаптера и какой монитор следует использовать, а также параметры видеорежимов -- разрешение и глубина цвета. Пример секции "Screen":
Секция "Screen" всегда содержит директивы Driver, Device, Monitor, DefaultColorDepth и одну или несколько подсекций "Display", отличающихся глубиной цвета. В директиве Driver указывается, для какого X-сервера предназначена эта секция (секций "Screen" может быть несколько, что позволяет использовать один файл XF86Config с разными концигурациями аппаратуры). Для XF86_Mono используется вариант "vga2", для XF86_VGA16 -- "vga16", для XF86_SVGA -- "svga", а для остальных X-серверов (XF86_S3, XF86_Mach64 и т.д.), т.н. "ускоренных" (accelerated) -- "accel". Директивы Device и Monitor указывают, данные из каких секций "Device" и "Monitor" следует использовать. Необязательная директива DefaultColorDepth позволяет установить глубину цвета, которую X-сервер будет устанавливать по умолчанию (если ему в командной строке не указан параметр "-bpp"). Если DefaultColorDepth отсутствует, то используется 8бит/пиксел (конечно, XF86_Mono и XF86_VGA16 всегда используют 1 и 4бита/пиксел соответственно). В подсекциях "Display" указывается список видеорежимов, которые следует использовать для указанной глубины цвета. В директиве Modes указываются просто имена видеорежимов из секции "Monitor". Хотя видеорежимы могут носить произвольные имена (хоть "WinnieThePooh"), для удобства принято называть их "ШИРИНАxВЫСОТА". Порядок имен имеет значение -- при запуске X-сервер включает самый первый режим, а переключаться на остальные можно при помощи клавиш <Alt+Ctrl+Правый[+]> и <Alt+Ctrl+Правый[-]>. Поскольку работать чаще всего нужно в самом высоком разрешении, а на мешьшие переключаться для того, чтобы "рассмотреть детали", то следует располагать режимы по уменьшению. Инсталлятор же при установке системы упорядочивает список по увеличению, поэтому сразу после инсталляции этот список надо "перевернуть". | |||||||||||||||||||||||||||||||||||||
Для того, чтобы знать, как перенастроить поведение window manager'а, полезно представлять себе процесс запуска X-Window. startx (скрипт) | +-> xinit /| X<-+ +-> /etc/X11/xinit/xinitrc или ~/.xinitrc (скрипт) | +-> /etc/X11/xinit/Xclients или ~/.Xclients (скрипт) | +-> Разные программы (xclock, xeyes...) +-> window manager Значительная часть работы выполняется скриптами на языке shell, так что всегда можно посмотреть, что именно там делается, и при необходимости внести какие-то изменения. Скрипт startx запускает программу xinit, которая, в свою, очередь, первым делом запускает X-сервер, а затем запускает скрипт xinitrc. В нем выполняются некоторые настройки, и затем запускается скрипт Xclients, в котором запускаются некоторые "полезные" программы (часы, глаза, русификатор и т.д.) и, в самую последнюю очередь, window manager. Если в home-директории пользователя есть файл .xinitrc, то в качестве xinitrc будет использоваться он, иначе -- общесистемный /etc/X11/xinit/xinitrc. Аналогично если есть .Xclients, то используется он, иначе -- /etc/X11/xinit/Xclients. Такой подход позволяет любому пользователю при необходимости настроить поведение xinitrc и Xclients "под себя" -- достаточно скопировать общесистемный файл в свою home-директорию (добавив в начало имени "."), и внести в него нужные изменения. Последнее, что должен сделать скрипт Xclients -- запустить window manager. Стандартный файл Xclients устроен так, что он может запустить (при помощи программы RunWM) один из стандартных window manager'ов -- Fvwm, Fvwm2/Fvwm95, AfterStep и WindowMaker. При использовании же другого window manager'а надо вставить команду его запуска вместо имеющейся в Xclients "многоэтажной" конструкции. | ||
Большинство window manager'ов используют общесистемные файлы из директории /etc/X11/, а если в home-директории есть персональный файл конфигурации -- то его. Это позволяет скопировать общесистемный файл к себе и слегка модифицировать его под свои нужды. AfterStep и WindowMaker используют слегка другую идеологию -- при первом своем старте они копируют стандартные файлы конфигурации в пользовательскую директорию ~/GNUstep/, и далее все настройки выполняются только там. У этих двух window manager'ов есть еще одно существенное отличие. В них значительная часть настроек может выполняться интерактивно помощи меню. В других же window manager'ах надо непосредственно редактировать файлы конфигурации. Оба подхода имеют как достоинства, так и недостатки -- интерактивная настройка удобнее для "обычного пользователя", а редактирование общесистемных файлов -- для администратора, когда необходимо поддерживать работу многих пользователей сразу. Все window manager'ы используют разный синтаксис в файлах конфигурации, так что наилучший рецепт тут (к сожалению) -- посмотреть примеры файлов и почитать документацию. Вообще, конфигурирование window manager'ов и применяемые в этом концепции (функции, модули, стили) могли бы стать темой отдельной книги. Однако, большинство window manager'ов, используемых в Linux, являются "производными" от Fvwm/Fvwm2, которые, в свою очередь происходят от древнего Twm. Поэтому, разобравшись в конфигурации одного из них, довольно легко разобраться в другом. Кроме того, все window manager'ы считывают содержание директории
в которую большинство современных программ записывают краткий файл с информацией "о себе" -- название, командная строка, в какое меню поместить. Для примера рассмотрим простейшую настройку AnotherLevel. | ||||||||||||||||
В RedHat Linux в качестве window manager'а по умолчанию используется AnotherLevel. Вообще говоря, это не отдельная программа, а набор файлов конфигурации к Fvwm2, позволяющих имитировать поведение Fvwm95 и MWM. Они расположены в директории /etc/X11/AnotherLevel/ и имеют суффикс ".m4", указывающий на то, что они "пропускаются" через препроцессор M4. Реально при запуске Fvwm2 ему в качестве файла конфигурации указывается /etc/X11/AnotherLevel/fvwm2rc.m4 (или ~/.fvwm2rc.m4, если он есть), а он при помощи директивы include "включает" остальные файлы, в которых настраиваются разные аспекты -- цвета, меню, стили окон и т.д. Если скопировать один из этих файлов к себе в home-директорию, добавив в начало имени точку и убрав суффикс ".m4" (т.е. fvwm2rc.keys.m4->.fvwm2rc.keys), то он будет использоваться вместо общесистемного. К сожалению, это не относится к файлам из поддиректории decors/, в которых указываются цвета (хотя можно исправить и это, но потребуется слишком многое поменять). В таблице ниже приведен список основных файлов конфигурации AnotherLevel с краткими пояснениями. Последовательность их использования можно посмотреть в файле /etc/X11/AnotherLevel/fvwm2rc.m4 в директивах "readFile".
Следует заметить, что, поскольку для просмотра файлов используется препроцессор M4, то в них применяются довольно необычные кавычки -- в качестве открывающей используется обратный апостроф "`" (клавиша <`/~>), а в качестве закрывающей -- прямой "'" (клавиша <'/">). Большинству пользователей не требуется разбираться во всех аспектах работы Fvwm/AnotherLevel, а достаточно находить (например, при помощи grep) и исправлять отдельные параметры -- такие, как цвета, шрифты, клавиши. | ||||||||||||||||||||||
Весь интерфейс программ в X-Window состоит из объектов (в X-Window их называют "widgets" -- в дословном переводе "штучки"). Например, диалоговое окно поиска в программе Netscape содержит объекты строка ввода, два переключателя, полосу-разделитель и три кнопки.
Причем само окно поиска также является объектом, в который вложены те самые кнопочки. Иерархия объектов может быть и более сложной. Так, окно "Find", в свою очередь, принадлежит окну просмотра Netscape. Другой пример -- система меню: пункты меню расположены внутри объекта "выпадающее меню", тот принадлежит полоске меню в верхней части окна, а она -- самому окну. | ||||||
Что такое ресурсы У каждого объекта есть набор свойств: цвет символов, цвет фона, шрифт и т.д. Конкретный перечень свойств определяется типом объекта -- кнопка, переключатель, строка ввода и т.д. (для обозначения типа используется термин класс объекта). Вот эти свойства объектов и называются ресурсами. Некоторые свойства, такие, как состояние включено/выключено у объекта "переключатель", определяются и меняются в процессе работы программы. Другие же, такие, как цвета, шрифты и надписи (например, названия пунктов меню), можно настраивать. Ресурсы -- это одна из самых базовых концепций X-Window, придающая системе большую гибкость, но одновременно, несмотря на элегантность, и одна из самых трудных для понимания. С понятием ресурсов также тесно связаны понятия "Actions" и "Translations" ("действия" и "соответствия"), часто встречающиеся в man-страницах, но мы их затрагивать не будем. Отличие от MS Windows По своему назначению ресурсы в X-Window очень похожи на то, что обозначается тем же термином "ресурсы" в MS Windows. Но вся идеология работы с ресурсами в X в корне отличается. В частности, в MS Windows ресурсы являются частью бинарного исполняемого файла (например, winword.exe), и могут указываться или при компиляции программы, или меняться при помощи специальных редакторов, которые позволяют модифицировать бинарный файл (что, вообще говоря, является работой для квалифицированного программиста, и зачастую противоречит законам об авторских правах). В X-Window же ресурсы существуют отдельно от исполняемого кода программы, в виде текстовых файлов, и могут свободно меняться или в этих файлах, или даже при помощи ключей в командной строке. Таким образом, если в MS Windows, к примеру, перевод всех сообщений некоей программы на русский язык является "хакерской" задачей, то в X-Window подобное действие -- вполне стандартно, доступно любому пользователю и описано в документации. Как сослаться на ресурс Для того, чтобы изменить значение какого-либо ресурса, надо как-то на него "сослаться". Для этого надо указать объект, ресурс которого модифицируется, и название этого ресурса. Полной ссылкой на объект является полный "путь" к нему в "дереве" объектов -- список имен всех объектов от основного окна, которому принадлежит объект, до него самого, разделенных точками.
К примеру, последний пункт меню "VT Fonts" программы NXterm (это пункт "Selection") называется "fontsel", он содержится в меню "fontMenu", которое принадлежит окну "nxterm". Таким образом, полное имя этого объекта --
Ресурс, содержащий текст "Selection" в данном случае называется "Label". Таким образом, полная ссылка на ресурс в объекте --
Чтобы указать значение ресурса, надо после ссылки на ресурс указать через двоеточие его значение (пробел после двоеточия необязателен и служит только для читаемости):
Поскольку при помощи текста можно указать далеко не все (например,
как можно было бы закодировать в строке картинку или ссылку на
функцию?), то возможность модификации ресурсов ограничивается в
основном цветами, шрифтами, названиями (тексты меток и т.д), числами
(координаты, размеры и т.д.), булевскими значениями (True/False) и
геометрией. Впрочем, в практически всегда этого вполне достаточно (а
реально есть возможность указывать почти все ресурсы).
Шаблоны Чтобы, во-первых, не настраивать свойства каждого экземпляра, например, кнопки, по отдельности, а во-вторых, не указывать все время длинные цепочки объектов, существуют шаблоны. В понятие "шаблон" входит два компонента. Во-первых, вместо имени конкретного объекта можно указать имя класса, к которому принадлежит этот объект. К примеру, все объекты-пункты меню в NXterm (как, впрочем, и во всех программах на основе библиотеки Athena Widgets) принадлежат к классу "SmeBSB". Таким образом, чтобы поменять шрифт, которым отображаются все пункты меню в "VT Fonts" на "fixed", можно воспользоваться указанием ресурса
Во-вторых, вместо имени объекта или класса в качестве одного из компонентов ссылки на объект можно указать "*". Например, спецификация сменит шрифт во всех трех меню NXterm. Символ "*" можно указывать и вместо нескольких компонентов сразу, опуская точки: спецификация сменит шрифт во всех объектах класса "SmeBSB", к какой бы цепочке объектов они не принадлежали (впрочем, в NXterm других цепочек просто нет :). Другой пример -- спецификация позволяет изменить шрифт во всех объектах программы. В большинстве программ (к сожалению, в их число не входит NXterm) можно использовать еще более короткое указание:
При использовании шаблонов может возникнуть ситуация, когда к одному и тому же ресурсу подходят несколько шаблонов. К примеру, nxterm*SmeBSB.font: 7x14 nxterm.fontMenu.SmeBSB.font: fixed В таких ситуациях действует правило: используется та спецификация, которая наиболее точно ссылается на объект. В приведенном выше примере во всех меню, кроме меню "fontMenu" ("VT Fonts"), используется шрифт "7x14", а в "fontMenu" -- шрифт "fixed". | ||||||||||||
Названия ресурсов, вообще говоря, зависят от библиотеки объектов, на основе которой создана конкретная программа. Имена же объектов -- от конкретной программы. Поскольку редко когда требуется поменять значение "какого-нибудь" ресурса, то самое простое -- посмотреть так называемый app-defaults-файл для данной программы (см. ниже), в нем обычно перечислено большинство "интересных" ресурсов. Кроме того, в таблице ниже приведены самые часто используемые имена ресурсов для библиотек Athena Widgets и Motif.
| ||||||||||||||||
Мы довольно подробно рассмотрели синтаксис спецификации ресурсов, но остался вопрос -- а как и где, собственно, можно изменить значение ресурса для конкретной программы? Для ответа на этот вопрос приведем список источников (по мере уменьшения приоритета), из которых программа узнает значения ресурсов при запуске.
| ||
Самый простой способ изменить значение ресурса -- воспользоваться ключом "-xrm", которому указывается в качестве параметра спецификация ресурса. Поскольку она обычно содержит пробелы и/или символы "*", лучше указывать ее в одинарных кавычках:
Ключ "-xrm" можно указывать несколько раз:
Естественно, значение ресурса меняется только для данного экземпляра программы. | ||
Как видно из приведенного выше списка, значения ресурсов можно менять в огромном количестве мест. Поэтому для большей определенности приведем один из сценариев. Первым делом следует отладить спецификацию ресурса "методом проб и ошибок" при помощи ключа "-xrm". Если ресурс -- общий для многих программ (например, цвет фона), то следует поместить его спецификацию в файл .Xresources. При настройке для всех пользователей -- в общесистемный /etc/xinit/.Xresources, а любой пользователь может изменить свой личный ~/.Xresources. При настройке ресурсов конкретной программы следует поменять ее app-defaults-файл. Аналогично, при настройке для всех пользователей -- файл из /usr/X11R6/.../app-defaults/, а при персональной настройке любой пользователь может скопировать файл из .../app-defaults/ к себе в home-директорию и поправить под свой вкус; поскольку, хотя просматриваются оба файла, приоритет отдается настройкам из персонального. | ||
Базовые понятия и определения ресурсов имеются в man-странице по X (см. подраздел "RESOURCES"). Кроме того, подробное описание синтаксиса указания ресурсов и порядка, в котором они берутся из разных источников, есть в разделе 10.2 книги "X Toolkit Intrinsics Programming Manual" от O'Reilly & Associates (имеется в электронном виде в системе insight на компьютерах Silicon Graphics (в ИЯФ -- компьютер Sky)). | ||
В русификацию системы входят:
| ||
Это самое простое -- надо сделать в (обычно в /usr/X11R6/lib/X11/fonts/) директорию, содержащую русские шрифты в кодировке koi8-r и добавить ее к списку директорий со шрифтами в файле /etc/X11/XF86Config (директива FontPath в секции "Files"). В Internet есть множество мест, где лежит много вариантов русских шрифтов. Например, можно взять их по адресу http://www.inp.nsk.su/~bolkhov/teach/inpunix/soft/koi8fonts.tgz-- этот файл надо распаковывать, находясь в корневой директории -- внутри него все файлы уже находятся в usr/X11R6/lib/X11/fonts/75dpi.koi8/. Кроме того, шрифты семейства "Cronyx" входят в дистрибутив XFree86. В версии 3.3.2, поставляемой в составе RedHat 5.2 они содержатся непосредственно в пакете XFree86. В версии 3.3.3, расположенной в каталоге updates/, они перекочевали в отдельный пакет XFree86-cyrillic-fonts. | ||
Для русификации клавиатуры также существует множество вариантов. В частности, возможность смены раскладки клавиатуры предусмотрена в самой системе X-Window при помощи расширения Xkb, но вследствие очень нестандартных представлений авторов Xkb о русской кодировке его лучше отключать (или, из соображений совместимости с некоторыми пакетами (например, Applix), лучше оставлять включенным, но без русской раскладки). Лучше всего воспользоваться пакетом xruskb. Он лежит в разделе contrib, в ИЯФ для RedHat 5.x -- в NFS-директории по FTP она видна как ftp://rdist.inp.nsk.su/pub/Linux/contrib/libc6/i386/Для RedHat 4.2 вместо "libc6" следует смотреть в директории "libc5". Хотя в документации, прилагаемой к xruskb, есть довольно подробные инструкции, приведем один из простейших вариантов использования. Собственно, надо сделать три шага: установить пакет xruskb, отключить расширение X-сервера Xkb, и сделать так, чтобы русификатор запускался автоматически при старте X-Window. Отключение Xkb Для того, чтобы отключить Xkb, надо найти в файле /etc/X11/XF86Config закомментированную директиву XkbDisable и включить ее, убрав символ "#". Т.е. фрагмент текста
Настройка автоматического запуска русификатора Что интересно, хотя пакет называется xruskb, сама программа -- xrus. Русификатор можно запускать с единственным параметром -- именем файла, содержащего раскладку клавиатуры. Файл раскладки "ЙЦУКЕН" для koi8 в xruskb версии 1.5 называется а в версии 1.9 --
Таким образом, в версии 1.5 для запуска надо воспользоваться командой
Но ведь надо, чтобы это делалось автоматически при старте X-Window! Лучший способ -- поместить эту команду в начало файла /etc/X11/xinit/Xclients, непосредственно перед всеми командами. Переключать клавиатуру с русского на английский можно или щелчком левой кнопки мыши на пиктограмме "RUS/LAT" (она помещается в левый нижний угол экрана), или одновременным нажатием обеих клавиш <Shift> | ||||||||||
| ||