XDM и X-терминалы

Базовые принципы

Что описывается в этом документе?

В этом документе описываются базовые принципы использования XDM (менеджер дисплея X) при его управлени X-терминалом и X-серверами, для реализации систем с "тонкими клиентами" при помощи Linux.

X (или 'Система X Window') - это одна из лучших оконных графических сред для Unix. Одно из главных ее преимуществ состоит в том, что работающие в ней приложения (обозреватель сети, текст-процессор и т.п.) и устройства ввода-вывода (графический экран, мышь, клавиатура и т.п) связаны при помощи единого сетевого коммуникационного механизма.

Например, это означает, что вы можете запустить программу на одной машине, а ввод и вывод переназначить на другую машину, соединенную с первой через сеть. Это - ключевая особенность X, которая позволила создать X-терминалы.

Этот документ не описывает установку или настройку сети или X в Linux. Для этого обращайтесь к соответствующим документам HOWTO, входящим в состав Проекта Документирования Linux. (см. раздел Разд. Ссылки).

Этот документ можно рассматривать как "Начинаем работу с XDM", потому что в нем описываются базовые принципы и концепции использования XDM и X-терминалов, а также приводятся простые примеры, обеспечивающие минимум безопасности.

Автор рекомендует вам обратиться к списку ссылок на другие документы, приведенному в конце этого текста. Там вы можете узнать, как продолжить настройку вашей системы, установить аутентификацию, усилить меры безопасности, так как примеры, приведенные ниже, сделаны на минимальном уровне защиты от внешних посягательств.

Заметьте также, что информация, приведенная в этом документе, собрана на основе опыта работы с системами Debian 2.1, SuSE 6.4, Mandrake 7.0 и RedHat 6.0.

Этот документ не описывает, как установить и настроить Linux для поддержки X-терминалов. Описание установки и настройки X-терминалов вы найдете в "HOWTO: Thin-Client" из Проекта Документирования Linux (Linux Documentation Project, см. раздел Разд. Ссылки).

Об этом документе

Этот документ появился на свет, потому что мне захотелось поэкспериментировать с Linux на 486-ой машине в качестве X-терминала моей главной Linux-машины.

После прочтения man, спецификаций, howto и документации, касающейся XDM и X-терминалов, я окончательно запутался во всем - зачем нужен XDM, что такое XDM-сервера и X-сервера и т.п. После этого я экспериментировал целый вечер, после чего и появился этот документ.

После того, как я рассортировал базовую терминологию, документация к XDM и примеры стали понятны - просто я не мог выяснить, с чего начать. Я надеюсь, что этот документ будет простым и понятным введением для тех, кто попал в такую же ситуацию.

А, кстати, если вам интересно - 486dx2/66 с 16 Мб ОЗУ может быть прекрасным X-терминалом!

XDM

Что такое XDM?

Если проще, то XDM (X Display Manager) можно представить, как графическую замену стандартному входу в систему (login). На самом же деле он может значительно больше.

Обычно он запускается пользователем "root" (или скриптами загрузки системы) при включении машины, и предлагает пользователю графическое приглашение ко входу. После этого он управляет сессией работы пользователя с X - он запускает менеджер окон и приложения.

Это можно описать, как "простой вход в локальную систему". Так оно и есть по умолчанию во многих известных дистрибутивах Linux. Однако, XDM также может работать с удаленными X-серверами, и предоставлять приглашение ко входу в систему на удаленнных X-терминалах. Короче говоря, он не ограничен локальной машиной - он может управлять и другими машинами, подключенными к нему по сети.

XDM - очень мощная утилита, и этот документ лишь немного коснется его возможностей. Цель этого документа - донести до вас информацию о том, как настроить ваши X-терминалы и серверы приложений так, чтобы они могли связаться друг с другом. Более подробную информацию вы найдете в главе Разд. Ссылки.

Что такое X-терминал

Этот термин применяется во многих случаях, но самый простой вариант - это машина, подключенная к сети, у которой есть клавиатура, мышь и монитор, и она может запустить систему X windows для связи с сервером приложений, находящемся где-то в сети.

Существуют разные конфигурации "X-терминалов" разных уровней - начиная от полностью бездисковых терминалов, заканчивая мощными X-рабочими станциями.

Терминология

