Менеджер X-сессий
В системе X Window менеджер сеансов X — это программа управления сеансами , программа, которая может сохранять и восстанавливать текущее состояние набора запущенных приложений, включая оконный менеджер .
Обзор
[ редактировать ]С точки зрения менеджера сеансов X, сеанс — это «состояние рабочего стола» в данный момент времени: набор окон с их текущим содержимым. Точнее, сеанс — это набор клиентов, управляющих этими окнами или связанных с ними, и информация, которая позволяет этим приложениям восстанавливать состояние этих окон, если это необходимо.
Наиболее заметным эффектом использования диспетчера сеансов является возможность выйти из интерактивного сеанса и затем обнаружить точно такие же окна в том же состоянии при повторном входе в систему. Чтобы это работало, программа диспетчера сеансов сохраняет имена приложений, которые запускаются при выходе из системы, и запускает их снова при входе в систему. Более того, чтобы состояние приложений также восстанавливалось (что нужно для восстановления содержимого окон), приложения должны иметь возможность сохранять свое состояние выполнения по запросу менеджера сеансов и загружать его обратно при повторном запуске.
В общем, сеанс можно сохранить или загрузить в любое время, даже если пользователь не входит в систему и не выходит из нее. Также возможно сохранить несколько различных сессий и загрузить одну из них по выбору пользователя. Сеансы также можно указать, указав список приложений, составляющих сеанс. В результате пользователь имеет возможность сохранять набор различных сеансов либо путем сохранения состояния выполнения запущенных в данный момент приложений, либо путем явного перечисления приложений, составляющих сеанс. Таким образом, пользователь может позже решить загрузить данный сеанс.
XSMP-протокол
[ редактировать ]Чтобы сеанс мог включать состояние приложения, приложение должно иметь возможность сохранять и загружать свое текущее состояние по запросу менеджера сеанса (обычно при входе или выходе пользователя). Протокол под названием X Session Management Protocol (XSMP) определяет, как взаимодействуют приложения и менеджеры сеансов. Формат сообщения XSMP аналогичен формату сообщения межклиентского обмена (ICE). [1] Особое значение имеет то, что оконный менеджер может взаимодействовать с менеджером сеансов, поскольку оконный менеджер отвечает за размещение окон и наличие значков. Приложения, которые не могут сохранять свое состояние, могут быть включены в сеанс, но они не сохраняют свое состояние между сеансами.
Протокол
[ редактировать ]XSMP — это подпротокол протокола межклиентского обмена . Клиент запускает протокол путем подключения к диспетчеру сеансов. Расположение менеджера сеансов в сети зависит от системы: в системе POSIX среда содержит переменную SESSION_MANAGER
. Поэтому при запуске клиента его окружение должно содержать эту переменную с соответствующим значением.
Идентификаторы
[ редактировать ]Протокол учитывает два факта:
- для корректного перезапуска сеанса необходимо не только перезапустить работающие в нем приложения, но и перезапустить их таким образом, чтобы они восстановили свое предыдущее состояние;
- одно и то же приложение может запускаться более одного раза в одном или другом сеансе.

