在B站上看到有UP用电源键控制PVE中的虚拟机开关,出于好奇便实践了一番。

这里已经将显卡等硬件直通给了win11虚拟机,为了更贴近个人电脑的使用习惯,方便不了解PVE的人使用,需要使用电源键控制虚拟机启停。(还避免了顺手按电源键把PVE给关了)

本文只是用于记录,过程参考了 物理电源键控制PVE虚拟机开关

image.png

开始

在BIOS中启动ACPI

屏蔽默认电源按钮事件

先备份logind.conf

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

编辑 /etc/systemd/logind.conf

改动如下,其他不动

HandlePowerKey=ignore
PowerKeyIgnoreInhibited=no

重启服务

systemctl restart systemd-logind

获取电源按钮事件ID

安装ACPI支持

apt install acpid acpi-support

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

root@home:~# acpi_listen
button/power PBTN 00000080 00000000
button/power LNXPWRBN:00 00000080 00000001

编辑事件触发动作

新建一个电源键的事件文件 /etc/acpi/events/powerbtnPBTN 为上一步所获取到的值

event=button/power PBTN 00000080 00000000

action=/etc/acpi/power_btn.sh

编辑执行脚本 /etc/acpi/power_btn.sh ,此处我需要启动虚拟机104,改成自己需要的虚拟机id即可

#!/bin/bash

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

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

修改一下执行脚本的权限

chmod +x /etc/acpi/power_btn.sh

最后重启acpid服务

systemctl restart acpid

大功告成,开始享受吧!