В системе X Window менеджер сеансов X — это программа управления сеансами , которая может сохранять и восстанавливать текущее состояние набора запущенных приложений, включая оконный менеджер .
С точки зрения менеджера сеансов X, сеанс — это «состояние рабочего стола» в данный момент времени: набор окон с их текущим содержимым. Точнее, сеанс — это набор клиентов, управляющих этими окнами или связанных с ними, и информация, которая позволяет этим приложениям восстанавливать состояние этих окон при необходимости.
Наиболее узнаваемым эффектом использования менеджера сеансов является возможность выхода из интерактивного сеанса и последующего обнаружения точно таких же окон в том же состоянии при повторном входе. Чтобы это работало, программа менеджера сеансов сохраняет имена приложений, которые запущены при выходе из системы, и запускает их снова при входе в систему. Более того, для восстановления состояния приложений (что необходимо для восстановления содержимого окон) приложения должны иметь возможность сохранять свое состояние выполнения по запросу от менеджера сеансов и загружать его обратно при повторном запуске.
В общем, сеанс может быть сохранен или загружен в любое время, даже если пользователь не входит в систему или не выходит из нее. Также возможно сохранить несколько различных сеансов и загрузить один из них по выбору пользователя. Сеансы также могут быть указаны путем предоставления списка приложений, которые составляют сеанс. В результате пользователь имеет возможность сохранить набор различных сеансов, либо сохраняя состояние выполнения текущих запущенных приложений, либо явно перечисляя приложения, которые составляют сеанс. Таким образом, пользователь может позже принять решение о загрузке данного сеанса.
Чтобы сеанс включал состояние приложения, приложение должно иметь возможность сохранять и загружать свое текущее состояние, когда менеджер сеансов запрашивает это (обычно при входе или выходе пользователя из системы). Протокол под названием X Session Management Protocol (XSMP) определяет, как взаимодействуют приложения и менеджеры сеансов. Формат сообщения XSMP совпадает с форматом сообщения Inter-Client Exchange (ICE). [1] Особое значение имеет то, что менеджер окон может взаимодействовать с менеджером сеансов, поскольку менеджер окон отвечает за размещение окон и наличие значков. Приложения, которые не могут сохранять свое состояние, могут быть включены в сеанс, но они не сохраняют свое состояние между сеансами.
XSMP — это подпротокол протокола Inter-Client Exchange Protocol . Клиент запускает протокол, подключаясь к менеджеру сеансов. Расположение менеджера сеансов в сети зависит от системы: в системе 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, менеджер сеансов — это произвольная программа (сервер), которая запускает и контролирует состояние других приложений. В результате клиент сам может быть менеджером сеансов других клиентов. Например, почтовый клиент может запустить текстовый редактор для написания электронного письма и вести себя как менеджер сеансов по отношению к редактору. Таким образом, если почтовый клиент закрыт и затем перезапущен, он может восстановить состояние текстового редактора. [ необходима цитата ]
Система X Window включает в себя менеджер сеансов по умолчанию, называемый xsm
. Другие менеджеры сеансов были разработаны для определенных сред рабочего стола .
ksmserver
является менеджером сеансов по умолчанию в среде рабочего стола KDE Plasma 5. [2] [3]
xfce4-session
Программа является стандартным X Session Manager для DE на базе Xfce . 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, которые предоставляют процедуры для управления сессиями и клиент-серверного обмена. Некоторые приложения могут не поддерживать.