GNOME3.6でセッションの保存と復元が行われない理由


これは何か

GNOMEに移行してからログアウトやシャットダウン後の「セッションの保存と復元」が行われない理由を調べた。

結論

今のGNOMEでは無理。

  • Desktop: Gnome 3.36.9
  • wm: gnome-shell (mutter)
  • dm: GDM3 3.36.3
  • Distro: Ubuntu 20.04.4 LTS (Focal Fossa)
# 環境
inxi -Sxxx
System:    Host: user-comps Kernel: 5.13.0-39-generic x86_64 bits: 64 compiler: N/A Desktop: Gnome 3.36.9 wm: gnome-shell 
           dm: GDM3 3.36.3 Distro: Ubuntu 20.04.4 LTS (Focal Fossa)

KDEやxfceで実現可能かはわからない。[1]

  • ~/.config/gnome-session/saved-sessionは存在している
    • .desktopファイルを置くことで自動起動できるようにする予定だったみたい。

設定項目

gsetting set org.gnome.SessionManager auto-save-session true
本来ならこれだけで機能するはず。(~/.config/gnome-session/saved-session/内に現在のセッションを記録した.desktopファイルが作成される予定だった。今はautostartにのみ使われている。)

gnome-sessionの自動保存が正しく働かない背景


auto_save_is_enabled関数
Note that saving/restoring sessions is not really possible on systemd, as XSMP clients cannot be reliably mapped to .desktop files.(XSMPクライアントを.desktopファイルに確実にマッピングできないため、systemdではセッションの保存/復元は実際には不可能であることに注意してください。)
https://gitlab.gnome.org/GNOME/mutter/-/issues/1183
gnome-session should not save/restore RequiredComponents


  • <意訳>
    • " and we're in a wayland world now, so maybe we should finally cut the cord, not sure." (メンテナ:うちらはもうウェイランドワールドにいるんだからさ、最終的に切り捨てちゃっていいと思うんだ<意訳>)
    • It is broken already though. ( メンテナ:もうとっくに壊れてるよ<意訳> )
    • It simply cannot work in a systemd world anyway. Then, for 3.36, remove it entirely. (メンテナ:とにかくsystemd世界じゃ動かない。バージョン3.36になったら完全にコードを削除するよ<意訳>)
    • ↑GNOMEらしいといえばGNOMEらしいやりとり。
    • 一応2011年ごろは新機能として意見を出し合ってた形跡はありました。
  • 本来ではsystemd-logind.serviceと統合したかった?どのように?
  • やめるならやめるでドキュメントに反映させないとなぁ…(ヽ´ω`)

回避策

  • GNOME session save and restore
    • 試していない。というか公式の機能でできないと分かったのでシステムをいじくり回したくない。

参考リンク

  • X session manager(wikipedia[en])
  • gnome-session 2.29.92内に 重大 として分類された脆弱性が発見されました(おまけ)
  • GnomeSession TNG
    • 大規模なコードの腐敗。XSMPコアの多くはGNOME1.x以降変更されておらず、XSMPコアがいくつかのことを実行する理由は本当に不明です。
    • 自動起動とXSMPの統合が不十分
    • ハードコーディングされた機能が多すぎます。gnome-sessionは十分な拡張性を提供しないため、デフォルトのGNOMEセッションの特定のコンポーネントを追加または変更する場合、人々はgnome-sessionにハッキングすることを余儀なくされます。
  • GNOME /gnome-session
    • ソースコード該当部分(GitLab, gnome-session, gsm-manager.c, 1979行目)

      auto_save_is_enabled (GsmManager manager)
      /
      Note that saving/restoring sessions is not really possible on systemd, as XSMP clients cannot be reliably mapped to .desktop files. */(systemd使うんならマジで無理<意訳>)

  • X Session Management Library

    Xセッション管理プロトコル(XSMP)の目的は、ユーザーがセッションを保存および復元するための統一されたメカニズムを提供することです。...セッションマネージャは、ユーザーに代わってクライアントにコマンドを発行します。...クライアントは、後でクライアントを再起動して、終了したことがないかのように操作を再開できるように、状態を保存することが期待されます。<機械翻訳>

  • gnome-session issue(GitLab > gnome-session-issue)
  • man systemd-logind.service
    • Keeping track of users and sessions, their processes and their idle state.(ユーザーとセッション、それらのプロセス、およびそれらのアイドル状態を追跡します。)
  • {August 1, 2011} Beyond Activities: Cross-Device Sessions

あとがき

なんというか、upstart systemd mir waylandあたりで揉めてたあたり、なんか関係ないところまで罵声が聞こえるような状態が2000年過ぎてからだったと思うから、15年以上前からこんな状態なのね…。
それまでずっとGNOMEユーザーでしたが「新機能つけました!」使って慣れる→「やっぱ美しくないからコードごと捨てたわ」ってのが何回かあり、xfce環境に移行していました。その頃waylandなんかは「実現すればバグのないサックサクの環境が手に入る!Xが全て悪い!(偏った思い出)」って喧伝してた感じがするし、mirとかシャトルワースは狂ってるか独裁者だ!なんてのも聞こえてたような気がします。xfce環境にいたら静かに仕事ができそうだったし実際に静かだったので時代に乗り遅れ?ました。少しは未来に期待していた気がします。「そうかぁ、さっくさくかぁ。」とか。そんな程度の関心度でした。

一部を除いてボランティアですものね。すごいよなぁ。
GNOMEの悪口を言いたいのではないのです。離れてる間、(機能的に)ものすごく美しくなりました。

ごめんなさい、昔話でした。。

脚注
  1. Implementationsksmserverxfce4-sessionなど。 ↩︎