如何编写脚本来“监听”电池状态并在电池电量高于 60% 或低于 40% 时提醒我?

Yek*_*vel 7 battery scripts power-management

我想制作一个工具,当电池电量低于 40% 或高于 60% 时发出警报,以便我可以相应地开始/停止充电。

我知道有些工具会在电池电量低时发出警报,这还不够。有没有工具可以在蝙蝠高的时候做到这一点?

我想编写一个脚本 - shell 或 python,可以做到这一点。我知道检查蝙蝠状态的命令:

upower -i /org/freedesktop/UPower/devices/battery_BAT0
Run Code Online (Sandbox Code Playgroud)

但是不知道如何“倾听”电池的声音,以便每当它的状态发生变化时我都可以自动执行操作。指向文档的链接会很好,教程甚至更好。

αғs*_*нιη 19

如果我正确理解了您的问题,您希望每隔 X 时间检查一次电池状态。在后台运行它是最简单的方法,在一个 while 循环中:

while true
 do
    # Any script or command
    sleep [number of seconds]
 done
Run Code Online (Sandbox Code Playgroud)

如果你想在启动时运行脚本,然后每 5 分钟运行一次,那么构造将是:

  • 添加一行/etc/rc.local以调用您的脚本(您的battery_status.sh)+“&”以使其退出。
  • 添加要battery_status.sh在 while 循环中执行的命令(在 battery_status.sh 中)。

请注意,如果您想从cron运行它,则需要设置完整路径,因为cron使用有限的环境变量集运行。

例子

#!/bin/bash
while true
do
    battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
    if [ $battery_level -ge 60 ]; then
       notify-send "Battery is above 60%!" "Charging: ${battery_level}%"    
    elif [ $battery_level -le 40 ]; then
       notify-send "Battery is lower 40%!" "Charging: ${battery_level}%"    
    fi

    sleep 300 # 300 seconds or 5 minutes
done
Run Code Online (Sandbox Code Playgroud)

通过battery_status.sh在您喜欢的位置(我的是home目录)中命名保存此文件并将此行添加到/etc/rc.local文件中(在我的示例中,只需将您的 battery_status.sh 位置替换为/home/username/):

sh /home/username/battery_status.sh &
Run Code Online (Sandbox Code Playgroud)

就这样。重新启动并查看魔法。

如果您没有 instell acpi,只需使用sudo apt-get install acpi

一项奖金

如果你想运行使这个脚本对 AC 适配器负责,你不需要额外的变量来检查一次运行。如果您的 AC 适配器已插入且电池电量超过 60%,则会发出“拔下您的适配器!”的警报。直到你不拔掉它。如果警报告诉你

                             在此处输入图片说明

只需拔下交流适配器,您就会看到消息警告不会再次出现,直到您的电池电量降至 40%。然后另一条消息提醒并告诉你

                             在此处输入图片说明

如果您没有在 60% 以上拔下 AC 适配器或不在 40% 以下插入 AC 适配器,则每 5 分钟显示一次警报消息(您可以在代码中自行调整,请参阅sleep [seconds])显示并会提醒您。

sh /home/username/battery_status.sh &
Run Code Online (Sandbox Code Playgroud)


Jac*_*ijm 9

您无法编写教程来创建一个脚本。这类似于一般的 Python 教程,您可以在网络上的许多地方找到它。

我所做的是写一个小脚本,用注释来解释我做了什么,每 10 秒检查一次电池电量。那可能有点过头了。更改行time.sleep(10)以设置间隔(以秒为单位)。命令当然可以更改,我让它按原样发送通知。

在此处输入图片说明

我让它运行消息,或者你给它的任何命令,每个事件只运行一次,所以如果充电超过 80%,例如,命令只运行一次,直到下一次超过定义的值。

如何使用

该脚本旨在在后台运行;将其复制到一个空文件中,将其保存为check_battery.py可执行文件并使其在登录时运行:Dash > Startup Applications > Add,添加命令:

/path/to/check_battery.py
Run Code Online (Sandbox Code Playgroud)

剧本

/path/to/check_battery.py
Run Code Online (Sandbox Code Playgroud)