Файл .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 завершает выполнение сценария.