Настройка X-Window


Введение

Общие соображения

Настройка X-Window включает в себя четыре основных компонента:

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

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

Если же с компьютером работает несколько пользователей, то лучше потратить время на настройку общесистемной конфигурации.


Конфигурация X-сервера

Файл XF86Config и его структура

Все настройки X-сервера располагаются в файле /etc/X11/XF86Config.

Этот файл состоит из нескольких секций, каждая из которых содержит настройки для определенной подсистемы -- шрифты, мышь, клавиатура, монитор, видеоадаптер.

Общий вид секции такой:

Section "имя-секции"
  данные
  ...
EndSection

Внутри секций могут быть подсекции -- они заключаются в "скобки" SubSection/EndSubsection.

Большинство настроек одинаково для всех видеоадаптеров, но параметры, относящиеся непосредственно к видеоадаптеру (секция "Device") зависят от конкретной видеокарты.

Стандартный файл XF86Config буквально напичкан комментариями, кроме того, стоит посмотреть man-страницу XF86Config(5) (именно "XF86Config", а не "xf86config"!), а при настройке параметров непосредственно видеоадаптера -- man-страницу по своему X-серверу.

Предупреждение. Неправильное изменение настроек видеоадаптера и монитора может привести к выходу монитора из строя!

Некоторые секции файла конфигурации

Основные секции файла XF86Config
СекцияНастраиваемая подсистема
Files Пути -- в основном директории со шрифтами
KeyboardКлавиатура
Pointer Мышь или иное указательное устройство
Monitor Монитор
Device Видеоадаптер
Screen Экран -- разрешение и глубина цвета

Секция "Files"


Здесь определяется местоположение файла со списком цветов (директива RgbPath) и содержится список директорий, из которых X-сервер должен брать шрифты (директивы FontPath).

Порядок директив FontPath имеет значение -- при подборе шрифтов по шаблонам (и по псевдонимам) они будут искаться именно в указанном порядке. Таким образом, если поставить директорию со шрифтами koi8 в начало списка, то во многих случаях вместо европейских будут использоваться русские шрифты.

Секция "Keyboard"


Здесь настраивается поведение клавиатуры -- действие клавиш <Alt>, <Ctrl> и <ScrollLock> и параметры расширения Xkb. Подробнее см. раздел "Русификация".

Секция "Pointer"


В этой секции настраиваются параметры мыши -- тип устройства, эмуляция трех кнопок.

Обычно здесь все корректно настраивается при установке системы и менять ничего не нужно.

Секция "Monitor"


Здесь указывается "тип" монитора и его параметры. "Тип" -- это просто название (которое в принципе может быть произвольным), на которое ссылается секция "Screen", он указывается в директиве Identifier.

Указываемые параметры -- диапазоны частот горизонтальной (HorizSync) и вертикальной (VertRefresh) развертки, а также список поддерживаемых видеорежимов (директивы ModeLine, имеющиеся в большом количестве).

Диапазоны частот следует посмотреть в документации на монитор.

Имеющиеся в стандартном файле директивы ModeLine покрывают большую часть мониторов. При сканировании этих директив X-сервер выбирает из видеорежимов с одинаковым именем (например, "800x600") тот, который дает наибольшую кадровую частоту (естественно, при этом учитываются только те видеорежимы, которые совместимы с параметрами монитора и видеоадаптера). Поэтому автоматически выбирается наилучший видеорежим.

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

/usr/X11R6/lib/X11/doc/Monitors

Секций "Monitor" может быть несколько -- используется та из них, которая указана в секции "Screen".

Секция "Device"


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

В случае же, когда требуется изменить какие-либо настройки, следует посмотреть man-страницу по используемому X-серверу. Чтобы узнать, какой X-сервер используется, надо посмотреть, куда указывает символьный линк /etc/X11/X:

