[i=s] 本帖最后由 喝鹅贺 于 2025-2-23 22:42 编辑 [/i]<br />
<br />
脚本使用大模型编写,未进行改动。
- 创建脚本,复制下方代码。
#!/bin/bash
# 检查必需的命令
for cmd in upower; do
if ! command -v $cmd &> /dev/null; then
echo "请先安装必要的工具: sudo apt-get install upower"
exit 1
fi
done
# 获取电池设备路径
BATTERY_PATH=$(upower -e | grep 'BAT')
if [ -z "$BATTERY_PATH" ]; then
echo "未找到电池设备"
exit 1
fi
# 保存上一次的状态
LAST_STATE=""
# 函数:获取电池状态信息
get_battery_state() {
upower -i $BATTERY_PATH | grep -E "state|percentage|time to empty|time to full"
}
# 函数:获取并显示电池状态
check_battery() {
# 获取电池信息
local battery_info=$(upower -i $BATTERY_PATH)
local current_state=$(get_battery_state)
# 如果状态与上次不同,则显示新状态
if [ "$current_state" != "$LAST_STATE" ]; then
echo "电池状态发生变化"
echo "----------------------------------------"
echo "电池信息:"
echo "$current_state"
LAST_STATE="$current_state"
# 提取电池百分比和状态用于关机判断
local percentage=$(echo "$battery_info" | grep 'percentage' | awk '{print $2}' | tr -d '%')
local state=$(echo "$battery_info" | grep 'state' | awk '{print $2}')
# 如果电量低于20%且未在充电,则关机
if [ "$percentage" -lt 20 ] && [ "$state" != "charging" ]; then
echo "警告:电池电量低于20%,系统将在1分钟后关机..."
shutdown -h +1
exit 0
fi
fi
}
echo "开始监测电池状态..."
echo "初始状态:"
LAST_STATE=$(get_battery_state)
echo "----------------------------------------"
echo "电池信息:"
echo "$LAST_STATE"
# 使用 upower 监听电池状态变化
upower --monitor | while read -r line
do
if echo "$line" | grep -q "$BATTERY_PATH"; then
check_battery
fi
done
- 将脚本部署为服务执行
新建服务文件
vi /etc/systemd/system/battery-monitor.service
将下方代码粘贴进创建的服务文件中然后保存。
注意修改ExecStart处的脚本路径为你自己的脚本存放路径
[Unit]
Description=Battery Monitor Service
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/local/bin/battery_monitor.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
重新加载 systemd 配置:
sudo systemctl daemon-reload
启用并启动服务:
sudo systemctl enable battery-monitor.service
sudo systemctl start battery-monitor.service
检查服务状态:
sudo systemctl status battery-monitor.service
|