blue glass block

memo and etc...

Xubuntu 17.04 で 自動 lock後、自動 suspend する

経緯

個人的に laptop を使うことが多いので、一定時間アイドルになると自動的に lock し、 更にアイドル時間が続いたら自動的に suspend して欲しい。その時 lock は早めにして欲しいけど、 suspend はもう少し後でして欲しい。と、思うのは自分だけだろうか。

しかし、XubuntuXfce + lightdm + lightlock では、 lock後、うまく自動 suspend できなかった。Xubuntu 14.04で、色々試行錯誤し、解決した方法を、17.04に移行した機に再度、まとめるために blog として残す。

以前使っていた Ubuntu 12.04 の頃の Gnome だと gnome-screensaver がユーザーセッションで起動し、自身で設定した時間経過後に lock 、またその後に suspend と、設定さえすれば、何も気にせずに自動 lock しその後に自動 suspend できていた。*1

解決方法

org.freedesktop.login1.policy を編集

xubunt 17.04 では、 /usr/share/polkit-1/actions/org.freedesktop.login1.policy にある

diff

--- org.freedesktop.login1.policy.bak
+++ org.freedesktop.login1.policy
@@ -1142,11 +1142,11 @@
                 <message xml:lang="uk">Засвідчення потрібно, щоб призупинити систему.</message>
                 <message xml:lang="zh_CN">挂起系统需要认证。</message>
                 <message xml:lang="zh_TW">暫停系統需要驗證。</message>
                 <defaults>
                         <allow_any>auth_admin_keep</allow_any>
-                        <allow_inactive>auth_admin_keep</allow_inactive>
+                        <allow_inactive>yes</allow_inactive>
                         <allow_active>yes</allow_active>
                 </defaults>
         </action>
 
         <action id="org.freedesktop.login1.suspend-multiple-sessions">
@@ -1200,11 +1200,11 @@
                 <message xml:lang="uk">Засвідчення потрібно, щоб призупинити систему, коли інші користувачі в ній.</message>
                 <message xml:lang="zh_CN">存在其他已登录用户时挂起系统需要认证。</message>
                 <message xml:lang="zh_TW">在有其他使用者登入時暫停系統需要驗證。</message>
                 <defaults>
                         <allow_any>auth_admin_keep</allow_any>
-                        <allow_inactive>auth_admin_keep</allow_inactive>
+                        <allow_inactive>yes</allow_inactive>
                         <allow_active>yes</allow_active>
                 </defaults>
                 <annotate key="org.freedesktop.policykit.imply">org.freedesktop.login1.suspend</annotate>
         </action>

詳細

<action id="org.freedesktop.login1.suspend"> タグ内の
<allow_inactive>auth_admin_keep</allow_inactive><allow_inactive>yes</allow_inactive> とする。

<action id="org.freedesktop.login1.suspend-multiple-sessions"> も、同様に編集しているが、必要があるのか、詳細については調べていない。

xfce4-power-manager の設定

アイドル時に実行するモードを suspend にする。

コマンド

$ xfconf-query --create -t int -c xfce4-power-manager -p /xfce4-power-manager/inactivity-sleep-mode-on-battery -s 1
$ xfconf-query --create -t int -c xfce4-power-manager -p /xfce4-power-manager/inactivity-sleep-mode-on-ac -s 1

詳細

デフォルトでは hibernation に設定されている(?)。さらに、 Xubuntu(というかUbuntu)では、デフォルトで hibernation は無効にされている(?)。この状態では xfce4-power-manager の GUI から設定を変更できなかったので、 xfconf-query で直接設定する。

課題

このままでも、大抵の場合うまく行くのだが、D-Busorg.freedesktop.Powermangement.Inhibit 経由で、suspend をブロックするアプリ*2が、 lock 後の自動 suspend する時間までに起動していると、 suspend がブロックされ、再度 suspend を実行されないようだ(Xubuntu 14.04時に確認)。

誰か、うまくいく方法知っていないだろうか? xfce4-power-manager でリトライさせればいいのだろうか?…

その他、 Ubuntu 18.04 からは、また GDM に戻るようだ。 Xubuntu ではどうなるんだろう?
今回の様に対策が必要ないのか、また別の方法が必要なのかはわからない。

余談

以下、余談。

自動 lock や、suspend を一時的に無効にする方法

プレゼンテーションモードを使用する

  • xfce4-panel に電源管理プラグインを追加して表示されたアイコンを左クリック → プレゼンテーションモード
  • xfce4-panel に通知エリアプラグインを追加後に、 xfce4-power-manager の Show system tray icon を 選択して表示されたアイコンを右クリック → プレゼンテーションモード

しかし、プレゼンテーションモードだと自動 lock はされない。名前の通り、プレゼンなどする時に使用するもののため、これは想定通りの動きと思われます。

Caffeine を使用する

$ sudo apt install caffeine

と、思ったけど、Xubuntu 14.04を使用していたときも、caffeine 2.6.2に独自パッチを当てていたため、これだけでは、普通に suspend されてしまった。 これについてまたの機会に…

Gnome の親切設計について

Gnome で suspend させる時は、 D-Bus 経由で suspend などをブロックしているアプリがあると、ちゃんと「このアプリが動いてるけど、本当に suspend していいのか?」と言った、ダイアログが表示される。親切。
Xfce の xfce4-session-logout では、問答無用に suspend してしまう。

*1:最近はGDMとGNOME Shellで実現されているらしいので、詳細はわからない - https://en.wikipedia.org/wiki/GNOME_Screensaver

*2:update-manager など?