X会话管理器

在X Window系统中，X会话管理器是一个会话管理程序，这个程序能够保存和恢复一组程序的当前运行状态。

概述

从X会话管理器的角度来看，一个会话是指给定时间的桌面状态：一组窗口以及它当前的内容。更精确的说，一个会话是一组管理窗口或与窗口有关的客户端以及允许这些程序恢复所需窗口的相关信息。
使用会话管理器最显著的效果是再次登录进入时所有窗口和状态与注销时完全一致。为达到这一点，会话管理器程序存储在注销时运行的程序名称并在再次登录时启动它们。此外，为了能较好的恢复程序的状态(恢复窗口内容是必需的)，当会话管理器要求时程序必须能保存它们的运行状态并在重启时重新装载它们。
通常，会话能在任意时刻保存或装载，即使用户没有登录或注销。保存一系列不同的会话并按用户的选择装载其中一个，这是可能的。也可以将一系列程序组合成一个会话。结果是，用户能够保存一些不同的会话，也能存储当前运行程序的状态或明确的将一些程序组合为一个会话。这样，用户可稍后决定装载某个会话。
为了能让会话包括程序的状态，程序必须能在适当的时候保存和装载它当前的状态。X 会话管理协议 (XSMP)指定程序与会话管理器该如何交互。特别重要的是窗口管理器能够与会话管理器通信，因为窗口管理器对窗口的位置和最小化有管理的责任。不能保存状态的程序也包括在会话中，但它们不能在会话中维持自己的状态。
X Window系统包含了默认的会话管理器，名字叫xsm。特定的桌面系统也开发了自己的会话管理器：例如，ksmserver是KDE默认的会话管理器。

协议

XSMP是客户间交换协议的子协议。客户端连接到会话管理器时开始协议。如何在网络中定位会话管理器是依赖系统的：对POSIX系统来说，环境变量包含了一个SESSION_MANAGER变量。因此，当客户端开始时，SESSION_MANAGER变量必须是适当的值。

本地和全局状态

当请求客户端保存状态时，窗口管理器会指定保存本地状态还是全局状态，或者都保存。两者的区别是保存的状态对其他程序是否可见。
以文本编辑器为例，保存全局状态意味着正常保存文件，其他程序都能看到被文本编辑器修改后的新文件。保存本地状态意味着保存一个文件的本地复本，其他程序都看不到文件新修改的部分。

客户端管理会话

依照XSMP协议，只要能够运行和控制其他程序状态的程序都可以是会话管理器。所以，一个客户端本身可以成为其他客户端的会话管理器。例如，Email客户端能启动一个文本编辑器来编写邮件，并在编辑器前表现的像会话管理器。因此，如果电邮客户端并闭后再启动时，它能恢复文本编辑器的状态。