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)
您无法编写教程来创建一个脚本。这类似于一般的 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)