bobby:~# ls -l /etc/X11/X
lrwxrwxrwx   1 root     root           29 Dec  9 21:02 /etc/X11/X ->
../../usr/X11R6/bin/XF86_SVGA

В данном примере X-сервер называется XF86_SVGA, и, следовательно, его описание находится в одноименной man-странице.

Названия всех X-серверов начинаются на "XF86_". В приведенной ниже таблице перечислены наиболее часто использующиеся из них.

Некоторые X-серверы
X-серверТип видеоадаптера
XF86_S3 На основе чипа S3 (кроме S3Virge).
XF86_S3V S3 Virge.
XF86_VGA16 Стандартный 16-цветный VGA -- работает с любыми VGA-совместимыми адаптерами.
XF86_Mono Монохромный -- работает с любыми видеоадаптерами.
XF86_Mach32На основе чипа ATI Mach32.
XF86_Mach64На основе чипа ATI Mach64 (в том числе многие адаптеры от ASUS).
XF86_i740 На основе чипа Intel i740 (в том числе последние модели от ASUS, в названии которых присутствует "740").
XF86_SVGA Большая часть остальных SVGA-совместимых адаптеров -- в том числе Cirrus Logic, Diamond, Matrox, Riva TNT, SiS, Trident и многие другие.
Этот X-сервер может работать практически с любым SVGA-адаптером, включая S3, S3Virge и ATI.

Практически для всех современных видеоадаптеров можно добавить параметр "power_saver", чтобы X-сервер автоматически отключал монитор при долгом бездействии.

Пример секции "Device" (видеоадаптер Matrox Millenium II; выделен текст, добавленный после инсталляции):

Section "Device"
    Identifier  "My Video Card"
    VendorName  "Unknown"
    BoardName   "Unknown"
    Option      "power_saver"
    #VideoRam    4096
    # Insert Clocks lines here if appropriate
EndSection

В директиве Identifier указывается "имя" данной секции -- на которое затем будет ссылаться секция "Screen".

Секций "Device" может быть несколько -- используется та из них, которая указана в секции "Screen".

Секция "Screen"


Здесь указывается, какую конфигурацию видеоадаптера и какой монитор следует использовать, а также параметры видеорежимов -- разрешение и глубина цвета.

Пример секции "Screen":

# The Colour SVGA server

Section "Screen"
    Driver      "svga"
    # Use Device "Generic VGA" for Standard VGA 320x200x256
    #Device      "Generic VGA"
    Device      "My Video Card"
    Monitor     "ViewSonic PT775"
    DefaultColorDepth 32
    Subsection "Display"
        Depth       8
        # Omit the Modes line for the "Generic VGA" device
        Modes       "800x600" "640x480"
        ViewPort    0 0
        # Use Virtual 320 200 for Generic VGA
        Virtual     800 600
    EndSubsection
    Subsection "Display"
        Depth       16
        Modes       "1600x1200" "1152x864" "1024x768" "800x600" "640x480"
        ViewPort    0 0
        Virtual     1600 1200
    EndSubsection
    Subsection "Display"
        Depth       32
        Modes       "1152x864" "1024x768" "800x600" "640x480"
        ViewPort    0 0
        Virtual     1152 864
    EndSubsection
EndSection

Секция "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

Для того, чтобы знать, как перенастроить поведение 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'ов

Расположение файлов конфигурации некоторых window manager'ов
WMФайл или директория/
fvwm /etc/X11/fvwm/system.fvwmrc
~/.fvwmrc
fvwm2 /etc/X11/fvwm2/system.fvwm2rc
~/.fvwm2rc
AnotherLevel/etc/X11/AnotherLevel/
~/.fvwm2rc*.m4
AfterStep ~/GNUstep/Library/AfterStep/
WindowMaker ~/GNUstep/Library/WindowMaker/
twm /etc/X11/twm/system.twmrc
~/.twmrc

