Файл .Xclients
Вероятно, при изучении
файла xinitrc вы заметили, что пользователь может заменить установки глобального
файла Xclients собственными, записанными в файле .Xclients его исходного каталога.
В среде Red Hat после запуска Х-сервера программа xinit запускает исходные клиенты
при помощи этих файлов.
Данный файл, как и файл
xinitrc, - это сценарий оболочки, подчиняющийся всем правилам составления таких
сценариев. Чтобы понять, для чего используется Xclients, рассмотрим стандартный
файл Xclients из предварительной версии Linux Red Hat 7.1 (как и в предыдущем
примере, строки пронумерованы для удобства).
1: #!/bin/bash
2: # (с) 1999,
2000 Red Hat, inc.
3: # есть ли у
пользователя стандартная оболочка
4: PREfERRED=
5: if [ -f /etc/sysconfig/desktop
]; then
6:
if [
-n "'grep -i GNOmE /etc/sysconfig/desktop'" ] ; then
7: PREfERKED=gnome-session
8: elif [ -n "'grep
-i KDE /etc/sysconfig/desktop'" ]; then
9 : PKEfERRED=startkde
10: elif [ -n
"'grep -i AnotherLevel /etc/sysconfig/desktop'" ] ; then
11: PREfERRED=AnotherLevel
12: .fi
13: fi
14: if [ -n "$PKEfERRED"
-a "$PREfERRED"
i=
"AnotherLevel" ] && \
15: which $PREfERRED
>/dev/null 2>&1; then
16: PREfERRED='which
$PREfERRED'
17: exec $PREfERRED
18: fi
19: t Если мы
добрались сюда, то либо необходим AnotherLevel либо
20: # файл оболочки
отсутствует и переменная PREfERRED не установлена.
21: if t -z "$PREfERRED"
] ; then
22: GSESSiON=gnome-session
23: STARTKDE=startkde
24: # по умолчанию
запускается GNOmE.
25: if which $GSESSiON
>/dev/null 2>&1; then
26: exec 'which
$GSESSiON'
27: fi
28: # если GNOmE
не установлен, пробуем КОЕ.
29: if which $STARTKDE
>/dev/null 2>&1; then
30: exec 'which
$STARTKDE'
31: fi
32: fi
33: # В конце
концов пробуем AnotherLevel
34: # TheNextLevel
оставляет эти файлы нетронутыми.
35: rm -£
gHOmE/Xrootenv.0
36: rm -f /tmp/fvwmrc*
2>/dev/null
37: # Сначала
проверяются настройки пользователя
38: if [ -f $HOmE/.wm_style
] ; then
39: WmSTYLE='cat
$HOmE/.wm_style | tr A-Z a-z'
40: case "$WmSTYLE"
in
41: afterstep)
42: exec /usr/XllR6/bin/RunWm
-AfterStep
43: ;;
44: windowmaker|wmaker)
45: exec /usr/XllR6/bin/RunWm
—Windowmaker
46:
47: fvwm95|fvwm|fvwm2)
48: exec /usr/XllR6/bin/RunWm
-fvwm95
49:
50: mwm|lesstif)
51: exec /usr/XllR6/bin/'RunWm
-fvwmmWm
52:
53: esac
54: fi
55: # Ну вот!
Ничего путного не установлено. Возврат к fvwm2 (стиль win95) или twm
56: /usr/XllR6/bin/RunWm
-fvwm95 || {
57: # Вот те раз!
Нет ни fvwm95, ни fvwm2;
58: # возврат
к надежным установкам
59: xclock -geometry
100x100-5+5 &
60: xterm -geometry
80x50-50+150 &
61: if [ -f /usr/bin/netscape
-a -f /usr/share/doc/HTmL/index.html ]; then
62: netscape /usr/share/doc/HTmL/index.html
&
63: fi
64: if [ -f /usr/XllR6/bin/fvwm];
then
65: exec tvwra
66: else
67: exec twm
68: fi
69: }
Приведем описание файла
(аналогичное описанию файла xinitrc).
1. Строки 4—13. Установка
рабочей среды по умолчанию. Рабочую среду по умолчанию (см. гл. 11) вы можете
установить с помощью переменной PREfERRED в строке 4. Если PREfERRED не определяет
никакую оболочку, то Строки 5-12 проверяют, какая оболочка но умолчанию задана
в файле /etc/sysconf ig/desktop: GNOmE, KDE или Another Level.
2. Строки 14—18. He является
ли заданная в PREfERRED оболочка AnotherLevel.
3. Строки 21—
32.
Если
PREfERRED не задает оболочку, предпринимается попытка использовать GNOmE. Если
GNOmE не установлена, то проверяется KDE.
4. Строки 35—36. Выполняется
очистка путем удаления временных файлов, которые могли остаться после предыдущего
сеанса работы X Windows.
5. Строки 38—54. Проверка
стиля диспетчера окон AnotherLevel, запуск диспетчера с этим стилем и завершение
работы сценария.
6. Строки 56—69. Попытка
запустить AnotherLevel со стилем fvwm95. В случае неудачи запускаются xclock,
xterm и Netscape, затем предпринимается попытка запустить fvwm. Если fvwm отсутствует,
запускается twm.
Чтобы установить собственный клиент, запускаемый автоматически при запуске X Windows, можно скопировать глобальный файл Xclients в файл . Xclients вашего исходного каталога (копирование файлов рассмотрено в гл. 14) и отредактировать его, введя команды запуска нужных программ перед разделом, в котором указан запуск диспетчера окон. Такой порядок запуска вызван тем, что после запуска диспетчера окон команда exec завершает выполнение сценария.