本质上,我希望此评论变成一个可行的答案。
我知道如何从中提取电池百分比如何使用终端检查电池状态?:
upower -i $(upower -e | grep BAT) | grep --color=never -E percentage|xargs|cut -d' ' -f2|sed s/%//
以及如何弹出基本通知:
notify-send "battery low"
但是我如何设置一个(bash?)脚本来永久监视输出并根据以下伪代码发送通知:
如果battery_status < 10%
则将notify-send "battery low"
我的系统置于暂停状态sudo pm-suspend
答案1
第一步:让所有用户都可以访问 pm-suspend,无需密码
sudo visudo
在文件末尾添加此行:yourusername ALL=NOPASSWD: /usr/sbin/pm-suspend
第二步:创建batwatch.desktop文件:
这是将自动启动监控脚本的文件。该文件必须存储在$HOME/.config/autostart/
文件夹中。
[Desktop Entry]
Type=Application
Exec=/home/serg/bin/batwatch.sh
Hidden=false
NoDisplay=false
Name=Battery Monitor Script
请注意,脚本位于我的/home/serg/bin
文件夹中。您可以使用任何您喜欢的文件夹,但出于标准考虑,/usr/bin 或 /home/username/bin 更受欢迎。
来源:如何在启动时运行脚本
第三步:创建实际脚本,保存在与 Exec= 行相同的位置
这是实际的脚本。请注意,我在这里使用的是 bash,但它也应该适用于 korn shell。我添加了一些注释,因此请阅读这些注释以了解脚本的具体功能
#!/bin/bash
# Check if the battery is connected
if [ -e /sys/class/power_supply/BAT1 ]; then
# this line is for debugging mostly. Could be removed
#notify-send --icon=info "STARTED MONITORING BATERY"
zenity --warning --text "STARTED MONITORING BATERY"
while true;do
# Get the capacity
CAPACITY=$( cat /sys/class/power_supply/BAT1/uevent | grep -i capacity | cut -d'=' -f2 )
case $CAPACITY in
# do stuff when we hit 11 % mark
[0-9]|11)
# send warning and suspend only if battery is discharging
# i.e., no charger connected
STATUS=$( cat /sys/class/power_supply/BAT1/uevent | grep -i status | cut -d'=' -f2 )
if [ $(echo $STATUS) == "Discharging" ]; then
#notify-send --urgency=critical --icon=dialog-warning "LOW BATTERY! SUSPENDING IN 30 sec"
zenity --warning --text "LOW BATTERY! SUSPENDING IN 30 sec"
sleep 30
gnome-screensaver-command -l && sudo pm-suspend
break
fi
;;
*)
sleep 1
continue
;;
esac
done
fi
第四步:重新启动并测试脚本是否有效
为此,您可以将数字调整 [0-9]|11)
为任意值,例如65)
在 65% 时暂停。只有当您未连接电源(即未充电)时,您才会暂停。
如果您喜欢这个,请告诉我,如果它有效,请务必投票并单击我的答案左侧的灰色复选标记!
干杯!
答案2
我为我的 Vaio 编写了一个类似的脚本,用于在电池充满电时通知我。我利用 UPOWER 为我提供有关电池状态的更新,并从中提取了相关部分。以下是代码:
#!/bin/bash
while true;do
STATE=$( upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "state:" | cut -b 26- )
if [ $STATE = "fully-charged" ]
then
zenity --info --text "Battery Full!"
break
fi
done