В системе X Window , менеджер X сессия является управление сеансами программа, программа , которая может сохранять и восстанавливать текущее состояние набора запущенных приложений.
Обзор
С точки зрения менеджера X-сеансов, сеанс - это «состояние рабочего стола» в данный момент времени: набор окон с их текущим содержимым. Точнее, сеанс - это набор клиентов, управляющих этими окнами или связанных с ними, и информация, которая позволяет этим приложениям при необходимости восстанавливать состояние этих окон.
Самый узнаваемый эффект от использования диспетчера сеансов - это возможность выхода из интерактивного сеанса, а затем обнаружение точно таких же окон в том же состоянии при повторном входе в систему. Для этого программа диспетчера сеансов сохраняет имена приложений, запущенных при выходе из системы, и запускает их снова при входе в систему. Более того, чтобы состояние приложений также было восстановлено (что необходимо для восстановления содержимого окон), приложения должны иметь возможность сохранять свое состояние выполнения по запросу от диспетчера сеансов и загружать его обратно при повторном запуске.
Как правило, сеанс можно сохранить или загрузить в любое время, даже если пользователь не входит в систему или не выходит из нее. Также возможно сохранить несколько разных сессий и загрузить одну из них по выбору пользователя. Сеансы также можно указать, предоставив список приложений, составляющих сеанс. В результате у пользователя есть возможность сохранить набор различных сеансов, либо путем сохранения состояния выполнения запущенных в данный момент приложений, либо путем явного перечисления приложений, составляющих сеанс. Таким образом, пользователь может позже решить загрузить данный сеанс.
Протокол XSMP
Чтобы сеанс включал в себя состояние приложения, приложение должно иметь возможность сохранять и загружать свое текущее состояние, когда это необходимо. Протокол под названием X Session Management Protocol (XSMP) определяет, как взаимодействуют приложения и менеджеры сеансов. Формат сообщения XSMP такой же, как формат сообщения интерактивного установления соединения (ICE). [1] Особое значение имеет то, что диспетчер окон может взаимодействовать с диспетчером сеанса, поскольку диспетчер окон отвечает за размещение окон и наличие значков. Приложения, которые не могут сохранять свое состояние, могут быть включены в сеанс, но они не сохраняют свое состояние между сеансами.
Система X Window включает в себя диспетчер сеансов по умолчанию, называемый xsm
. Другие менеджеры сеансов были разработаны для конкретных настольных систем: например, ksmserver
это менеджер сеансов по умолчанию для KDE .
Протокол
XSMP - это подпротокол межклиентского протокола обмена . Клиент запускает протокол, подключившись к диспетчеру сеансов. Расположение диспетчера сеансов в сети зависит от системы: в системе POSIX среда содержит переменную SESSION_MANAGER
. Следовательно, когда клиент запускается, его окружение должно содержать эту переменную с соответствующим значением.
Идентификаторы
Протокол учитывает два факта:
- для правильного перезапуска сеанса необходимо перезапустить не только запущенные в нем приложения, но и перезапустить их таким образом, чтобы они восстановили свое предыдущее состояние;
- одно и то же приложение может запускаться более одного раза в одном или другом сеансе.
Различные экземпляры одного и того же приложения могут быть активны одновременно в одном и том же или в разных сеансах, и эти экземпляры, скорее всего, имеют разные состояния выполнения. Например, пользователь мог запустить текстовый редактор в файле /etc/passwd
, затем в файле letter.txt
в том же сеансе, а затем в файле todo.txt
в другом сеансе.
Для правильного восстановления сеансов диспетчер сеансов должен распознавать разные экземпляры одного и того же приложения. По этой причине диспетчер сеанса выбирает уникальный идентификатор для каждого экземпляра каждого приложения. Таким образом, диспетчер сеанса может различать работающий /etc/passwd
текстовый редактор и работающий текстовый редактор todo.txt
, даже если они являются двумя экземплярами одной и той же программы.
Идентификаторы должны быть уникальными. В частности, они должны быть уникальными для всех сеансов, управляемых менеджером сеансов: идентификатор работающего текстового редактора /etc/passwd
отличается не только от того же самого текстового редактора, letter.txt
но и от текстового редактора, работающего todo.txt
в другом сеансе. Идентификатор клиента остается прежним, даже если сеанс завершен и перезапущен.
Основные части протокола
Основными частями протокола управления сеансом являются:
- менеджер сеанса выбирает уникальный идентификатор для каждого клиента
- менеджер сеанса просит клиентов сохранить свое состояние
- клиент указывает, как он должен быть запущен снова, чтобы состояние было восстановлено (например, командная строка, которая будет использоваться для запуска процесса)
Последний пункт возможен, потому что менеджер сеанса поддерживает набор свойств для каждого клиента (в терминологии системы X Window свойство - это просто контейнер для данных). Эти данные могут быть изменены клиентом в любое время. Одно из этих свойств названо RestartCommand
и содержит информацию о том, как клиент должен быть снова запущен.
Когда диспетчер сеанса запрашивает у клиента сохранение своего состояния, приложение действует следующим образом:
- он сохраняет свое состояние таким образом, чтобы можно было различать состояния двух разных экземпляров; это можно получить, например, сохранив состояние в файле, имя которого содержит его идентификатор
- он хранит в свойстве спецификацию того, как он должен быть снова запущен
RestartCommand
; это свойство должно содержать идентификатор клиента, потому что:- приложение должно сохранять свой идентификатор при повторном запуске
- идентификатор нужен для восстановления состояния (например, нужно найти файл, в котором хранится его состояние)
Менеджер сеанса поддерживает и другие свойства RestartCommand
. Например, свойство указывает, как запустить приложение, если сеанс разрушен.
Локальное и глобальное состояние
При запросе клиента на сохранение своего состояния оконный менеджер может указать, должно ли быть сохранено локальное или глобальное состояние (или и то, и другое). Разница в том, должен ли результат сохранения быть видимым для других приложений или нет.
В случае текстового редактора сохранение глобального состояния означает обычное сохранение файла, чтобы другие приложения могли использовать новую версию файла. Сохранение локального состояния означает, что необходимо сохранить локальную копию файла, чтобы другие приложения могли видеть файл в его исходной версии.
Пример
Ниже приведены основные этапы взаимодействия диспетчера сеанса с гипотетическим текстовым редактором, xyz
когда это приложение запускается впервые в сеансе, затем пользователь выходит из системы, а затем снова входит:
- приложение подключается к диспетчеру сеансов по протоколу межклиентского обмена
- приложение сообщает диспетчеру сеанса, что это первый раз, когда оно запускается, и, следовательно, у него нет предыдущего идентификатора (и, следовательно, нет предыдущего состояния)
- менеджер сеанса отвечает, посылая клиенту его уникальный идентификатор, скажем
4324
; - диспетчер сеанса немедленно просит клиента сохранить его локальное состояние (только потому, что клиент был запущен впервые)
- клиент сохраняет командную строку
xyz -sid 4324
как свойствоRestartCommand
в диспетчере сеансов (это также зависит от системы: в системе POSIX это свойство фактически содержит массив argv ) - клиент хранит свое состояние локально; например, он может хранить имя редактируемого файла и всю другую информацию (например, текущую строку) в локальном файле.
.temp-4324
- когда пользователь выходит из системы, менеджер сеанса отправляет сообщение всем клиентам, уведомляющее, что они должны сохранить свое состояние
- клиент
4324
снова подчиняется - когда все клиенты сообщили диспетчеру сеанса, что их состояние сохранено, диспетчер сеанса завершает сеанс
Когда клиенту предлагается сохранить свое состояние, он может иметь возможность иметь ограниченное взаимодействие с пользователем или нет (например, спрашивать пользователя, следует ли сохранить отредактированный файл). В любом случае состояние сохраняется, он сообщает об этом диспетчеру сеанса, отправляя соответствующее сообщение).
При повторном запуске сеанса происходит следующее:
- менеджер сеанса перезапускает клиента
4324
, выполняя то, что хранится в свойстве,RestartCommand
связанном с клиентом4324
- поэтому приложение запускается как
xyz -sid 4324
; таким образом приложение знает свой идентификатор - приложение извлекает информацию о состоянии из файла
.temp-4324
- приложение подключается к диспетчеру сеансов, указывая идентификатор
4324
, так что диспетчер сеанса знает, что это не новый клиент, а перезапускается старый
Сеансы управления клиентами
Согласно протоколу XSMP, диспетчер сеансов - это произвольная программа, которая запускает и контролирует состояние других приложений. В результате клиент сам может быть менеджером сеанса других клиентов. Например, почтовый клиент может запускать текстовый редактор для написания электронного письма и вести себя как менеджер сеанса по отношению к редактору. Таким образом, если почтовый клиент будет закрыт, а затем перезапущен, он сможет восстановить состояние текстового редактора.
История
Для GNOME менеджер сеансов GNOME заменил XSMP интерфейсом D-Bus в версии 2.24. [2] Это далеко не полная функциональность, и она не используется приложениями, отличными от GNOME.
Смотрите также
Рекомендации
- ^ «Протокол управления сеансом X» . www.x.org . Проверено 2 декабря 2020 .
- ^ "Проекты / SessionManagement / GnomeSession - GNOME Wiki!" . wiki.gnome.org .
Внешние ссылки
- Протокол управления сеансом X
- xsm справочная страница
- ksmserver , менеджер сеансов KDE
- ROX-Session , менеджер сессий ROX Desktop