mac无法原生关机断电外设,但可通过launchd脚本卸载磁盘、禁用usb唤醒(pmset usbpower 0)、配合支持s5断电的扩展坞或智能pdu实现近似效果。

你想让Mac在每天晚上11点自动关机的同时,一并切断所有USB、雷雳、HDMI外接设备的供电或连接状态,避免设备持续待机耗电或产生干扰——macOS系统本身不提供“关机时主动断开外设”的API控制,但可通过组合策略实现接近效果:利用系统关机前的钩子脚本强制卸载挂载卷、关闭USB集线器电源(需硬件支持)、并阻止外设唤醒。
确认外接设备是否支持关机断电
不是所有USB或雷雳设备都会在Mac关机后断电。台式Mac(iMac、Mac mini)主板USB端口在关机后通常仍维持5V待机电压;而部分带独立开关的USB集线器或雷雳扩展坞(如CalDigit TS4、OWC Thunderbolt Dock)可在BIOS/固件层设置“关机断电模式”。先检查你的扩展坞说明书,搜索“shutdown power off”或“S5 state power control”。【若设备无此固件选项,后续脚本无法强制断电,只能卸载逻辑连接】。
用launchd在关机前执行卸载脚本
macOS在关机流程早期会触发launchd的Shutdown事件,此时文件系统仍可写、进程可运行,是执行清理操作的最后可靠时机。
第一步:新建脚本文件,终端中执行:
sudo nano /Library/Scripts/shutdown-unmount.sh
第二步:粘贴以下内容并保存(Ctrl+O → Enter → Ctrl+X):
#!/bin/bash
diskutil list | grep "external" | awk '{print $NF}' | xargs -I {} diskutil unmountDisk force /dev/{}
第三步:赋予执行权限:
sudo chmod +x /Library/Scripts/shutdown-unmount.sh
第四步:创建plist配置文件:
sudo nano /Library/LaunchDaemons/com.example.shutdown-unmount.plist
第五步:填入以下XML(注意替换UserName为你的实际用户名):
第六步:加载服务:
sudo launchctl load /Library/LaunchDaemons/com.example.shutdown-unmount.plist
禁用外设唤醒功能(防止关机后被意外唤醒)
某些键盘、鼠标或网卡能在关机后通过USB信号唤醒Mac,导致外设始终处于半激活状态。必须关闭该能力:
打开“终端”,输入:
sudo pmset -a disablesleep 0
接着逐条执行(每行回车一次):
sudo pmset -a womp 0
sudo pmset -a ring 0
sudo pmset -a usbpower 0
最后一行usbpower 0会禁用USB端口在睡眠/关机状态下的供电维持能力,对多数Intel Mac有效;M系列芯片需额外验证,部分机型可能忽略该指令。
物理级断电方案(仅限台式Mac+智能PDU)
如果你使用iMac Pro、Mac Studio或Mac mini,并搭配支持网络控制的智能插座(如TP-Link Kasa KP303、QNAP QNAP UPS管理模块),可将Mac与所有外设共用同一PDU通道。在Mac定时关机前30秒,用curl触发PDU断电:
方法一:改写前述shutdown-unmount.sh,在末尾添加:
curl -X POST "http://192.168.1.100:8080/smartplug.cgi" --data '{"system":{"set_relay_state":{"state":0}}}' > /dev/null 2>&1
方法二:若PDU支持定时,直接在其Web界面设置“每日23:00:00断电”,比依赖Mac更可靠——【此方式不依赖Mac是否开机,只要PDU通电即生效】。