Большинство window manager'ов используют общесистемные файлы из директории /etc/X11/, а если в home-директории есть персональный файл конфигурации -- то его. Это позволяет скопировать общесистемный файл к себе и слегка модифицировать его под свои нужды.

AfterStep и WindowMaker используют слегка другую идеологию -- при первом своем старте они копируют стандартные файлы конфигурации в пользовательскую директорию ~/GNUstep/, и далее все настройки выполняются только там.

У этих двух window manager'ов есть еще одно существенное отличие. В них значительная часть настроек может выполняться интерактивно помощи меню. В других же window manager'ах надо непосредственно редактировать файлы конфигурации. Оба подхода имеют как достоинства, так и недостатки -- интерактивная настройка удобнее для "обычного пользователя", а редактирование общесистемных файлов -- для администратора, когда необходимо поддерживать работу многих пользователей сразу.

Все window manager'ы используют разный синтаксис в файлах конфигурации, так что наилучший рецепт тут (к сожалению) -- посмотреть примеры файлов и почитать документацию. Вообще, конфигурирование window manager'ов и применяемые в этом концепции (функции, модули, стили) могли бы стать темой отдельной книги. Однако, большинство window manager'ов, используемых в Linux, являются "производными" от Fvwm/Fvwm2, которые, в свою очередь происходят от древнего Twm. Поэтому, разобравшись в конфигурации одного из них, довольно легко разобраться в другом.

Кроме того, все window manager'ы считывают содержание директории

/etc/X11/wmconfig/

в которую большинство современных программ записывают краткий файл с информацией "о себе" -- название, командная строка, в какое меню поместить.

Для примера рассмотрим простейшую настройку AnotherLevel.

Конфигурация 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".

Файлы конфигурации AnotherLevel
ФайлНазначение
fvwm2rc.defines Некоторые глобальные определения -- шрифты, стили заголовков окон, надо ли издавать звуки при операциях с окнами и т.д.
fvwm2rc.macros Определения макросов m4, используемых далее в других файлах.
fvwm2rc.decors Декорирование -- как должны выглядеть окна, пиктограммы, меню; здесь же "включаются" файлы из поддиректории decors/.
fvwm2rc.functions"Функции" -- что делать при сворачивании окна в пиктограмму, при перемещении его и т.д.
fvwm2rc.keys Привязки комбинаций клавиш
fvwm2rc.menus Определения меню
fvwm2rc.defstylesСтили окон
fvwm2rc.modules Настройки для модулей (отдельных подпрограмм)
fvwm2rc.init Действия, выполняемые при запуске/перезапуске window manager'а