Разные экземпляры одного и того же приложения могут быть активны одновременно в одном и том же или в разных сеансах, и эти экземпляры, скорее всего, имеют разные состояния выполнения. Например, пользователь мог запустить текстовый редактор файла. /etc/passwd
, затем в файле letter.txt
в том же сеансе, а затем в файле todo.txt
в другом сеансе.
Для правильного восстановления сеансов разные экземпляры одного и того же приложения должны распознаваться менеджером сеансов как разные. По этой причине менеджер сеансов выбирает уникальный идентификатор для каждого экземпляра каждого приложения. Таким образом, менеджер сеансов может различать текстовый редактор, работающий на /etc/passwd
и текстовый редактор, работающий на todo.txt
, даже если это два экземпляра одной и той же программы.
Идентификаторы должны быть уникальными. В частности, они должны быть уникальными во всех сеансах, управляемых диспетчером сеансов: идентификатор текстового редактора, работающего на /etc/passwd
отличается не только от того же текстового редактора, работающего на letter.txt
но также отличается от текстового редактора, работающего на todo.txt
в другом сеансе. Идентификатор клиента остается прежним, даже если сеанс закрывается и перезапускается.
Основные части протокола
[ редактировать ]Основными частями протокола управления сеансом являются:
- менеджер сеанса выбирает уникальный идентификатор для каждого клиента
- менеджер сеанса просит клиентов сохранить свое состояние
- клиент указывает, как его следует запустить снова, чтобы состояние было восстановлено (например, командная строка , которая будет использоваться для запуска процесса)
Последний пункт возможен, поскольку менеджер сеансов поддерживает набор свойств для каждого клиента (в терминологии X Window System свойство — это просто контейнер для данных). Эти фрагменты информации могут быть изменены клиентом в любое время. Одно из этих свойств носит название RestartCommand
и содержит информацию о том, как следует запустить клиент снова.
Когда менеджер сеансов запрашивает у клиента сохранение своего состояния, приложение действует следующим образом:
- он сохраняет свое состояние таким образом, что можно различать состояния двух разных экземпляров; это можно получить, например, сохранив состояние в файле, имя которого содержит его идентификатор
- он хранит спецификацию того, как его следует запустить снова, в
RestartCommand
свойство; это свойство должно содержать идентификатор клиента, потому что:- приложение должно сохранить свой идентификатор при повторном запуске
- идентификатор нужен для восстановления состояния (например, он нужен для поиска файла, в котором хранится его состояние)
Менеджер сеансов поддерживает и другие свойства помимо RestartCommand
. Например, свойство указывает, как запустить приложение в случае уничтожения сеанса.
Локальное и глобальное состояние
[ редактировать ]Прося клиента сохранить свое состояние, оконный менеджер может указать, должно ли сохраняться локальное или глобальное состояние (или оба). Разница в том, должен ли результат сохранения быть виден другим приложениям или нет.
В случае текстового редактора сохранение глобального состояния означает обычное сохранение файла, чтобы другие приложения могли использовать новую версию файла. Сохранение локального состояния означает, что необходимо сохранить локальную копию файла, чтобы другие приложения могли видеть файл в его исходной версии.
Пример
[ редактировать ]Ниже приведены основные этапы взаимодействия менеджера сеансов с гипотетическим текстовым редактором. xyz
когда это приложение запускается впервые в сеансе, пользователь выходит из системы, а затем снова входит:
- приложение подключается к менеджеру сеансов по протоколу межклиентского обмена
- приложение сообщает менеджеру сеанса, что это первый раз, когда оно запускается, и поэтому у него нет предыдущего идентификатора (и, следовательно, нет предыдущего состояния)
- менеджер сеанса отвечает, отправляя клиенту свой уникальный идентификатор, скажем
4324
; - менеджер сеанса немедленно просит клиента сохранить его локальное состояние (только потому, что клиент запускается впервые)
- клиент сохраняет командную строку
xyz -sid 4324
как собственностьRestartCommand
в диспетчере сеансов (это также зависит от системы: в системе POSIX это свойство фактически содержит массив argv ) - клиент хранит свое состояние локально; например, он может хранить имя редактируемого файла и всю другую информацию (например, текущую строку) в локальном файле.
.temp-4324
- когда пользователь выходит из системы, менеджер сеансов отправляет сообщение всем клиентам, уведомляя, что им необходимо сохранить свое состояние.
- клиент
4324
снова подчиняется - когда все клиенты сообщили менеджеру сеанса, что их состояние сохранено, менеджер сеанса закрывает сеанс
Когда клиенту говорят сохранить свое состояние, у него может быть возможность ограниченного взаимодействия с пользователем или нет (например, спросить пользователя, нужно ли сохранять отредактированный файл). В любом случае состояние сохраняется, о чем он сообщает менеджеру сеанса, отправляя соответствующее сообщение).
При повторном запуске сеанса происходит следующее:
- менеджер сеанса перезапускает клиент
4324
путем выполнения того, что хранится в свойствеRestartCommand
связанный с клиентом4324
- поэтому приложение запускается как
xyz -sid 4324
; таким образом приложение знает свой идентификатор - приложение извлекает информацию о состоянии из файла
.temp-4324
- приложение подключается к менеджеру сеанса, указав идентификатор
4324
, чтобы менеджер сеансов знал, что это не новый клиент, а перезапускается старый
Сеансы управления клиентами
[ редактировать ]Согласно протоколу XSMP, менеджер сеансов — это произвольная программа (сервер), запускающая и контролирующая состояние других приложений. В результате клиент сам может быть менеджером сеансов других клиентов. Например, почтовый клиент может запустить текстовый редактор для написания электронного письма и вести себя как менеджер сеанса по отношению к редактору. Таким образом, если почтовый клиент будет закрыт, а затем снова перезапущен, он сможет восстановить состояние текстового редактора. [ нужна ссылка ]
Реализации
[ редактировать ]![]() | Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( январь 2009 г. ) |
Система X Window включает в себя менеджер сеансов по умолчанию, называемый xsm
. Другие менеджеры сеансов были разработаны для конкретных сред рабочего стола .
ГДЕ
[ редактировать ]ksmserver
является менеджером сеансов по умолчанию в среде рабочего стола KDE Plasma 5 . [2] [3]
Xfce
[ редактировать ]xfce4-session
Программа является менеджером сеансов X по умолчанию для Xfce DE на основе . Xfce позволяет создавать разные сеансы и выбирать их при запуске. [4] [5]
Гном
[ редактировать ]gnome-session
— менеджер сеансов по умолчанию для Gnome DE. Gnome поддерживает XSMP начиная с версии 1.x. В 2013 году GNOME намеревался заменить менеджер сеансов GNOME XSMP интерфейсом D-Bus в версии 2.24. [6] В конечном итоге было решено объединить оба интерфейса и предоставить адаптер (клиент) для устаревших приложений. [7] Однако в то время он не был полнофункциональным и не использовался приложениями, отличными от GNOME. [8] По состоянию на 2021 год в кодовую базу по-прежнему входят клиенты менеджера сеансов X.
Поддержка различных приложений
[ редактировать ]Исполняемые приложения обычно не встраивают (связывают с библиотеками ) поддержку поддержки сеансов (взаимодействия с менеджером сеансов) напрямую, а делают это через какой-либо SDK, например KDE Plasma или GTK, который предоставляет процедуры для управления сеансами и обмена клиент-сервер. Некоторые приложения могут не поддерживать.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Протокол управления X-сессиями» . www.x.org . Проверено 2 декабря 2020 г.
- ^ «Руководство пользователя KDE Desktop — KSMServer» . www.linuxtopia.org . Проверено 05 октября 2021 г.
- ^ «ksmserver · master · Plasma / Рабочая область Plasma» . ГитЛаб . Проверено 05 октября 2021 г.
- ^ «xfce:xfce4-session:start [Документация Xfce]» . docs.xfce.org . Проверено 05 октября 2021 г.
- ^ «xfce:xfce4-session:preferences [Документация Xfce]» . docs.xfce.org . Проверено 05 октября 2021 г.
- ^ «Проекты/SessionManagement/GnomeSession — GNOME Wiki!» . Wiki.gnome.org .
- ^ «Проекты/SessionManagement/NewGnomeSession — GNOME Wiki!» . Wiki.gnome.org . Проверено 05 октября 2021 г.
- ^ «Глава 6 Управление сеансами (Рабочий стол GNOME 2.0 для руководства по администрированию операционной системы Solaris)» . docs.oracle.com . Проверено 05 октября 2021 г.
Внешние ссылки
[ редактировать ]- Протокол управления X-сессией
- страница руководства xsm
- ksmserver , KDE менеджер сеансов
- ROX-Session , ROX Desktop. менеджер сеансов