收起左侧

把笔记本电池作为UPS,当电量不足时自动关机

3
回复
1489
查看
[ 复制链接 ]

2

主题

3

回帖

0

牛值

江湖小虾

2025-2-23 22:16:56 显示全部楼层 阅读模式

[i=s] 本帖最后由 喝鹅贺 于 2025-2-23 22:42 编辑 [/i]<br /> <br />

脚本使用大模型编写,未进行改动。

  1. 创建脚本,复制下方代码。
#!/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 
  1. 将脚本部署为服务执行 新建服务文件
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

收藏
送赞 1
分享

1

主题

17

回帖

0

牛值

江湖小虾

2025-2-27 15:53:37 显示全部楼层
能在飞牛里看到么
看不到,只能后台查看服务  详情 回复
2025-2-27 18:02

2

主题

3

回帖

0

牛值

江湖小虾

2025-2-27 18:02:22 楼主 显示全部楼层
看不到,只能后台查看服务

1

主题

9

回帖

0

牛值

江湖小虾

2025-2-28 21:18:25 显示全部楼层
有效果吗,有没有人试过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则