这件事对我来说比我想承认的要多得多,但是有时候我没有注意到电量变低,因为它只显示在我的状态栏中,然后计算机就退出了。我想要一个大警报,在这种情况发生之前警告我。有什么办法可以提醒我吗?Ubuntu有一个不错的弹出窗口,告诉您它越来越低。
这件事对我来说比我想承认的要多得多,但是有时候我没有注意到电量变低,因为它只显示在我的状态栏中,然后计算机就退出了。我想要一个大警报,在这种情况发生之前警告我。有什么办法可以提醒我吗?Ubuntu有一个不错的弹出窗口,告诉您它越来越低。
Answers:
写脚本!
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -le 10 ]
then
notify-send "Battery low" "Battery level is ${battery_level}%!"
fi
然后将其运行每隔几分钟左右。但是,是的,如果您可以通过GUI进行操作,那可能是一种更好的方法。
回复:hdgarrood的回答,设置cron
为notify-send
实际运行真是令人痛苦的挑剔。(crontab -e
幸运的是,我认为默认情况下,它们在重新启动后仍然存在)。我遵循了一些指南,但不确定到底能解决什么问题,但是这是我每5分钟运行一次检查程序的完整设置:
$ crontab -e
*/5 * * * * sh /home/nrw/.notify-send_setup
*/5 * * * * sh /home/nrw/.battnotif
$ cat .notify-send_setup
#!/bin/bash
touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus
exit 0
$ cat .battnotif
#!/bin/bash
export DISPLAY=:0
XAUTHORITY=/home/nrw/.Xauthority
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
# I tried to only notify when not charging, but could not get it to work
# STATUS=$(cat /sys/class/power_supply/ADP1/online)
# if [ $battery_level -le 15 ] && [ $STATUS == "0" ]
if [ $battery_level -le 15 ]
then
/usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"
echo 'batt low' >> /home/nrw/cron.log
fi
echo 'ran batt' >> /home/nrw/cron.log
确保chmod +x
使用bash脚本。
我现在运行以下命令:
$ crontab -e
*/5 * * * * /home/<my username>/bin/checkLowBattery
$ cat /home/<my username>/bin/checkLowBattery
#!/bin/bash
POWERSUPPLY="/sys/class/power_supply/ACAD/online" # could be different on your system!
TOO_LOW=20 # how low is too low?
NOT_CHARGING="0"
ICON="/usr/share/icons/ubuntu-mono-dark/status/24/battery-low.svg" # eye candy
export DISPLAY=:0
BATTERY_LEVEL=$(acpi -b | grep -P -o '[0-9]+(?=%)')
STATUS=$(cat $POWERSUPPLY)
if [ $BATTERY_LEVEL -le $TOO_LOW -a $STATUS = $NOT_CHARGING ]
then
/usr/bin/notify-send -u critical -i "$ICON" -t 3000 "Battery low" "Battery level is ${BATTERY_LEVEL}%!"
fi
exit 0
如您所见,这只是Orangenarwhals的代码,但有一些更改:
man test
请参阅,它说明了如何进行“与”操作)。$ find /usr/share/icons/ -iname "*batt*low*"
)不要忘记chmod +x
您的脚本,然后您就可以直接从cron(tab)运行它们,无需使用sh
。
(这适用于使用Xmonad的Ubuntu。)
由于您显然正在运行Cinnamon,因此只需安装带有Monitoring and Shutdown(BAMS)的Battery Applet。
右键单击面板→ +将小程序添加到面板 → 可用小程序(在线),在搜索小部件中键入“ BAMS”,然后进行安装和配置。
它不是最华丽的,但是到目前为止,当我不经意间拔掉笔记本电脑电源时,它已经使我警觉。
轻微扭曲-在Knoppix(已授予,而不是OP使用的Mint)上,通知发送不可用(未安装libnotify-bin软件包),因此我发现这对警报很有用:
xmessage Battery low & mplayer /usr/lib/libreoffice/share/gallery/sounds/beam.wav
我只是将其扔到了LXDE电池监视器面板的“警报命令”中,不需要脚本。
假定您已经安装了LibreOffice,但是.wav会发出不错的低功耗声音。在Knoppix上几乎没有.ogg。
zenity
代替xmesssage
和aplay
替代mplayer
我有同样的问题,我想出了一种解决方法。我从Linux Mint存储库安装了一个名为GKrellM的应用程序。它监视机器上的很多东西,并且有电池。带有警报的设置,对我来说就像一种魅力。
更多信息,请访问:
我有同样的问题,这确实令人沮丧。我通过使用BatteryAlert.sh脚本解决了:
#!/bin/bash
BATTERY=$(upower -e | grep 'BAT')
while :
do
BATTERY_PERCENTAGE=$(upower -i $BATTERY|grep percentage|awk '{ print $2 }'|sed s/'%'/''/g)
CABLE=$(upower -d | grep -n2 line-power | grep online | awk '{ print $3 }')
if [[ "$BATTERY_PERCENTAGE" -lt "10" && $CABLE = "no" ]]; then
notify-send --urgency=critical "WARNING: Battery is about to die" "Plug in the power cable"
play /usr/share/sounds/KDE-Sys-Warning.ogg &> /dev/null
fi
sleep 10
done
我正在使用KDE,但是您可以在每个桌面环境中使用它。您不必以root用户身份运行此文件,也不必使用crontab语法发疯。如果您需要声音警报,则只需更改通知声音。如果您不想在桌面环境启动时自动启动脚本,请使用BatteryAlertLauncher.sh脚本将脚本放入$ USER / bin文件夹中:
#!/bin/bash
function getRunningProcesses
{
ps -aux | grep -v grep | grep BatteryAlert.sh
}
if [[ -n "$(getRunningProcesses)" ]] ; then
exit
fi
BatteryAlert.sh&
确保它们是可执行的:
chmod u+x $USER/bin/BatteryAlert*
然后只需运行以下命令:
ln -s /home/$(USER)/bin/BatteryAlertLauncher.sh .config/autostart/
您还可以通过输入以下命令从bash手动运行警报脚本:
BatteryAlertLauncher.sh
由于我没有安装Gnome Shell或Cinnamon,因此无法获得直接帮助,因为访问源代码可能非常实用,因为使用JavaScript添加这样的基本扩展很容易。
您应该打开:
/usr/share/cinnamon/js/ui/status/power.js
并搜索percentText-随后,您应该能够添加弹出消息或警报。
find / -type f -name power.js
这是我在使用Gnome作为DE的Arch Linux上完成此操作的方式:
#!/bin/bash
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
STATUS=$(cat /sys/class/power_supply/ACAD/online)
if [ $battery_level -le 15 ] && [ $STATUS == "0" ]
then
/usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"
fi
这个词ACAD
在STATUS=$(cat /sys/class/power_supply/ACAD/online)
将根据笔记本电脑做出改变。它用于查找您的膝盖是否插入交流适配器。这是我的crontab的样子:
* * * * * bash <path to script>
不要忘记使用以下命令使脚本可执行 chmod u+x <path to script>
这个简单的程序对我来说很好用,只acpi
需要安装一个简单的程序包即可(不需要重做,特定的桌面环境等)。
在您的用户crontab(crontab -e
)中放入以下内容(全部放在一行中,为了便于阅读,此处将其拆分):
*/3 * * * * acpi --battery |
awk -F, '/Discharging/ { if (int($2) < 15) print }' | xargs -ri
env DISPLAY=:0 zenity --warning --text "battery low\n{}"
它所做的是检查电池电量(acpi --battery
),如果未连接充电器(/Discharging/
),并且如果电池电量为< 15
%,它将每隔3分钟(*/3
)显示一条消息,zenity
以提示您打扰您。
相反zenity你也可以使用的xmessage
(真正简朴的计算机上),甚至像aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wav
音频通知(其中有优势在于,它将不会中断您的键盘上打字,并会工作,即使与多个会话,其中多用户的笔记本电脑DISPLAY=:0
黑客会失败)
如果您还需要在某些关键级别上挂起/休眠计算机,请参阅此答案
下载一个名为BAMS的小程序。当电池电量达到您确定的特定水平时,它会自动提醒您。这是最简单的解决方案。
借助此处所有答案的所有信息,我创建了一个脚本并将其放在GitLab的存储库中。
在以下情况下会显示通知:
https://gitlab.com/gitaarik/battery-health-notifications
非常欢迎为使其在更广泛的环境中工作而做出的贡献。
编写本文时的脚本:
#!/bin/bash
# Run this script as a cronjob every 5 minutes or so, to get notifications when
# battery percentage goes below 30% or above 80%.
# Cronjob line example:
# */5 * * * * /bin/bash /path/to/battery_health_notifications.sh
# This line is to make notify-send always work, also when run in a crontab.
# https://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab/346580#346580
export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '\0' '\n')
BATTERY_PATH=$(upower -e | grep battery)
LINE_POWER_PATH=$(upower -e | grep line_power)
BATTERY_PERCENTAGE=$(upower -i $BATTERY_PATH | grep 'percentage:' | awk '{ print $2 }' | sed 's/%//')
CABLE_PLUGGED=$(upower -i $LINE_POWER_PATH | grep -A2 'line-power' | grep online | awk '{ print $2 }')
if [[ $CABLE_PLUGGED == 'yes' ]]; then
if [[ $BATTERY_PERCENTAGE -gt 80 ]]; then
notify-send --urgency=critical "Battery optimization" "Battery reached 80%, unplug the power cable to optimize battery life."
fi
else
if [[ $BATTERY_PERCENTAGE -lt 30 ]]; then
notify-send --urgency=critical "Battery optimization" "Battery is below 30%, plug in the power cable to optimize battery life."
fi
fi