Файл 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).
- Строки 4-13. Установка рабочей среды по умолчанию. Рабочую среду по умолчанию (см. гл. 11) вы можете установить с помощью переменной PREFERRED в строке 4. Если PREFERRED не определяет никакую оболочку, то Строки 5-12 проверяют, какая оболочка но умолчанию задана в файле /etc/sysconf ig/desktop: GNOME, KDE или Another Level.
- Строки 14-18. He является ли заданная в PREFERRED оболочка AnotherLevel.
- Строки 21-32. Если PREFERRED не задает оболочку, предпринимается попытка использовать GNOME. Если GNOME не установлена, то проверяется KDE.
- Строки 35-36. Выполняется очистка путем удаления временных файлов, которые могли остаться после предыдущего сеанса работы X Windows.
- Строки 38-54. Проверка стиля диспетчера окон AnotherLevel, запуск диспетчера с этим стилем и завершение работы сценария.
- Строки 56-69. Попытка запустить AnotherLevel со стилем Fvwm95. В случае неудачи запускаются xclock, xterm и Netscape, затем предпринимается попытка запустить fvwm. Если fvwm отсутствует, запускается twm.
Чтобы установить собственный клиент, запускаемый автоматически при запуске X Windows, можно скопировать глобальный файл Xclients в файл. Xclients вашего исходного каталога (копирование файлов рассмотрено в гл. 14) и отредактировать его, введя команды запуска нужных программ перед разделом, в котором указан запуск диспетчера окон. Такой порядок запуска вызван тем, что после запуска диспетчера окон команда exec завершает выполнение сценария.