CentOS7
systemd と gnome-settings-daemon によって電源ボタンが管理されている。
gnomeがインストーされていない場合は、systemdが管理している。
電源ボタンでシャットダウンする(gnomeがインストールされていない場合)
電源ボタンでシャットダウンする場合
/etc/systemd/logind.conf
HandlePowerKey=poweroff
設定をリロード
systemctl restart systemd-logind.service
電源ボタンでシャットダウンする(gnomeがインストールされている場合)
gnome-settings-daemonがユーザごとに org.gnome.settings-daemon.plugins.power.power-button-action の値を見ている。
ログイン画面の場合は gdmユーザの値を見る。
標準のままでは、nothing、suspend、hibernateしか選べないので
gnome-settings-daemonを再コンパイルする必要がある。
gnome-settings-daemonをコンパイルする
https://www.hiroom2.com/2016/10/19/centos-7-%E9%9B%BB%E6%BA%90%E3%83%9C%E3%82%BF%E3%83%B3%E6%8A%BC%E4%B8%8B%E3%81%A7%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B/
https://unix.stackexchange.com/questions/242129/gnome-3-how-to-set-power-button-to-shutdown-instead-of-suspend
準備
sudo yum install -y rpmdevtools sudo yum-builddep -y gnome-settings-daemon sudo yumdownloader --source gnome-settings-daemon cd ~/rpmbuild/ rpmbuild -ba SPECS/gnome-settings-daemon.spec <-- ビルドできるか確認 cd BUILD cp -rp gnome-settings-daemon-3.22.2 gnome-settings-daemon-3.22.2.org
ソース修正
diff -uprN gnome-settings-daemon-3.22.2.org/data/gsd-enums.h gnome-settings-daemon-3.22.2/data/gsd-enums.h
--- gnome-settings-daemon-3.22.2.org/data/gsd-enums.h 2016-10-08 23:08:22.000000000 +0900
+++ gnome-settings-daemon-3.22.2/data/gsd-enums.h 2017-12-16 12:57:05.680314214 +0900
@@ -114,7 +114,8 @@ typedef enum
{
GSD_POWER_BUTTON_ACTION_NOTHING,
GSD_POWER_BUTTON_ACTION_SUSPEND,
- GSD_POWER_BUTTON_ACTION_HIBERNATE
+ GSD_POWER_BUTTON_ACTION_HIBERNATE,
+ GSD_POWER_BUTTON_ACTION_SHUTDOWN
} GsdPowerButtonActionType;
typedef enum
diff -uprN gnome-settings-daemon-3.22.2.org/plugins/media-keys/gsd-media-keys-manager.c gnome-settings-daemon-3.22.2/plugins/media-keys/gsd-media-keys-manager.c
--- gnome-settings-daemon-3.22.2.org/plugins/media-keys/gsd-media-keys-manager.c 2017-12-16 12:54:33.099018583 +0900
+++ gnome-settings-daemon-3.22.2/plugins/media-keys/gsd-media-keys-manager.c 2017-12-16 12:58:28.447409152 +0900
@@ -1990,6 +1990,9 @@ do_config_power_button_action (GsdMediaK
action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
switch (action_type) {
+ case GSD_POWER_BUTTON_ACTION_SHUTDOWN:
+ do_config_power_action (manager, GSD_POWER_ACTION_SHUTDOWN, in_lock_screen);
+ break;
case GSD_POWER_BUTTON_ACTION_SUSPEND:
do_config_power_action (manager, GSD_POWER_ACTION_SUSPEND, in_lock_screen);
break;
パッチ作成
diff -uprN gnome-settings-daemon-3.22.2.org gnome-settings-daemon-3.22.2 > ../SOURCES/shutdown.patch
パッチ適用
vim ../SPECS/gnome-settings-daemon.spec
Patch5: shutdown.patch <-- 他のパッチと同じように追記 %patch5 -p1 <-- こっちも他のパッチと同じように追記
ビルド
rpmbuild -ba SPECS/gnome-settings-daemon.spec
インストール
yum localinstall RPMS/x86_64/gnome-settings-daemon-3.22.2-5.el7.centos.x86_64.rpm
設定変更
ユーザごとに設定を変更する。
dconf-editor や gsettings などを使う。
| パス | 設定値 |
|---|---|
| /org/gnome/settings-daemon/plugins/power/power-button-action | 'shutdown' |
dconfの場合 dconf write /org/gnome/settings-daemon/plugins/power/power-button-action "'shutdown'" gsettingsの場合 gsettings set org.gnome.settings-daemon.plugins.power power-button-action shutdown
ログイン画面で電源ボタンでシャットダウンするにはgdmユーザに対して設定する
dconfの場合 sudo -u gdm dbus-launch dconf write /org/gnome/settings-daemon/plugins/power/power-button-action "'shutdown'" gsettingsの場合 sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.power power-button-action shutdown
その他の設定
/etc/systemd/logind.conf にも以下の設定が必要らしいが、設定しても特に効いていないように思う・・・。
HandlePowerKey=poweroff PowerKeyIgnoreInhibited=yes
CentOS5
$ dmesg | grep ACPI
で何か表示されたらACPI。
$ dmesg | grep APM
で何か表示されたらAPM。
BIOSの設定で、電源ボタンを押しても何も起きないように設定しておく必要あり。
(4秒以上電源ボタンを押さないと電源が落ちない、サスペンド機能オフなど)
電源ボタンでshutdown(APM編)
| フ ァ イ ル | 内 容 |
|---|---|
| /etc/sysconfig/apmd | 主要設定ファイル |
| /etc/sysconfig/apm-scripts/apmscript | APM動作時に実行されるスクリプト |
| /etc/sysconfig/apm-scripts/apmcontinue | ユーザ定義スクリプト |
電源ボタンでshutdown(ACPI編)
/etc/acpi/events に次の内容を例えば power という名前で保存します。
# /etc/acpi/events/power event=button.power.* action=/sbin/poweroff
バッテリーの残量などでシャットダウンしたい場合は
/proc/acpi/battery/BAT1/state
に情報がある。
またログは
/var/log/acpi
にある。
/etc/acpi/events/batteryファイル
event=battery action=/etc/acpi/battery.sh
/etc/acpi/battery.sh
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
STAT=/proc/acpi/battery/BAT0/state
if grep "capacity state:.*critical" $STAT > /dev/null 2>&1; then
shutdown -h +1 "Battery critical"
fi
とするとバッテリー残量が少なくなると自動でシャットダウンするはず・・・。
参考
http://blog.fuktommy.com/1118236244
http://www.gentoo.org/doc/ja/power-management-guide.xml
http://www.fujirushi.jp/bekkan/ybb/ybb5.html
http://www.shino.pos.to/linux/pwrsw.html
[通知用URL]
Tweet
最終更新時間:2017年12月16日 13時15分47秒