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

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

1 電源ボタン押下によるダイアログ

電源ボタンを押した場合、「画面ロック、サスペンド、再起動、シャットダウン」を選択するダイアログが表示されます。

0001_Power-Button.png

これは仮想環境でホストマシンからゲストマシンを再起動やシャットダウンするのを阻害します。

例えばlibvirtの場合、virsh shutdownやvirsh rebootを実行すると、上記のダイアログが表示される為、ゲストマシンでの操作が必要になります。なお、ハードウェアの電源断はvirsh destroyに該当します。

2 /usr/share/acpi-support/power-funcsの追加

電源ボタンが押されると/etc/acpi/powerbtn.shが呼び出されます。/etc/acpi/powerbtn.shは/usr/share/acpi-support/power-funcsが存在する場合は実行し、その後に先ほどのダイアログを表示させます。

/usr/share/acpi-support/power-funcsはデフォルトでは存在しません。/usr/share/acpi-support/power-funcsを追加して、shutdownを実行します。

$ sudo su -c 'cat <<EOF > /usr/share/acpi-support/power-funcs
#!/bin/sh
test -f /var/lock/acpisleep && exit 0
sudo shutdown -h now
EOF
'
$ sudo chmod a+x /usr/share/acpi-support/power-funcs

これにより、virsh rebootとvirsh shutdownは期待どおりに動作します。