我在联想 z5170 上安装了 Ubuntu 16.04 LTS。我想要一个程序(无论使用什么编程语言),通过哔声通知我电池电量不足。我认为该程序应该处于休眠状态,直到电池电量耗尽(10% 电量),但我所能想到的只是一个 while 循环,它会消耗整个处理器并阻止其他所有程序运行。
1-我应该如何实现这样的程序?
2-有哪些方式可以通知用户特定事件?
答案1
除了建议的重复方法之外,您还可以执行以下操作:
通过以下方式查找您的电池接口路径upower -enumerate
:
bash-4.3$ upower --enumerate
/org/freedesktop/UPower/devices/line_power_ACAD
/org/freedesktop/UPower/devices/battery_BAT1
/org/freedesktop/UPower/devices/DisplayDevice
然后使用upower --show-info
并触发其输出。在我的示例中,情况如下:
bash-4.3$ upower --show-info /org/freedesktop/UPower/devices/DisplayDevice | awk '/percentage/{gsub(/\%/,""); print $2}'
100
您现在要做的就是使用一个简单的脚本来比较该输出值是否小于或等于某个阈值
#!/bin/bash
get_percentage()
{
# Note, | \ must have only new line after it, no space
upower --show-info /org/freedesktop/UPower/devices/battery_BAT1 |\
awk '/percentage/{gsub(/\%/,""); print $2}'
}
main()
{
while true
do
pcent=$(get_percentage)
[ $pcent -le 10 ] && notify-send "Battery Low" "Please plug in charger"
sleep 60 # check every minute
done
}
main
至于通过蜂鸣通知,您可以使用aplay
命令和任何音频文件代替notify-send
。如果您没有 GUI,您也可以使用wall
这样的命令wall <<< "Battery low"
,它会打印到屏幕上的消息。笔记:由于最近的更新,gnome-terminal
此功能在 中不起作用gnome-terminal
,但在 TTY 和其他终端仿真器中仍然可以使用