对于类 Unix 用户来说,Linux 笔记本是不错的选择,但它经常会耗尽电池。我试过很多 Linux 操作系统,但没有像 Windows 那样电池寿命长。
充电时间长了会对电池造成损害,所以在电池 100% 充满时要拔掉电源线。电池充电或放电时没有默认的应用程序来通知,需要安装第三方应用来通知你。
为此,我通常会安装 Battery Monitor,但它已经被废弃,所以我创建了一个 shell 脚本来获取通知。
笔记本电池充放电状态可以通过以下两个命令来识别。
使用 acpi
命令。
$ acpi -b
Battery 0: Discharging, 71%, 00:58:39 remaining
使用 upower
命令。
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -w 'state|percentage' | awk '{print $2}'
discharging
64%
这个脚本在启动时在后台运行,每分钟检查一次电池状态,然后在电池电量超过 95% 或放电时电量低于 20% 时发送通知。
警报会直到你的电池电量超过 20% 或低于 95% 时才会停止。
$ sudo vi /opt/scripts/battery-status.sh
#!/bin/bash
while true
do
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -ge 95 ]; then
notify-send "Battery Full" "Level: ${battery_level}%"
paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
elif [ $battery_level -le 20 ]; then
notify-send --urgency=CRITICAL "Battery Low" "Level: ${battery_level}%"
paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
fi
sleep 60
done
脚本完成后,设置可执行权限:
$ sudo chmod +x /opt/scripts/battery-status.sh
最后,将该脚本添加到用户配置文件的底部。对于全局范围来说,你需要在 /etc/profile
文件中添加该脚本。
$ vi /home/magi/.profile
/opt/scripts/battery-status.sh &
重启你的 Linux 系统来检查这点。
$ sudo reboot
这个脚本与上面的脚本类似,但它是由交流适配器负责。
如果你插上了交流适配器,而且电池的电量超过 95%,它就会发出一个带有声音的通知,但是这个通知不会停止,直到你拔掉交流适配器。
如果你拔掉交流适配器,你将永远不会再看到通知,直到你的电池电量下降到 20%。
$ sudo vi /opt/scripts/battery-status-1.sh
#!/bin/bash
while true
do
export DISPLAY=:0.0
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if on_ac_power; then
if [ $battery_level -ge 95 ]; then
notify-send "Battery Full" "Level: ${battery_level}% "
paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
fi
else
if [ $battery_level -le 20 ]; then
notify-send --urgency=CRITICAL "Battery Low" "Level: ${battery_level}%"
paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
fi
fi
sleep 60
done
脚本完成后,设置执行权限:
$ sudo chmod +x /opt/scripts/battery-status-1.sh
最后将脚本添加到用户配置文件的底部。对于全局范围来说,你需要在 /etc/profile
文件中添加该脚本。
$ vi /home/magi/.profile
/opt/scripts/battery-status-1.sh &
重启系统来检查:
$ sudo reboot
参考: stackexchange
% function WriteToFile(FileName, Contents, Append) on error resume next if ...
复制代码 代码如下: % '=====================================================...
Linux 内核 下载 编译 安装 ubuntu 2021 摘要 为什么要进行 调试 安装自定义的内...
复制代码 代码如下: html head meta http-equiv="Content-Type" content="text/h...
table曾经在网页开发中占据着举重若轻的地位布局,即使到了Web2.0我们依旧可以看...
大致介绍 年过的差不多了,开始学习! Git有三个工作区域: ◆ 工作区(Working ...
达梦数据库数据守护实时主备集群的介绍与搭建过程 1、概述 2、主要功能 2.1 实时...
git push时终端报错: error: RPC failed; HTTP 413 curl 22 The requested URL ...
手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后...
NET 连接池救生员 防止可淹没应用程序的池溢出 William Vaughn 大多数 ADO.NET ...