在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工具,然后重启虚拟机。
最后按一下主机机箱上面的电源键试试吧。