utm默认启用acpi,关键在于客户机os通过qemu标准接口正常通信:需选择x86_64/aarch64架构、uefi固件,并确保客户机内核加载acpi_cpufreq、button等模块,通过dmesg和lsmod验证,最后测试关机、重启、睡眠及电源按钮响应是否正常。
utm 默认启用 acpi,但部分系统(尤其是较老的 linux 发行版或自定义内核)可能需要手动确认或微调配置,才能正确识别睡眠、休眠、关机等电源状态。关键不在于“开启acpi”,而在于确保客户机操作系统能通过 qemu 暴露的标准 acpi 接口正常通信。
确认 UTM 已启用 ACPI(通常默认开启)
UTM 基于 QEMU,其 x86_64 和 ARM64(AArch64)虚拟机默认启用 ACPI 支持,无需额外勾选。你可以在虚拟机设置中检查以下两点:
- 架构选择为 x86_64 或 AArch64(ARM64),这两者均默认启用 ACPI;ARM32(aarch32)和某些精简模式不支持 ACPI。
- 在「系统」→「固件」中,确认使用的是 UEFI(OVMF) 固件 —— UEFI 是现代 ACPI 实现的基础,Legacy BIOS 模式下 ACPI 功能受限或不可靠。
客户机系统需加载 ACPI 内核模块
即使 UTM 正确暴露了 ACPI 表,客户机 OS 仍需主动解析并响应。以 Linux 为例:
- 启动后运行
dmesg | grep -i acpi,应看到类似ACPI: Core revision 20250617和多个ACPI: Enabled的日志。 - 检查关键模块是否加载:
lsmod | grep ^acpi,至少应有acpi_cpufreq、acpi_power_meter(可选)、button(处理电源按钮事件)等。 - 若缺失,可在内核命令行添加
acpi_enforce_resources=lax(解决资源冲突)或确保内核编译时启用了CONFIG_ACPI=y及相关子项(如CONFIG_ACPI_BUTTON、CONFIG_SUSPEND)。
验证与测试常见电源操作
ACPI 配置是否生效,最终要看实际行为:
-
关机:在客户机中执行
sudo shutdown -h now或点击系统菜单关机,UTM 应干净退出虚拟机,而非卡死或强制终止。 -
重启:执行
sudo reboot,客户机应完成 ACPI 重置流程,UTM 重新加载虚拟机。 -
睡眠(S3):Linux 下运行
sudo systemctl suspend;Windows 下选择“睡眠”。UTM 界面会暂停,再次点击“启动”可快速恢复(需客户机内核/驱动支持 S3)。 - 电源按钮响应:点击 UTM 工具栏的「电源按钮」图标,客户机应触发 ACPI 事件(如弹出关机菜单或直接关机),而非无反应。
常见问题与绕过方案
若遇到电源操作失败,优先排查而非禁用 ACPI:
- 客户机日志报
ACPI Exception: AE_NOT_FOUND或No handler for GPE:通常是客户机内核太旧或 ACPI 表兼容性问题,尝试升级内核或换用较新发行版(如 Ubuntu 24.04、Fedora 40)。 - Windows 虚拟机无法睡眠:确认已安装 QEMU Guest Agent(Windows 版),并在 UTM 设置中启用「Guest Agent」选项,它能增强 ACPI 事件传递可靠性。
- macOS 虚拟机(仅限 Apple Silicon Mac 主机):ACPI 支持由 UTM 内建的 Apple Hypervisor 驱动提供,无需额外配置,但需使用官方 macOS 安装镜像且启用 Secure Boot。











