mac无法原生实现无输入设备自动关机,需用终端脚本轮询hid设备:每10秒检测usb/蓝牙输入设备数量,为0时强制关机;长期使用应封装为launchd守护服务,开机自启并支持验证与卸载。

你想让Mac在检测不到键盘、鼠标、触控板等任何输入设备时自动关机,防止无人看管时设备空转耗电或过热——这个需求无法通过系统原生图形界面直接实现,必须借助终端命令配合硬件状态轮询脚本完成。
用终端脚本实时检测并触发关机
该方法依赖系统底层I/O注册表扫描,每10秒检查一次当前连接的HID设备数量,一旦发现为0即执行关机。脚本需手动启动,适合临时值守场景。
打开“终端” → 粘贴以下完整命令并回车执行:
while true; do if [[ $(ioreg -p IOUSB -l | grep -i "keyboard\|mouse\|trackpad" | wc -l) -eq 0 ]] && [[ $(ioreg -p IOBluetooth -l | grep -i "hid" | wc -l) -eq 0 ]]; then sudo shutdown -h now; break; else sleep 10; fi; done
输入管理员密码后脚本立即运行;它不会后台驻留,关闭终端窗口即终止检测。
⚠️ 注意:此命令会【立即强制关机】,不弹窗、不保存文档、不等待应用退出——务必确保所有工作已保存且无关键任务正在运行。
创建可重复使用的关机守护脚本
如果你需要长期启用该功能(比如部署在展厅Mac上),应将检测逻辑封装为独立脚本,并通过launchd注册为开机自启服务。这能避免终端窗口常驻,也防止误关窗口中断检测。
第一步:用nano创建脚本文件 → 输入:
sudo nano /usr/local/bin/check_no_input_shutdown.sh
第二步:粘贴以下内容(注意保留缩进和换行):
#!/bin/bash
while true; do
if [[ $(ioreg -p IOUSB -l | grep -i "keyboard\|mouse\|trackpad" | wc -l) -eq 0 ]] && [[ $(ioreg -p IOBluetooth -l | grep -i "hid" | wc -l) -eq 0 ]]; then
logger "No input devices detected. Shutting down.";
sudo shutdown -h now;
break;
else
sleep 15;
fi;
done
第三步:赋予执行权限 → 输入:
sudo chmod +x /usr/local/bin/check_no_input_shutdown.sh
第四步:创建launchd配置文件 → 输入:
sudo nano /Library/LaunchDaemons/com.example.noinput.shutdown.plist
第五步:粘贴以下XML内容(替换其中的UserName为你实际的短用户名):
第六步:加载服务 → 输入:
sudo launchctl load /Library/LaunchDaemons/com.example.noinput.shutdown.plist
此时脚本已作为系统级守护进程运行,每次开机自动激活,无需用户登录即可检测USB/蓝牙输入设备状态。
验证与取消方案
方法一:查看当前是否正在运行检测进程 → 终端中输入:
ps aux | grep check_no_input_shutdown
方法二:临时停止服务(不卸载) → 输入:
sudo launchctl unload /Library/LaunchDaemons/com.example.noinput.shutdown.plist
方法三:彻底删除该功能 → 依次执行:
sudo launchctl remove com.example.noinput.shutdown
sudo rm /usr/local/bin/check_no_input_shutdown.sh
sudo rm /Library/LaunchDaemons/com.example.noinput.shutdown.plist