Перед тем, как мы продолжим, я должен разъяснить вам значение некоторых терминов, которые я буду использовать в этом документе. При разговорах об X немудрено запутаться в понятиях "сервер", "клиент" и т.п. Это особенно проявляется в случае, если вы собираетесь работать с X по сети, используя X-терминалы. В этом документе я буду употреблять следующие термины:

Бездисковый X-терминал

Это машина без локальных дисков, которая загружается через сеть при помощи сервера. Это значит, что она получает параметры сети, операционную систему, ее настройки и все приложения с сервера. После загрузки она представляет из себя "простой X-терминал" (см. ниже). Обычно эта система использует один или несколько протоколов удаленной загрузки: BOOTP, DHCP, TFTP и т.п. Подробнее о бездисковых станциях читайте в документах, перечисленных в главе Разд. Ссылки.

Простой X-терминал

Это машина, которая загружает операционную систему с локального диска, после этого запускает "X-сервер" и все. Далее каким-то образом на экране должно появиться приглашение ко входу в сервер приложений, который находится в другом месте сети.

Рабочая станция X

Она аналогична простому X-терминалу, за исключением того, что в ней можно войти в саму локальную машину, чтобы при необходимости у пользователя была возможность работы при отсутствии сети.

Сервер приложений

В этом документе, я буду называть "сервером приложением" машину, на которой работает X-сессия и X-приложения (на ней может не быть графической консоли, приглашения ко входу, и, возможно, экрана и клавиатуры вообще).

X-Сервер

Это машина с физической консолью (дисплей, клавиатура, мышь и т.п.), которая может предоставлять необходимые сервисы X-клиентам. Более подробно читайте в "HOWTO: Пользователь X", ссылка на который приведена в разделе Разд. Ссылки.

X-Клиент

Это приложение, которому для осуществления ввода-вывода требуется X-сервер.

Исходя из вышеприведенных описаний, рабочую станцию X можно представить в виде комбинации простого X-терминала и сервера приложений, работающих на одной машине.

В этом документе описаны несколько вариантов комбинаций элементов, перечисленных выше, а также описано, какую роль может играть xdm в настройке этих комбинаций.

Что может XDM?

XDM - это утилита, отвечающая за приглашение ко входу в систему, и инициализирующая их X-сессию. Это может быть как локальная сессия (в случае с рабочей станцией X), так и удаленная сессия работы с сервером приложений (в случае бездискового или простого терминалов).

Существуют два метода, которые могут привести к выдаче приглашения ко входу в систему:

Запрос X-сервера

Через XDM-сервер

Запрос X-сервера

Связь между XDM и настоящим "X-сервером" (машиной с настоящим экраном/клавиатурой/мышкой/и т.п.) производятся при помощи протокола XDMCP ('X display manager control protocol').

Это позволяет X-серверу посылать запросы на XDM-сервер, обычно говоря ему что-то типа "Тут кто-то хочет войти в систему - дайте мне приглашение ко входу".

Эта функция может принять одну из 3 форм:

Прямой запрос: X-сервер связывается с заданной с машиной, посылая запрос на получение приглашения ко входу на его дисплей.

Широковещательный запрос: X-сервер посылает общее сообщение по сети, и первый сервер, на котором запущен XDM, отвечающий на это сообщение, предоставляет X-серверу приглашение ко входу в сеть.

Косвенный запрос: X-сервер связывается с заданной машиной, но спрашивает у нее, какие другие машины с xdm она знает. Эта машина предоставляет пользователю для выбора список машин, и после этого X-сервер устанавливает соединение с выбранной машиной. Приглашение ко входу передается X-серверу уже по этому новому соединению.

Существуют еще несколько форм, но они не будут описываться здесь. Для этого обращайтесь к документации по XDM и XDMCP, ссылки на которые приведены в Разд. Ссылки.

Через XDM-сервер

Если у вас есть несколько машин (бездисковых или простых X-терминалов) с X-серверами, работающих с одним сервером приложений, то для реализации процедуры входа в этот сервер можно использовать XDM. В этом случае XDM сам связывается с каждым X-сервером и автоматически выводит на дисплей приглашение ко входу в сервер приложений.

В этом режиме работы файл "Xservers" содержит список машин (включая и локальную, если это необходимо), с которыми XDM должен связаться для выдачи на их экран приглашения ко входу.