Следует заметить, что, поскольку для просмотра файлов используется препроцессор M4, то в них применяются довольно необычные кавычки -- в качестве открывающей используется обратный апостроф "`" (клавиша <`/~>), а в качестве закрывающей -- прямой "'" (клавиша <'/">).

Большинству пользователей не требуется разбираться во всех аспектах работы Fvwm/AnotherLevel, а достаточно находить (например, при помощи grep) и исправлять отдельные параметры -- такие, как цвета, шрифты, клавиши.


Настройка X-программ: ресурсы -- глобальные, личные

Иерархия окон

Весь интерфейс программ в X-Window состоит из объектов (в X-Window их называют "widgets" -- в дословном переводе "штучки"). Например, диалоговое окно поиска в программе Netscape содержит объекты строка ввода, два переключателя, полосу-разделитель и три кнопки.

Окно "Find" в Netscape
Дерево объектов окна "Find"
программы NXterm

Причем само окно поиска также является объектом, в который вложены те самые кнопочки. Иерархия объектов может быть и более сложной. Так, окно "Find", в свою очередь, принадлежит окну просмотра Netscape. Другой пример -- система меню: пункты меню расположены внутри объекта "выпадающее меню", тот принадлежит полоске меню в верхней части окна, а она -- самому окну.

Понятие ресурсов

Что такое ресурсы


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

Некоторые свойства, такие, как состояние включено/выключено у объекта "переключатель", определяются и меняются в процессе работы программы.

Другие же, такие, как цвета, шрифты и надписи (например, названия пунктов меню), можно настраивать.

Ресурсы -- это одна из самых базовых концепций X-Window, придающая системе большую гибкость, но одновременно, несмотря на элегантность, и одна из самых трудных для понимания. С понятием ресурсов также тесно связаны понятия "Actions" и "Translations" ("действия" и "соответствия"), часто встречающиеся в man-страницах, но мы их затрагивать не будем.

Отличие от MS Windows


По своему назначению ресурсы в X-Window очень похожи на то, что обозначается тем же термином "ресурсы" в MS Windows. Но вся идеология работы с ресурсами в X в корне отличается.

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

В X-Window же ресурсы существуют отдельно от исполняемого кода программы, в виде текстовых файлов, и могут свободно меняться или в этих файлах, или даже при помощи ключей в командной строке.

Таким образом, если в MS Windows, к примеру, перевод всех сообщений некоей программы на русский язык является "хакерской" задачей, то в X-Window подобное действие -- вполне стандартно, доступно любому пользователю и описано в документации.

Как сослаться на ресурс


Для того, чтобы изменить значение какого-либо ресурса, надо как-то на него "сослаться". Для этого надо указать объект, ресурс которого модифицируется, и название этого ресурса.

Полной ссылкой на объект является полный "путь" к нему в "дереве" объектов -- список имен всех объектов от основного окна, которому принадлежит объект, до него самого, разделенных точками.

Сокращенное дерево объектов
программы NXterm
Меню выбора шрифтов
программы NXterm

К примеру, последний пункт меню "VT Fonts" программы NXterm (это пункт "Selection") называется "fontsel", он содержится в меню "fontMenu", которое принадлежит окну "nxterm". Таким образом, полное имя этого объекта --

nxterm.fontMenu.fontsel

Ресурс, содержащий текст "Selection" в данном случае называется "Label". Таким образом, полная ссылка на ресурс в объекте --

nxterm.fontMenu.fontsel.Label
Предупреждение. Заглавные и маленькие буквы как в названиях объектов, так и в названиях ресурсов различаются!

Чтобы указать значение ресурса, надо после ссылки на ресурс указать через двоеточие его значение (пробел после двоеточия необязателен и служит только для читаемости):

nxterm.fontMenu.fontsel.Label: Current selection

Поскольку при помощи текста можно указать далеко не все (например, как можно было бы закодировать в строке картинку или ссылку на функцию?), то возможность модификации ресурсов ограничивается в основном цветами, шрифтами, названиями (тексты меток и т.д), числами (координаты, размеры и т.д.), булевскими значениями (True/False) и геометрией. Впрочем, в практически всегда этого вполне достаточно (а реально есть возможность указывать почти все ресурсы).

Шаблоны


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

В понятие "шаблон" входит два компонента.

Во-первых, вместо имени конкретного объекта можно указать имя класса, к которому принадлежит этот объект. К примеру, все объекты-пункты меню в NXterm (как, впрочем, и во всех программах на основе библиотеки Athena Widgets) принадлежат к классу "SmeBSB". Таким образом, чтобы поменять шрифт, которым отображаются все пункты меню в "VT Fonts" на "fixed", можно воспользоваться указанием ресурса

nxterm.fontMenu.SmeBSB.font: fixed

Во-вторых, вместо имени объекта или класса в качестве одного из компонентов ссылки на объект можно указать "*". Например, спецификация

nxterm.*.SmeBSB.font: fixed
сменит шрифт во всех трех меню NXterm.

Символ "*" можно указывать и вместо нескольких компонентов сразу, опуская точки: спецификация

nxterm*SmeBSB.font: fixed
сменит шрифт во всех объектах класса "SmeBSB", к какой бы цепочке объектов они не принадлежали (впрочем, в NXterm других цепочек просто нет :).

Другой пример -- спецификация

nxterm*font: fixed
позволяет изменить шрифт во всех объектах программы.

В большинстве программ (к сожалению, в их число не входит NXterm) можно использовать еще более короткое указание:

*font: fixed

При использовании шаблонов может возникнуть ситуация, когда к одному и тому же ресурсу подходят несколько шаблонов. К примеру,

nxterm*SmeBSB.font:          7x14
nxterm.fontMenu.SmeBSB.font: fixed

В таких ситуациях действует правило: используется та спецификация, которая наиболее точно ссылается на объект. В приведенном выше примере во всех меню, кроме меню "fontMenu" ("VT Fonts"), используется шрифт "7x14", а в "fontMenu" -- шрифт "fixed".

Как узнать имена объектов и названия ресурсов

Названия ресурсов, вообще говоря, зависят от библиотеки объектов, на основе которой создана конкретная программа. Имена же объектов -- от конкретной программы.

Поскольку редко когда требуется поменять значение "какого-нибудь" ресурса, то самое простое -- посмотреть так называемый app-defaults-файл для данной программы (см. ниже), в нем обычно перечислено большинство "интересных" ресурсов.

Кроме того, в таблице ниже приведены самые часто используемые имена ресурсов для библиотек Athena Widgets и Motif.

Часто используемые ресурсы
РесурсНазначение
foreground Цвет букв ("цвет переднего плана")
background Цвет фона
font Шрифт (Athena Widgets)
fontList Шрифт (Motif)
label Метка -- текст на кнопке, на пункте меню и т.д. (Athena Widgets)
labelStringМетка (Motif)

Откуда берутся значения ресурсов

Мы довольно подробно рассмотрели синтаксис спецификации ресурсов, но остался вопрос -- а как и где, собственно, можно изменить значение ресурса для конкретной программы?

Для ответа на этот вопрос приведем список источников (по мере уменьшения приоритета), из которых программа узнает значения ресурсов при запуске.

  1. Программа может установить значение ресурса при создании объекта.
  2. Ресурс можно указать в командной строке при помощи ключа "-xrm".
  3. Спецификации ресурсов могут быть загружены в память X-сервера (это делается автоматически при старте X-Window скриптом xinitrc из содержимого файлов /etc/xinit/.Xresources и ~/.Xresources).
  4. Если (и только если) в памяти X-сервера ресурсы отсутствуют, то просматривается файл ~/.Xdefaults. Поскольку .Xdefaults в большинстве реализаций прекращает поиск (и все дальнейшие пункты просто не используются), лучше его никогда не заводить, а если уже есть -- избавляться от него.
  5. Если есть файл ~/имя-класса-программы, то просматривается он, а затем, если есть, одноименный файл из директории

    /usr/X11R6/lib/X11/app-defaults/
    Эти файлы содержат "настройки по умолчанию" (app-defaults).

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

    ls /usr/X11R6/lib/X11/app-defaults/ | grep -i имя-программы
  6. Если (и только если) не найден ни один из app-defaults-файлов, то используется список ресурсов, "вшитый" в программу (т.н. "fallback resources"). Если заглянуть внутрь программы, к примеру, командой

    strings /usr/X11R6/bin/xman | less
    то можно увидеть строки, очень похожие на содержимое файла /usr/X11R6/lib/X11/app-defaults/Xman.

"Ручное" изменение ресурсов: ключ "-xrm"

Самый простой способ изменить значение ресурса -- воспользоваться ключом "-xrm", которому указывается в качестве параметра спецификация ресурса. Поскольку она обычно содержит пробелы и/или символы "*", лучше указывать ее в одинарных кавычках:

nxterm -xrm 'nxterm*SmeBSB.font: fixed'

Ключ "-xrm" можно указывать несколько раз:

nxterm -xrm 'nxterm*SmeBSB.font: fixed' -xrm 'nxterm*background:red'

Естественно, значение ресурса меняется только для данного экземпляра программы.

Общие рекомендации -- как же все-таки настраивать ресурсы

Как видно из приведенного выше списка, значения ресурсов можно менять в огромном количестве мест. Поэтому для большей определенности приведем один из сценариев.

Первым делом следует отладить спецификацию ресурса "методом проб и ошибок" при помощи ключа "-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)).


Русификация

Что включает в себя русификация Unix вообще и X-Window в частности

В русификацию системы входят:

Русификация вывода

Это самое простое -- надо сделать в (обычно в /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-директории

/net/rdist/dist/contrib/libc6/i386/
по 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 и включить ее, убрав символ "#". Т.е. фрагмент текста

# To disable the XKEYBOARD extension, uncomment XkbDisable.

#    XkbDisable
должен превратиться в

# To disable the XKEYBOARD extension, uncomment XkbDisable.

    XkbDisable
Предупреждение. Некоторые современные пакеты требуют для работы наличия Xkb. В таком случае можно не отключать Xkb, а просто не устанавливать ему русскую раскладку.

Настройка автоматического запуска русификатора


Что интересно, хотя пакет называется xruskb, сама программа -- xrus. Русификатор можно запускать с единственным параметром -- именем файла, содержащего раскладку клавиатуры. Файл раскладки "ЙЦУКЕН" для koi8 в xruskb версии 1.5 называется

/usr/lib/xruskb/jcuken-koi8-xrus.xmm
а в версии 1.9 --

/usr/share/xruskb/jcuken-koi8.xmm

Таким образом, в версии 1.5 для запуска надо воспользоваться командой

xrus /usr/lib/xruskb/jcuken-koi8-xrus.xmm

Но ведь надо, чтобы это делалось автоматически при старте X-Window! Лучший способ -- поместить эту команду в начало файла /etc/X11/xinit/Xclients, непосредственно перед всеми командами.

Переключать клавиатуру с русского на английский можно или щелчком левой кнопки мыши на пиктограмме "RUS/LAT" (она помещается в левый нижний угол экрана), или одновременным нажатием обеих клавиш <Shift>


Практические задания

  1. Изменить конфигурацию X-сервера так, чтобы при запуске автоматически устанавливалась глубина цвета 16 бит/пиксел и включалось разрешение 1024*768, а не 640*480.
  2. На компьютерах уже установлены (в составе дистрибутива) русские шрифты "Cronyx", они лежат в директории /usr/X11R6/lib/X11/fonts/cyrillic/. Сделать так, чтобы X-сервер их использовал.
  3. Установить дополнительные русские шрифты из файла /net/class/home/teachers/bolkhov/koi8fonts.tgz и сделать так, чтобы X-сервер их использовал.
  4. Настройки цветов в AnotherLevel расположены в файлах в директории /etc/X11/AnotherLevel/decors/. Изменить (как "root") для режима MWM цвет заголовка активного окна на зеленый, неактивного -- на синий, цвет фона меню -- на розовый.
  5. Размер виртуального десктопа в AnotherLevel определяется строкой вида "3x3". Найдя (при помощи grep) в каком файле это устанавливается, сделать в своей home-директории личную копию этого файла и изменить размер десктопа на "4x4".
  6. Настроить общесистемный app-defaults-файл для NXTerm так, чтобы все шрифты, выбираемые в меню "VT Fonts" были русскими, а в названиях, выводимых в этом меню, указывался бы размер шрифта (например, в пунктах).
  7. Установить пакет xruskb-1.5 и сделать так, чтобы русификатор автоматически запускался при старте X-Window. Не забыть отключить Xkb! Пакет xruskb расположен в директории contrib/, видной как /net/class/mnt/rdist/contrib/libc6/i386/.

----------------------------------------

© 1999 Дмитрий Болховитянов