CentOS 7: 電源ボタン押下でシャットダウンする

電源ボタン押下でマシンをシャットダウンする方法について記載します。ここで言う電源ボタン押下とは、電源ボタン長押しによるハードウェア電源断ではなく、ソフトウェアに通知が届くリセットのことです。

1 電源ボタン押下のデフォルトはサスペンド

CentOS 6ではデフォルトはシャットダウンでしたが、CentOS 7ではサスペンドになっており、電源ボタン押下で以下のようなメッセージとともにサスペンドするようになっています。

[   85.247233] Freezing user space processes ... (elapsed 0.001
seconds) done.
[   85.249541] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[   85.251926] Suspending console(s) (use no_console_suspend to debug)

Fedora 22でも電源ボタン押下のデフォルトはサスペンドです。しかし、Fedora 23から電源ボタン押下のデフォルトはシャットダウンに戻っています。これはデフォルト値を使うのとは別の方法のようです。

ユーザ毎の電源ボタン押下の挙動はgsettingsやgconf-editorで変更することができますが、デスクトップにログインする前の挙動を変更する方法がありません。

また仮想マシンのCentOS 7の場合、ゲストマシンをシャットダウンするのに、ゲストマシンにいちいちログインする必要があり、管理が煩雑になります。

このデフォルト値に関しはいくつか議論がされており、サスペンドにしたのはタブレット向けの議論によるもののようです。その後、デフォルト値を変更できるようにすべきという議論もあり、Fedora 23ではそれらの議論に合わせたものになったようです。

2 gnome-settings-daemonのリビルド

以下のスクリプトはデフォルト値をshutdownにしたgnome-settings-daemonをインストールします。再起動後、電源ボタン押下でCentOSがシャットダウンできるようになります。

#!/bin/sh

sudo yum install -y rpmdevtools
sudo yum-builddep -y gnome-settings-daemon
sudo yumdownloader --source gnome-settings-daemon
rpm -i gnome-settings-daemon*.src.rpm
rm -f gnome-settings-daemon*.src.rpm

cd ~/rpmbuild

cat <<EOF > SOURCES/button-power-suspend-to-shutdown.patch
--- gnome-settings-daemon-3.14.4.org/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in       2015-04-01 04:47:29.000000000 -0400
+++ gnome-settings-daemon-3.14.4/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in   2016-10-18 22:16:01.627664826 -0400
@@ -57,7 +57,7 @@
     </key>
     <!-- See https://bugzilla.gnome.org/show_bug.cgi?id=652183 for rationale -->
     <key name="button-power" enum="org.gnome.settings-daemon.GsdPowerActionType">
-      <default>'suspend'</default>
+      <default>'shutdown'</default>
       <summary>Power button action</summary>
       <description>The action to take when the system power button is pressed.</description>
     </key>
EOF

cat <<EOF | patch -p1
--- a/SPECS/gnome-settings-daemon.spec    2016-10-18 22:44:16.963433081 -0400
+++ b/SPECS/gnome-settings-daemon.spec    2016-10-18 22:44:50.565951707 -0400
@@ -30,6 +30,8 @@ Patch4: 0001-mouse-Do-not-disable-touchp
 # https://bugzilla.redhat.com/show_bug.cgi?id=1260081
 Patch5: 0001-smartcard-use-NSS_InitContext-instead-of-NSS_Initial.patch

+Patch6: button-power-suspend-to-shutdown.patch
+
 Requires: control-center-filesystem
 Requires: colord

@@ -110,6 +112,7 @@ developing applications that use %{name}
 %patch3 -p1 -b .power-actions-when-locked
 %patch4 -p1 -b .touchpad-buttons
 %patch5 -p1 -b .smartcard-fix
+%patch6 -p1 -b .button-power

 autoreconf -i -f

EOF

rpmbuild -ba SPECS/gnome-settings-daemon.spec
sudo yum localinstall -y RPMS/x86_64/gnome-settings-daemon*.rpm
sudo reboot