Эта конфигурация (если в списке X-серверов нет удаленных машин) очень часто используется на X-рабочих станциях для того, чтобы выдать на экран приглашение ко входу на локальную машину.

Подобный способ требует того, чтобы права доступа X-сервера позволяли XDM сервера приложений устанавливать обратную связь к соответствующему дисплею.

Настройка XDM

В этом разделе описывается настройка XDM для выполнений функций, описанных в предыдущей главе.

В каждом случае нижеописанная конфигурация - это необходимый для достижения цели минимум. В большинстве случаев эта конфигурация плохо защищена. Для того, чтобы усилить безопасность ваших X-терминалов и серверов приложений, читайте документацию, список которой приведен в разделе Разд. Ссылки.

Конфигурационные файлы

Ниже описана следующая схема конфигурационных файлов XDM:

xdm-config

Xaccess

Xservers

Xresources

Эта схема применяется в (Debian 2.1. Mandrake 7.0.2, RedHat 6.2) :

      /etc/X11/xdm

или (SuSE 6.4) :       /usr/X11R6/lib/X11/xdm

xdm-config

В этом файле задается местоположение других конфигурационных файлов и базовые права доступа. Во всех дистрибутивах, которые использовались при написании этого документа, имена всех конфигурационных файлов были одинаковы (правда иногда различалось их местоположение).

В этом файле также задаются файлы скриптов, запускаемые при смене состояния X-сессии (запуск системы и т.п.). Вам не надо это изменять, так как все дистрибутивы идут уже с готовыми настройками.

Xaccess

В нем задается список машин, которые могут соединяться c XDM на этой машине - т.е., какие машины могут посылать XDMCP-запросы на этото сервер.

Xservers

Содержит список машин, с которыми будет связываться XDM для автоматической выдачи на их экран приглашения ко входу в систему (т.е. список машин, на которых уже работает X-сервер, но они хотели бы получить приглашение ко входу именно от этой машины).

Xresources

Содержит детальное описание свойств X, используемых мастерами XDM (таких, как размер окна с приглашением ко входу, его цвет, фон, и т.п.)

Настройка XDM для управления X-серверами

Для каждой машины, на которой XDM будет автоматически выдавать на ее экран приглашение ко входу в сервер приложений, необходимо задать строку в файле Xservers. Туда могут войти как локальная машина, так и список удаленных машин.

Пример

      # Сначала локальная машина
:0 local /usr/bin/X11/X vt7
#
# Затем удаленные
emma:0 foreign
alex:0 foreign

Это позволит XDM запуститься на локальной машине и заодно выдать приглашение ко входу на машинах 'emma' и 'alex' (преполагая, что права на этих машинах настроены так, что нашему XDM можно с ними связываться).

Заметьте также, что в этом файле можно задавать не только имя машины, но и номер дисплея (:0, :1, и т.п.), если это необходимо (например, если вы используете несколько X-серверов на одной машине и т.п.)

Настройка XDM для обработки запросов

В файле Xaccess задается список машин, которым разрешено посылать запросы на получение приглашения ко входу от XDM.

Пример

      # Первая строка для прямых запросов
*
# Следующая строка для косвенных запросов
* CHOOSER BROADCAST

Это означает, что напрямую к этому XDM можно подключиться с любой машины (первая строка с "*"). Строка с опцией "CHOOSER" позволяет другим машинам посылать этому XDM косвенные запросы (с получением списка машин, к которым можно подключиться).

'BROADCAST' означает, что программа "chooser" на этой машине получает список доступных XDM-серверов при помощи широковещательных сетевых запросов. Я поговорю об этой программе чуть позже.

В этом файле можно задавать имена машин. Существуют и другие виды косвенных запросов (без "chooser"), но я не буду здесь это описывать. Если вам это интересно, читайте документацию, список которой приведен в главе Разд. Ссылки.

Запуск X

Способ запуска самого X-сервера зависит от того, с каким XDM вы хотите работать - с локальным или удаленным.

Рабочая станция X: XDM и локальный X-сервер

XDM будет нормально запускать X-сервер автоматически, и сам XDM запускается обычно в процессе запуска X (в инициализационных скриптах).

X-Терминал : Удаленный XDM

