BIOS开启ACPI

每个人BIOS都不一样,自己搜

屏蔽默认电源按钮事件

先备份logind.conf

1
cp /etc/systemd/logind.conf  /etc/systemd/logind.conf.bak

编辑

1
nano /etc/systemd/logind.conf

改动如下,其他不动

1
2
HandlePowerKey=ignore
PowerKeyIgnoreInhibited=no

重启服务或reboot

1
systemctl restart systemd-logind

获取电源按钮事件ID

安装ACPI支持

1
apt install acpid acpi-support

使用acpi_listen开启监听,然后去按一下电源键,复制PBTN这一行,如下示例。

1
2
3
root@amd:~# acpi_listen
button/power PBTN 00000080 00000000
button/power LNXPWRBN:00 00000080 00000001

编辑事件触发动作

新建一个事件文件

1
nano /etc/acpi/events/powerbtn

输入以下内容,PBTN一行改成你自己复制的

1
2
3
event=button/power PBTN 00000080 00000000

action=/etc/acpi/power_btn.sh

编辑动作脚本

1
nano /etc/acpi/power_btn.sh

下面的直接粘贴进去

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

# 获取虚拟机 102 的状态
output=$(qm status 100)

# 判断虚拟机是否正在运行
if [[ $output == *"running"* ]]; then
# 如果虚拟机正在运行,执行关机操作
qm shutdown 100
else
# 如果虚拟机没有运行,执行启动操作
qm start 100
fi

然后赋权

1
chmod +x /etc/acpi/power_btn.sh

最后重启一下acpid服务

1
systemctl restart acpid

Enjoy it !