PVE 使用物理按钮一键启动/关闭虚拟机

在pve (proxmox ve 8.1.4)里面,想要启动/关闭一台虚拟机,可以有以下方法:

  • 在本机登录主机控制台,输入命令 “qm start 虚拟机ID” 来启动虚拟机
  • 在另一台电脑访问PVE的WEB界面,点击虚拟机的“启动”按钮来启动虚拟机

但是这两种方法都不太方便,特别对于直通了显卡给windows虚拟机用来做电视盒子的小伙伴,每次想看电视用上面的方法开机就太麻烦了。有没有更方便的方法呢? 下面介绍使用主机电脑机箱上面的电源键来实现虚拟机启动/关闭的方法。

我们的思路是拦截主机的电源键事件,将关闭主机改成启动/关闭虚拟机。

默认安装的情况下,按主机的电源键,主机不会有任何动作,不会关机,这是因为PVE默认没有处理ACPI事件,那么我们先安装上ACPI服务,在主机里执行命令:

apt install acpid acpi-support

查看电源按钮事件编码,在主机控制台输入:

acpi_listen

然后按一下电脑机箱上面的电源按钮,不用怕,不会关机的。屏幕出现提示:

root@pve:~# acpi_listen
button/power PBTN 00000080 00000000
button/power LNXPWRBN:00 00000080 00000032

记下第一行事件编码 “button/power PBTN 00000080 00000000″,下面有用。

接着编写电源按钮事件文件:

nano /etc/acpi/events/powerbtn

文件内容是:

event=button/power PBTN 00000080 00000000
action=/etc/acpi/power_btn.sh

这里面的”button/power PBTN 00000080 00000000″,就是刚才获取到的。这里要注意一下,如果后续测试不成功,可以试着改一下事件代码,例如将”button/power PBTN 00000080 00000000″改成”button/power PBTN 00000080″,或者”button/power PBTN”。

编写虚拟机启动/关机脚本:

/etc/acpi/power_btn.sh

这个文件的内容是:

#!/bin/bash

output=$(qm status 1234)
if [[ $output == *"running"* ]]; then
    qm shutdown 1234
    # 如果后续测试发现可以正常启动但是无法关机,可以将上面一行改成 qm stop 1234 以便强制关机
else
    qm start 1234
fi

将 1234 改成你的虚拟机ID。

设置脚本的执行权限:

chmod +x /etc/acpi/power_btn.sh

重启 acpi 服务:

systemctl restart acpid

虚拟机 – 选项 – qemu guest agent,选中”使用qemu guest agent”,进入虚拟机系统,安装guest tools工具,然后重启虚拟机。

最后按一下主机机箱上面的电源键试试吧。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注