Ubuntu 20.04 で電源ボタンを無効にする
スティックPCに Ubuntu 20.04 をインストールしたのですが、スティックPC本体を持つ位置にちょうど電源ボタンがあり、ついついシャットダウンさせてしまうことがあり、電源ボタンを無効にできないか調べました。
Linuxでの電源管理はAPMとACPIがありますが、今時のPCならだいたいACPIではないでしょうか。念のため、確認します。
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
$ dmesg |grep ACPI|head
[ 0.000000] BIOS-e820: [mem 0x000000000008f000-0x000000000008ffff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x000000007b08c000-0x000000007b0b1fff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x000000007b0b2000-0x000000007b176fff] ACPI NVS
[ 0.000000] efi: ESRT=0x7b38bb98 ACPI=0x7b093000 ACPI 2.0=0x7b093000 SMBIOS=0x7b366000 SMBIOS 3.0=0x7b365000
[ 0.012859] ACPI: Early table checksum verification disabled
[ 0.012869] ACPI: RSDP 0x000000007B093000 000024 (v02 INTEL )
[ 0.012879] ACPI: XSDT 0x000000007B093098 0000B4 (v01 Intel COMSTKFC 01072009 AMI 00010013)
[ 0.012895] ACPI: FACP 0x000000007B0AFEB8 00010C (v05 Intel COMSTKFC 01072009 AMI 00010013)
[ 0.012912] ACPI: DSDT 0x000000007B0931E0 01CCD7 (v02 Intel COMSTKFC 01072009 INTL 20120913)
[ 0.012924] ACPI: FACS 0x000000007B176F80 000040
$
ACPIを制御するのは systemd から起動する systemd-logind.service というユニットでした。
man systemd-logind
を見ると「Handling of power/sleep hardware keys」と記載されており、「See logind.conf(5) for information about the configuration of this service.」と指示されていたので、 man logind.conf
します。
Controls how logind shall handle the system power and sleep keys and the lid switch to trigger actions such as
logind.conf(5)
system power-off or suspend. Can be one of “ignore”, “poweroff”, “reboot”, “halt”, “kexec”, “suspend”,
“hibernate”, “hybrid-sleep”, “suspend-then-hibernate”, and “lock”. If “ignore”, logind will never handle these
keys.
ということで、/etc/systemd/logind.conf に以下を追加。
HandlePowerKey=ignore
systemd を再起動。
# systemctl restart systemd-logind.service
んで、おそるおそる電源ボタンをぽちって押してみると、何も起こらないのでした。めでたしめでたし。