Введение
Эта статья будет полезна новичкам в системном администрировании
и просто отдельным пользователям, которым интересно, как можно достичь
большей гибкости в настройке X сеансов.
Далее везде подразумевается, что система X Windows уже
установлена и запускается коммандой startx (настройка X в мультипользовательской
среде с использованием XDM возможно будет темой следующей статьи). Давайте
теперь кратко опишем основные файлы, используемые при конфигурировании.
xinitrc
- представляет собой shell script передаваемый xinit
посредством команды startx. В нем устанавливаются некоторые общие (глобальные)
ресурсы, такие как настройки screen-savers, клавиатуры и др. Этот файл
является основой для всего процесса запуска
together.
Xclients
- файл в домашней директории пользователя. Используется
для запуска клиентов, специфичных для данного пользователя, в отличие от
xinitrc
Xresources
В данном файле содержатся определения программных настроек,
переопределяющие заданные по умолчанию значения. Он обычно используется
для определения размеров шрифтов, цветов и общего внешнего вида. Кроме
этого, его можно использовать для достижения некоторых весьма впечатляющих
графических эффектов.
Закончив краткое рассмотрение конфигурационных файлов,
давайте окунемся в их более подробное описание..
.xinitrc
После выполнения команды startx, xinit, отвечающий за весь
процесс запуска X, просматривает либо /etc/X11/xinit/xinitrc (глобальный),
либо, если он существует, ~/.xinitrc (локальный). Если ни один из файлов
не найден, то выбор настроек осуществляется xinit (плохая идея). Файл xinitrc
(у локального приоритет выше, чем у глобального) - это shell script, запускающий
различных X-клиентов и в завершение процесса - указанный window manager
(используя exec).
Простейший xinitrc может выглядеть примерно так:
# /etc/X11/xinit/xinitrc
#!/bin/sh
exec /usr/X11R6/bin/fvwm2
Этот файл не делает ничего, кроме запуска F(eeble) Virtual
Window Manager 2 - никакие другие клиенты не запускаются. Не особо
полезно, но может пригодиться, если есть желание быстро покопаться в настройках
нового window manager. Будет интересней, если мы добавим несколько установок
и запустим некоторые дополнительные программы, которые требуются при каждом
запуске X..
#/etc/X11/xinit/xinitrc
#!/bin/sh
# исправим эту надоедающую проблему с BackSpace
xmodmap -e "keycode 22=BackSpace"
# set background
xsetroot -solid LightSlateGrey
# screen saver after five minutes
xset s 300
# Универсально запускаемые X клиенты
xterm -g 80x20+150+8 & # запуск окна терминала
xterm -g 80x20+150+325 & # запуск 2 окна под первым
xload -g +4+0 & # индикатор загруженности процессора
xclock -g +815+0 -digital & # запуск цифровых часов
# Start Window Manager
exec fvwm2
Экранный
снимок X сеанса с использованием данной конфигурации
С помощью этого файла мы исправляем (в большинстве случаев)
проблему с backspace, устанавливаем numlock, избавляемся от муаровых "обоев"
и запускаем парочку программ каждый раз при запуске X.
Несколько вещей, которые стоит запомнить. Локальный xinitrc
в домашней директории пользователя всегда будет использоваться (если
он существует), полностью игнорируя общесистемные установки. Также обратите
внимание на ключ -g -- данная опция позволяет определять геометрию для
многих программ, работающих под X. Формат данного ключа следующий:
Length x Width+ X coordinate+ Y coordinate
Нужно быть осторожным со следующим -- xterm (и большинство
других терминалов) указывают длину и ширину в количестве символов, а большинство
других программ используют для этой цели пикселы, так что, если не быть
осторожным, можно получить очень маааленькие окна! И последнее -- следите
за тем, чтобы в конце каждой комманды, кроме собственно window manager,
стоял амперсанд (&),- в результате этого все программы запускаются
в фоновом режиме (иначе следующая команда не будет выполняться, пока не
закончится выполнение предыдущей, а ничего хорошего в этом нет). Поэтому
ТОЛЬКО WINDOW MANAGER запускается в основном режиме и забирает с
собой все процессы, запущенные через xinitrc, когда вы выходите из X
Теперь у нас есть достаточно функциональный скрипт, который
может использоваться как глобально, так и локально - если нам необходимо
настроить определенным образом клиенты для разных пользователей (например,
мы можем написать разные xinitrc для разных отделов, так что инженерный
отдел будет иметь отличающиеся установки от, скажем, бухгалтерского). Несмотря
на то, что здесь есть несколько интересных возможностей, мы сильно "недоиспользовали"
многие из функций xinitrc. Заметим, что это shell cript, и поэтому мы можем
вызывать любые команды, которые используем обычно. Давайте теперь рассмотрим
окончательный вариант xinitrc, использующий xmodmap и xrdb для объединения
личных настроек с глобальным xinitrc, что снимает с нас обязанность трудиться
над созданием xinitrc для каждого пользователя, которому нужны собственные
настройки (замечание: специальное использование Xclients и Xresourecs обсуждается
ниже):
#/etc/X11/xinit/xinitrc
#!/bin/sh
# определяем расположение глобальных и локальных настроек
userclients=$HOME/.Xclients
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
# объединяем системные и пользовательские Xdefaults и раскладку клавиатуры
if [ -f $sysresources ]; then xrdb -merge $sysresources; fi
if [ -f $sysmodmap ]; then xmodmap $sysmodmap; fi
if [ -f $userresources ]; then xrdb -merge $userresources; fi
if [ -f $usermodmap ]; then xmodmap $usermodmap; fi
# исправляем проблему с backspace
xmodmap -e "keycode 22=BackSpace"
# set background
xsetroot -solid LightSlateGrey
# screen saver через 5 минут
xset s 300
#проверяем на наличие ~/.Xclients и исполняем,
#в противном случае исполняем системный
# клиенты по умолчанию (глобальный и локальный НЕ объединены)
if [ -f $userclients ]; then
exec $userclients
else
# запускаем некоторые программы
xterm -g 80x20+150+8 &
xterm -g 80x20+150+325 &
xload -g +4+0 &
xclock -g +815+0 -digital &
# запускаем window manager
fvwm2
fi
Экранный
снимок X сеанса с использованием данной конфигурации
В этом файле мы сначала загружаем все системные раксладки
клавиатуры и настройки программ (определенные в .Xmodmap и .Xresources),
и затем загружаем собственные настройки пользователей (расположенные в
домашних директориях). Затем мы добавляем некоторые дополнительные установки,
которые загружаются даже если их нет ни в системных, ни в пользовательских
настройках (например, backspace и состояние numlock). После этого выполняется
проверка на наличие .Xclients в домашней директории пользователя. Если
файл найден, он выполняется, в противном случае запускаются глобальные
настройки (заметьте, в отличие от defaults и resources выше, эти две строчки
НЕ объединены). Нужно сказать, что если у пользователя не определены
Xclients, их десктоп после запуска X будет выглядеть как оригинальный
снимок в отличие от приведенного
выше; таким образом, мы можем получить как единый глобальный десктоп,
так и настроенные для конкретных пользователей окружения из одного и того
же xinitrc. В заключение мы проверяем, если наш любимый window manager
присутствует в системе, в противном случае пробуем запустить "старый добрый"
fvwm2, а если нет и этого, то система будет пытаться загрузить twm в качестве
последнего прибежища. Теперь у нас есть настройки, позволяющие широко варьировать
индивидуальные предпочтения отдельных пользователей путем простого выбора
между локальными и общесистемными настройками через изменение глобальных
файлов - без необходимости модифицировать скрипт.
Давайте рассмотрим некоторые из файлов, упомянутых выше...
.Xclients
Файл ~/.Xclients содержит настройки клиентов, специфичные
для данного пользователя, которые запускаются в начале каждого X сеанса.
Синтаксис файла совпадает с соответствующими выражениями в xinitrc. Ниже
приведен пример файла ~/.Xclients, загруженного через xinitrc, использованный
в предыдущем снимке
.
xv -rmode -noresetroot -quit /usr/local/backgrounds/slate.xpm &
kfm &
kcontrol -init &
kbgndwm &
krootwm &
kpanel &
kvt &
kwm
Как видно из предыдущего "экранного снимка", Xclients могут
использоваться для настройки собственного окружения при чтении централизованного
xinitrc. Следует отметить, что из приведенного выше .xinitrc никакие клиенты
не запускаются, если найден ~/.Xclients. Я использую такой вариант настройки
для того, чтобы каждый пользователь мог запускать свой window manager через
Xclients. Если вы хотите, чтобы какие-либо системные клиенты запускались
универсально, загружайте их перед исполнением пользовательских Xclients
(если ~/.Xclients содержит вызов window manager). Для тех из вас,
кто заинтересовался конфигурацией моего десктопа, использованной в предыдущем
примере, загляните на
KDE's home page . Недавно вышла версия 3.0 Beta, содержащая много приятных GUI инструментов для настройки.
.Xresources
Ресурсы в X определяют программные настройки локально (~/.Xresources)
или глобально (/usr/X11R6/lib/X11/xinit/.Xresources). X программы состоят
из widgets. Widgets - это управляющие элементы, поэтому есть widgets для
шрифтов, линеек прокрутки и настроек background. Почти любая часть X программы
- это widget, и поэтому может быть сконфигурирована.
Widgets обычно устроены в виде иерархии, и поэтому внутри
обрамляющей widget для меню может находиться несколько widgets для отдельных
кнопок. Для того, чтобы полностью определить изменения для конкретной widget,
нужно указать полный путь к индивидуальному компоненту. Путь представляет
из себя имена widgets, представленные иерархично. Для примера ниже приводятся
строчки из моего ~/.Xdefaults, в котором приводятся к единому виду установки
для терминалов.
XTerm*Font: -misc-fixed-bold-r-normal-15-140-75-75-c-90-iso8859-1
XTerm*Background: black
XTerm*Foreground: cyan
XTerm*scrollBar: true
XTerm*saveLines: 500
Xterm*VT100.geometry: 80x24
Заметьте, в данном файле разрешено использование wildcards,
таким образом
*Foreground: cyan
*Background: black
определит стандартный внешний вид для всех программ, не
имеющих явно указанных Xdefault установок (установок по умолчанию). Если
вы похожи на меня и любите большую гибкость, чем та, которая достигается
с помощью wild cards, и однако не помните всю иерархию widgets - попробуйте
editres! Editres- это основанный на GUI инструмент для настройки, который
позволяет генерировать весьма различные конфигурации без необходимости
вручную писать .Xdefaults. Взгляните на экранный
снимок editres в действии! К настоящему моменту вы должны начать осознавать,
что .Xdefaults представляет отличные возможности для создания как окружений
выдержанного стиля, так и оригинально настроенных клиентов. Взгляните,
что Xdefaults сделали с неброским xcalc
. Отличный "шаг-за-шагом" учебник по использованию editres можно найти
на Isolation's X tips page.
Ну вот, пожалуй, и все на этот месяц. Я надеюсь,
что вы получили представление о том, что X могут быть стандартизованы и
настроены так, как вам того захочется, без необходимости убивать часы на
то, чтобы писать свой скрипт для каждого пользователя. В следующем выпуске
(главный редактор - Miguel
A .Sepulveda - поддерживает эту идею) мы рассмотрим, как можно настроить
X для возможности предоставления нескольких X logon на одной и той же рабочей
станции с использованием X Display Manager (xdm). Если у вас есть вопросы
или замечания, чувствуйте себя свободно написать
мне. До следующего раза...
|