[LinuxFocus Image]
  Новости   Aрхивы   Компании   Советы 

Настройка X Windows:

Зачем же все эти .файлы?

by Joel McCarty


Введение

.xinitrc

.Xclients

.Xresources

Введение

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


Перевод: Anton Antich

Для дальнейшей информации:
  • Почитайте man pages об xinit и X.


© 1998 Joel McCarty
This website is mantained by Miguel A Sepulveda.