Просто запустите X без клиентских программ, с такими правами, чтобы удаленный XDM мог связаться с вашим X-сервером. Ниже приведена команда запуска X без контроля доступа:

          /usr/X11R6/bin/X -ac

X-терминал : Запрос на удаленный XDM

Напоминаю, что существуют 3 вида запросов: прямой, косвенный и широковещательный (прямой для одной машины, широковещательный для первой машины, ответившей на запрос):

          # Прямой запрос
/usr/X11R6/bin/X -query удаленная.машина
# Широковещательный запрос
/usr/X11R6/bin/X -broadcast
# Косвенный запрос
/usr/X11R6/bin/X -indirect удаленная.машина

В каждом случае X должен быть запущен пользователем root. Запуск X можно настроить в инициализационных скриптах загрузки системы (если это необходимо).

Программа Chooser

Когда XDM получает косвенный запрос (предполагаем, что в файле Xaccess задана опция запуска программы "chooser"), он может предоставить в ответ список других XDM-серверов, которые ему известны.

В этом режиме пользователь вместо обычного приглашения ко входу получит на экране окно программы "chooser", которая позволит выбрать ему одну из найденных в сети машин с XDM-сервером.

Когда я впервые испытывал "chooser", я обнаружил, что размер окна этой программы, описанный в файле Xresources, поставляемом в комплекте с моими дистрибутивами SuSE и Debian, слишком велик. Исправьте следующим образом строку в файле Xresources:

      Chooser*geometry:      700x500+300+200

Программа "chooser" получает список машин двумя способами:

Широковещательный запрос: В этом режиме "chooser" посылает широковещательный запрос по сети, и затем создается список из имен серверов приложений, ответивших на этот запрос..

Перечисление: Этот список также можно задать в файле Xaccess, например:

        %hostlist      emma alex liam
*              CHOOSER %hostlist

Это означает, что машины emma, alex и liam будут в списке серверов приложений (скорее всего, даже если одна из машин отключена? Надо проверить....)

Дополнительные опции настройки

Наборы конфигурационных файлов

В файле xdm-config можно настроить очень много разных опций, и он обычно уже поставляется настроенным. Во многих случаях, файла, поставляемого с вашим дистрибутивом, будет достаточно. Но если вам нужно больше...

Названия стартовых скриптов и конфигурационных файлов, используемых XDM, определяются специальными операторами в начале файла xdm-config. Это позволяет вам иметь разные наборы конфигурационных файлов для разных X-серверов и X-терминалов.

Например, предположим, что вы используете XDM для работы с вашим локальным дисплеем, но хотите, чтобы он обрабатывал и запросы с других X-терминалов сети. В этом случае можно задать два различных файла Xresources для себя и для удаленных терминалов. Для этого надо в файл xdm-config вписать следующие строки:

      DisplayManager._0.resources            /etc/X11/xdm/Xres_0
DisplayManager*resources               /etc/X11/xdm/Xresources

В результате этого для локального дисплея будет использоваться файл Xres_0 (_0 - это то же самое, что и :0, только на языке XDM), а для всех остальных - файл Xresources ('*'). Заметьте, что в конфигурационных файлах XDM для задания конкретного дисплея на машине используется терминология: машина_0, а не машина:0.

Аналогично вы можете задать специальный файл Xresources для конкретной машины примерно так:

      DisplayManager.host_0.resources       /etc/X11/xdm/Xres_host_0

Если вы взглянете в свою стандартную версию файла xdm-config, то вы обнаружите, что файлы конфигурации уже разделены на группы для локальной машины и для удаленных, так как в этих случаях xdm-сервером выполняются разные операции. В моем дистрибутиве Debian для локальных серверов использовались следующие файлы:

      DisplayManager._0.resources:    /etc/X11/xdm/Xresources_0
DisplayManager._0.setup:        /etc/X11/xdm/Xsetup_0
DisplayManager._0.startup:      /etc/X11/xdm/Xstartup_0
DisplayManager._0.reset:        /etc/X11/xdm/Xreset_0

а для удаленных:       DisplayManager*resources:       /etc/X11/xdm/Xresources
DisplayManager*setup:           /etc/X11/xdm/Xsetup
DisplayManager*startup:         /etc/X11/xdm/Xstartup
DisplayManager*reset:           /etc/X11/xdm/Xreset