该方案通过系统原生服务实现四平台低电量自动响应:windows用任务计划程序监听event id 4101;macos以launchd轮询pmset状态;linux借助upower+systemd timer每90秒检测;麒麟os需gsettings与upower.conf双配置。

当笔记本电池电量跌至临界值时,自动运行备份脚本、保存工作状态或发送告警通知,可避免因突然断电导致数据丢失或任务中断。该功能不依赖第三方软件,仅需系统原生服务与基础脚本能力即可实现,适用于Windows、macOS、Linux及国产麒麟OS四类主流平台。
Windows平台:用任务计划程序触发低电量脚本
此方案利用Windows电源事件(Event ID 4101/4102)作为触发器,确保脚本在系统检测到低电量时立即执行,而非依赖轮询或延迟响应。
第一步:打开任务计划程序 → 右侧点击【创建任务…】(非“基本任务”)。
第二步:在【常规】选项卡中,输入名称如“低电量自动备份”,勾选【使用最高权限运行】,配置为【Windows 10/11】。
第三步:切换到【触发器】→【新建…】→ 在“开始任务”下拉菜单中选择【基于事件】→ 日志设为【System】→ 源设为【Kernel-Power】→ 事件ID填入【4101】(表示电池电量低于阈值)。
第四步:【操作】→【新建…】→ 程序栏填powershell.exe,参数栏填:-ExecutionPolicy Bypass -File "C:\Scripts\lowbat_action.ps1",起始位置填脚本所在目录。
第五步:【条件】选项卡中,取消勾选【只有在计算机使用交流电源时才启动此任务】,否则电池模式下将无法触发。
macOS平台:通过pmset与launchd协同响应
macOS不直接暴露低电量事件给用户脚本,但可通过pmset监听电池状态变化,并由launchd在状态跃迁时调用脚本。
方法一:创建plist配置文件
在~/Library/LaunchAgents/下新建com.user.lowbat.plist,内容如下:
方法二:脚本内嵌实时检测逻辑
check_battery.py需包含以下核心判断:
执行pmset -g batt提取剩余百分比,当percentage ≤ 12且state == "discharging"时,调用subprocess.run(["/usr/local/bin/backup.sh"])。
【注意】launchd每分钟轮询一次,响应延迟约50–70秒,不可用于毫秒级保护场景。**
Linux平台:基于upower的systemd timer轮询方案
该方案兼容所有启用upower服务的发行版(Ubuntu/Fedora/Deepin等),无需root权限即可部署,且支持精确到90秒级响应。
1. 创建检测脚本/home/$USER/bin/check-low-battery.sh:
第一行写#!/bin/bash;第二行写PERCENT=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage | awk '{print $2}' | tr -d '%');第三行写STATE=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep state | awk '{print $2}');第四行写if [[ $PERCENT -le 10 ]] && [[ "$STATE" == "discharging" ]]; then /home/$USER/scripts/on_low_bat.sh; fi。
2. 赋予执行权限:chmod +x /home/$USER/bin/check-low-battery.sh。
3. 创建timer单元:~/.config/systemd/user/low-battery-check.timer,内容含[Timer]区块,设置OnUnitActiveSec=90。
4. 启用timer:systemctl --user daemon-reload → systemctl --user enable --now low-battery-check.timer。
麒麟OS:UKUI+UPower双层策略生效
麒麟OS采用UKUI桌面环境与UPower底层服务双驱动架构,必须同时修改图形层参数与守护进程配置,否则脚本不会被调用。
方法一:gsettings设置事件钩子
执行gsettings set org.ukui.power-manager execute-command-on-critical-battery true,再设置gsettings set org.ukui.power-manager critical-battery-command "/usr/local/bin/lowbat_hook.sh"。
方法二:UPower.conf强制接管
编辑/etc/UPower/UPower.conf,在[daemon]段添加两行:CriticalPowerAction=ExecuteCommand和【CriticalPowerCommand=/usr/local/bin/lowbat_hook.sh】。
保存后执行sudo systemctl restart upower,此时系统在电量≤PercentageCritical(默认10%)时会直接fork并执行指定脚本。











