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

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

1 電源ボタン押下のアクションをシャットダウンにする

GUIとCUIでアクションをシャットダウンに変更する方法について記載します。

1.1 GUIで変更する

以下の手順で"Power Management"のダイアログを開きます。

Application -> Configure Desktop -> Hardware -> Power Management

"Energy Saving"の"Button events handling"のアクションを"Shutdown"にします。

0001_button-events-handling.png

1.2 CUIで変更する

${HOME}/.kde4/share/config/powermanagementprofilesrcを以下のように変更します。

> patch -p1 <<EOF
diff -uprN a b
--- a/.kde4/share/config/powermanagementprofilesrc 2016-12-11 20:37:20.989520207 +0900
+++ b/.kde4/share/config/powermanagementprofilesrc 2016-12-11 20:38:06.505098605 +0900
@@ -9,7 +9,7 @@ idleTime=300000

 [AC][HandleButtonEvents]
 lidAction=1
-powerButtonAction=16
+powerButtonAction=8

 [Battery]
 icon=battery-060
EOF

2 SSH接続していると確認ダイアログでシャットダウンが阻害される

SSH接続していると"Turn Off Computer"というタイトルのダイアログが表示され、OKを押すまでシャットダウンされません。

0002_abort-active-session.png

このダイアログはkdmパッケージによるもので、現状はダイアログの表示を抑制する方法はソースコードを変更するしかありません。そこでソースコードを変更して、rpmbuildでkdmパッケージを作り直します。kdmパッケージのソースコードはkdebase4-workspaceに含まれます。

rpmbuildを実行する為にrpm-buildをインストールします。

> sudo zypper -n in rpm-build

kdebase4-workspaceのソースコードをインストールして、~/rpmbuildにコピーします。

> sudo zypper -n si kdebase4-workspace
> mkdir ~/rpmbuild
> cp -a /usr/src/packages/* ~/rpmbuild
> cd ~/rpmbuild

ダイアログを表示する処理を無効化するパッチを作成します。

> cat <<EOF > SOURCES/kdm-force-shutdown.patch
diff -uprN kde-workspace-4.11.20.org/kdm/kfrontend/kdmshutdown.cpp kde-workspace-4.11.20/kdm/kfrontend/kdmshutdown.cpp
--- kde-workspace-4.11.20.org/kdm/kfrontend/kdmshutdown.cpp 2015-05-29 10:30:26.000000000 +0900
+++ kde-workspace-4.11.20/kdm/kfrontend/kdmshutdown.cpp 2016-12-18 12:47:02.930448162 +0900
@@ -570,6 +570,7 @@ KDMSlimShutdown::checkShutdown(int type,
 void
 KDMSlimShutdown::externShutdown(int type, const QString &os, int uid, bool ask)
 {
+#if 0 /* Force shutdown */
     QList<DpySpec> sess = fetchSessions(lstRemote | lstTTY);
     if (ask || !sess.isEmpty() || (uid && _allowShutdown == SHUT_ROOT)) {
         int ret = KDMConfShutdown(uid, sess, type, os).exec();
@@ -580,6 +581,7 @@ KDMSlimShutdown::externShutdown(int type
             return;
         }
     }
+#endif
     doShutdown(type, os);
 }

EOF

SPECファイルでパッチを適用するようにします。

> patch -p1 <<EOF
diff -uprN a/SPECS/kdebase4-workspace.spec b/SPECS/kdebase4-workspace.spec
--- a/SPECS/kdebase4-workspace.spec     2015-06-13 09:16:13.000000000 +0900
+++ b/SPECS/kdebase4-workspace.spec     2016-12-18 05:07:56.014437504 +0900
@@ -147,6 +147,7 @@ Patch71:        kde-workspace-4.11.0-kdm
 Patch72:        much-more-plasma-debug.patch
 # PATCH-FIX-OPENSUSE systemsettings-desktop-kde4.diff -- Changes name of System Settings to Configure KDE 4 Applications
 Patch73:        systemsettings-desktop-kde4.diff
+Patch1000:      kdm-force-shutdown.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Requires:       %{name}-branding = %{_kde_branding_version}
 Requires:       %{name}-ksysguardd = %{version}
@@ -403,6 +404,7 @@ This package contains the KDE Workspace
 %if %suse_version > 1320
 %patch73
 %endif
+%patch1000 -p1

 cp %{SOURCE3} kwin/effects/cube/data/cubecap.png

EOF

rpmbuildでkdmパッケージを作成します。

> rpmbuild -ba SPECS/kdebase4-workspace.spec

kdmパッケージをインストールして、一度システムを再起動します。これ以降はダイアログが表示されません。

> sudo zypper -n in RPMS/x86_64/kdm-4.11.20-29.5.x86_64.rpm
> sudo reboot