X Window Systemでは、X セッション マネージャーはセッション管理プログラムであり、ウィンドウ マネージャーを含む実行中の一連のアプリケーションの現在の状態を保存および復元できるプログラムです。
概要
X セッション マネージャーの観点から見ると、セッションとは、特定の時点における「デスクトップの状態」、つまり現在のコンテンツを含むウィンドウのセットです。より正確には、セッションとは、これらのウィンドウを管理している、またはそれらに関連するクライアントのセットと、必要に応じてこれらのアプリケーションがこれらのウィンドウの状態を復元できるようにする情報です。
セッション マネージャーを使用することで得られる最も顕著な効果は、対話型セッションからログアウトした後、再度ログインしたときにまったく同じ状態のウィンドウが表示されることです。これを実現するには、セッション マネージャー プログラムがログアウト時に実行中のアプリケーションの名前を保存し、ログイン時にそれらを再度起動します。さらに、アプリケーションの状態も復元するには (ウィンドウの内容を復元するために必要)、アプリケーションはセッション マネージャーからの要求に応じて実行状態を保存し、再度起動したときにそれを読み込むことができる必要があります。
一般的に、ユーザーがログインまたはログアウトしていない場合でも、セッションはいつでも保存またはロードできます。また、複数の異なるセッションを保存し、ユーザーの選択に応じてそのうちの 1 つをロードすることもできます。セッションは、セッションを構成するアプリケーションのリストを提供することによっても指定できます。その結果、ユーザーは、現在実行中のアプリケーションの実行状態を保存するか、セッションを構成するアプリケーションを明示的にリストすることによって、異なるセッションのセットを保存できるようになります。このようにして、ユーザーは後で特定のセッションをロードすることを決定できます。
XSMP プロトコル
セッションにアプリケーションの状態を含めるには、セッション マネージャーが要求したときに (通常はユーザーのログインまたはログアウト時に)、アプリケーションが現在の状態を保存して読み込むことができなければなりません。Xセッション管理プロトコル(XSMP) というプロトコルは、アプリケーションとセッション マネージャーのやり取り方法を指定します。XSMP メッセージの形式は、Inter-Client Exchange (ICE) メッセージの形式と同じです。[1]特に重要なのは、ウィンドウ マネージャーがセッション マネージャーと通信できることです。ウィンドウ マネージャーはウィンドウの配置とアイコンの存在を担当しているためです。状態を保存できないアプリケーションをセッションに含めることはできますが、セッション間で状態は保持されません。
プロトコル
XSMP は、クライアント間交換プロトコルのサブプロトコルです。クライアントは、セッション マネージャーに接続してプロトコルを開始します。セッション マネージャーがネットワーク上でどのように配置されるかはシステムによって異なります。POSIXシステムでは、環境に変数が含まれています。したがってSESSION_MANAGER、クライアントが起動されると、その環境に適切な値を持つこの変数が含まれている必要があります。
識別子
このプロトコルでは、次の 2 つの事実を考慮に入れています。
- セッションを適切に再開するには、セッション内で実行されているアプリケーションを再起動するだけでなく、それらのアプリケーションを以前の状態に戻すように再起動する必要があります。
- 同じアプリケーションが同じセッションまたは異なるセッションで複数回実行される場合があります。

同じアプリケーションの異なるインスタンスが、同じセッションまたは異なるセッションで同時にアクティブになる場合があり、これらのインスタンスは実行状態が異なっている可能性が高くなります。たとえば、ユーザーがファイル でテキスト エディターを起動し/etc/passwd、次にletter.txt同じセッションでファイル で起動し、次にtodo.txt別のセッションでファイル で起動したとします。
セッションを適切に復元するには、同じアプリケーションの異なるインスタンスがセッション マネージャーによって異なるものとして認識される必要があります。このため、セッション マネージャーは各アプリケーションの各インスタンスに一意の識別子を選択します。これにより、セッション マネージャーは、 で実行されているテキスト エディター/etc/passwdと で実行されているテキスト エディターをtodo.txt、同じプログラムの 2 つのインスタンスであっても区別できます。
識別子は一意である必要があります。特に、セッション マネージャーによって管理されるすべてのセッションで一意である必要があります。 で実行されているテキスト エディターの識別子は、 で/etc/passwd実行されている同じテキスト エディターと異なるだけでなくletter.txt、別のセッションで実行されているテキスト エディターとも異なりtodo.txtます。クライアントの識別子は、セッションがシャットダウンされて再起動されても同じままです。
プロトコルの主な部分
セッション管理プロトコルの主な部分は次のとおりです。
- セッションマネージャは各クライアントに一意の識別子を選択する
- セッションマネージャはクライアントに状態を保存するよう要求する
- クライアントは、状態を復元するためにどのように再起動する必要があるかを指定します(例:プロセスを開始するために使用するコマンドライン)
最後のポイントは、セッション マネージャーがすべてのクライアントの一連のプロパティ (X ウィンドウ システムの用語では、プロパティは単にデータのコンテナー) を管理しているために可能になります。これらの情報は、クライアントによっていつでも変更できます。これらのプロパティの 1 つは という名前でRestartCommand、クライアントを再起動する方法に関する情報が含まれています。
セッション マネージャーがクライアントに状態を保存するように要求すると、アプリケーションは次のように処理を進めます。
- 2つの異なるインスタンスの状態を区別できるように状態を保存します。これは、たとえば、名前に識別子が含まれるファイルに状態を保存することで実現できます。
- 再起動方法の指定を
RestartCommandプロパティに格納します。このプロパティには、次の理由からクライアント識別子が含まれている必要があります。- アプリケーションは再起動時に識別子を保持する必要がある
- 識別子は状態を復元するために必要である(例えば、状態が保存されているファイルを見つけるために必要である)
セッション マネージャーは、 のほかにも他のプロパティを管理しますRestartCommand。たとえば、 プロパティは、セッションが破棄された場合にアプリケーションを実行する方法を指定します。
ローカルおよびグローバル状態
クライアントに状態を保存するように要求する場合、ウィンドウ マネージャーは、ローカル状態またはグローバル状態 (あるいはその両方) を保存するかどうかを指定できます。違いは、保存の結果を他のアプリケーションに表示するかどうかです。
テキスト エディターの場合、グローバル状態を保存するということは、他のアプリケーションがファイルの新しいバージョンを使用できるように、ファイルを通常どおり保存することを意味します。ローカル状態を保存するということは、他のアプリケーションがファイルを元のバージョンで表示できるように、ファイルのローカル コピーを保存する必要があることを意味します。
例
xyz以下は、このアプリケーションがセッションで初めて起動され、その後ユーザーがログアウトして再度ログインしたときに、
セッション マネージャーと仮想テキスト エディターが対話する主な手順です。
- アプリケーションはクライアント間交換プロトコルを介してセッションマネージャに接続します。
- アプリケーションはセッションマネージャに、これが初めての起動であり、以前の識別子がない(したがって、以前の状態がない)ことを伝えます。
- セッション マネージャーは、クライアントに一意の識別子 (例: ) を送信して応答します
4324。 - セッションマネージャは、クライアントにローカル状態を保存するように直ちに要求します(クライアントが初めて起動されたため)。
- クライアントは、コマンドラインをセッション マネージャーの
xyz -sid 4324プロパティとして保存します (これもシステムに依存します。POSIXシステムでは、このプロパティには実際に argv配列が含まれます)RestartCommand - クライアントは状態をローカルに保存します。たとえば、編集したファイルの名前とその他のすべての情報(現在の行など)をローカルファイルに保存する場合があります。
.temp-4324 - ユーザーがログアウトすると、セッションマネージャはすべてのクライアントに状態を保存する必要があることを通知するメッセージを送信します。
- クライアントは
4324再び従う - すべてのクライアントがセッションマネージャに状態が保存されたことを通知すると、セッションマネージャはセッションをシャットダウンします。
クライアントに状態を保存するように指示された場合、ユーザーとの限定的な対話を行う可能性と行わない可能性 (たとえば、編集したファイルを保存するかどうかをユーザーに確認するなど) がある場合があります。いずれにしても、状態が保存されると、適切なメッセージを送信してセッション マネージャーに通知します。
セッションが再開されると、次のことが起こります。
- セッションマネージャは、クライアントに関連付けられた
4324プロパティに格納されている内容を実行してクライアントを再起動します。RestartCommand4324 - したがって、アプリケーションは として起動されます
xyz -sid 4324。これにより、アプリケーションは識別子を認識します。 - アプリケーションはファイルから状態情報を取得します
.temp-4324 - アプリケーションは識別子を指定してセッションマネージャに接続し
4324、セッションマネージャはこれが新しいクライアントではなく、再起動する古いクライアントであることを認識します。
クライアント管理セッション
XSMP プロトコルによれば、セッション マネージャは、他のアプリケーションの状態を実行して制御する任意のプログラム (サーバー) です。その結果、クライアント自体が他のクライアントのセッション マネージャになることができます。たとえば、メール クライアントは、電子メールを書くためにテキスト エディタを起動し、そのエディタに対してセッション マネージャとして動作することができます。このようにして、メール クライアントを閉じて再起動すると、テキスト エディタの状態を復元できます。[引用が必要]
実装
X Window System には、と呼ばれるデフォルトのセッション マネージャーが含まれています。他のセッション マネージャーは、特定のデスクトップ環境xsm向けに開発されています。
翻訳
ksmserverKDE Plasma 5デスクトップ環境のデフォルトのセッションマネージャです。[2] [3]
エクセ
xfce4-sessionプログラムは、 XfceベースのDEのデフォルトのXセッションマネージャです。Xfceでは、さまざまなセッションを作成し、起動時に選択することができます。 [4] [5]
ノーム
gnome-sessionGnome DEのデフォルトのセッションマネージャーです。Gnomeはv1.xからXSMPをサポートしています。2013年のGNOMEは、バージョン2.24でGNOMEセッションマネージャーXSMPをD-Busインターフェースに置き換えるつもりでした。 [6]最終的には、両方のインターフェースを統合し、レガシーアプリケーション用のアダプター(クライアント)を提供することが決定されました。[7]ただし、当時は機能が完全ではなく、GNOME以外のアプリケーションでは使用されていませんでした。[8] 2021年現在、コードベースには依然としてXセッションマネージャークライアントが含まれています。
アプリケーション間のサポート
実行可能アプリケーションは通常、セッション サポート (セッション マネージャーとのやり取り) のサポートを直接埋め込む (ライブラリにリンクする) のではなく、セッション管理とクライアント サーバー交換のルーチンを提供する KDE Plasma や GTK などの SDK を介してこれを行います。一部のアプリケーションではサポートされない場合があります。
参照
参考文献
- ^ 「Xセッション管理プロトコル」www.x.org . 2020年12月2日閲覧。
- ^ 「KDE デスクトップ ユーザー ガイド - KSMServer」。www.linuxtopia.org 。2021年 10 月 5 日閲覧。
- ^ "ksmserver · master · Plasma / Plasma Workspace". GitLab . 2021年10月5日閲覧。
- ^ “xfce:xfce4-session:start [Xfce Docs]”. docs.xfce.org . 2021年10月5日閲覧。
- ^ “xfce:xfce4-session:preferences [Xfce Docs]”. docs.xfce.org . 2021年10月5日閲覧。
- ^ 「Projects/SessionManagement/GnomeSession - GNOME Wiki!」. wiki.gnome.org .
- ^ 「Projects/SessionManagement/NewGnomeSession - GNOME Wiki!」. wiki.gnome.org . 2021年10月5日閲覧。
- ^ 「第 6 章 セッション管理 (GNOME 2.0 デスクトップ Solaris オペレーティング環境システム管理ガイド)」。docs.oracle.com 。 2021 年 10 月 5 日閲覧。
