当我的电池即将在Linux Mint中耗尽时,如何获得警报?


31

这件事对我来说比我想承认的要多得多,但是有时候我没有注意到电量变低,因为它只显示在我的状态栏中,然后计算机就退出了。我想要一个大警报,在这种情况发生之前警告我。有什么办法可以提醒我吗?Ubuntu有一个不错的弹出窗口,告诉您它越来越低。


在桌面环境中配置电源管理器以执行“某些操作”-通常范围从“无”,通过“运行命令”到“休眠” /“关闭电源”。
彼得

哪个桌面环境?
Renan

1
@peterph我只有“关闭电源”和“休眠”选项。
特拉维斯·里德

@Renan正在运行肉桂。
特拉维斯·里德

@TravisR抱歉,我的意思是说要配置达到严重电池电量时的行为
peterph 2013年

Answers:


26

写脚本!

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进行操作,那可能是一种更好的方法。


这种方法的优点是,只需稍作调整,便几乎可以应用于任何发行版/桌面环境组合。
珀金斯

我发现在Cinnamon环境中“通过GUI进行操作”的最佳方法是在面板中添加小程序:unix.stackexchange.com/a/353505/37552
Michael Scheper

7

回复:hdgarrood的回答,设置cronnotify-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脚本。


5

我现在运行以下命令:

$ 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的代码,但有一些更改:

  • 没有dbus的诡计,以某种方式我不需要它
  • 在代码开头将一些“常量”放入变量中
  • 仅在电池不充电时才实施警告(man test请参阅,它说明了如何进行“与”操作)。
  • 添加图标(在系统上找到一些考生喜欢的东西:$ find /usr/share/icons/ -iname "*batt*low*"
  • 到期时间(以毫秒为单位)

不要忘记chmod +x您的脚本,然后您就可以直接从cron(tab)运行它们,无需使用sh

(这适用于使用Xmonad的Ubuntu。)


3

由于您显然正在运行Cinnamon,因此只需安装带有Monitoring and Shutdown(BAMS)的Battery Applet

右键单击面板→ +将小程序添加到面板可用小程序(在线),在搜索小部件中键入“ BAMS”,然后进行安装和配置。

它不是最华丽的,但是到目前为止,当我不经意间拔掉笔记本电脑电源时,它已经使我警觉。


2

轻微扭曲-在Knoppix(已授予,而不是OP使用的Mint)上,通知发送不可用(未安装libnotify-bin软件包),因此我发现这对警报很有用:

xmessage Battery low & mplayer /usr/lib/libreoffice/share/gallery/sounds/beam.wav

我只是将其扔到了LXDE电池监视器面板的“警报命令”中,不需要脚本。

假定您已经安装了LibreOffice,但是.wav会发出不错的低功耗声音。在Knoppix上几乎没有.ogg。


1
我们也可以拥有更好的zenity代替xmesssageaplay替代mplayer
Matija NALIS

1

我有同样的问题,我想出了一种解决方法。我从Linux Mint存储库安装了一个名为GKrellM的应用程序。它监视机器上的很多东西,并且有电池。带有警报的设置,对我来说就像一种魅力。

更多信息,请访问:

http://www.gkrellm.net/


GKrellM对我不起作用。它太旧了,通知系统无法正常运行。
Bemipefe 2015年

1

该问题与KDE环境有关。我对MintMAYA KDE_version有相同的问题。当我使用Mint9_Gnome时,当达到一定程度的低功耗时会出现一个非常有用的弹出窗口(在全新安装中自动配置为out_of_the_box)。非常恼人的是没有建议就被关闭了,甚至在谷歌搜索上也没有帮助:(


1

我有同样的问题,这确实令人沮丧。我通过使用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

0

由于我没有安装Gnome Shell或Cinnamon,因此无法获得直接帮助,因为访问源代码可能非常实用,因为使用JavaScript添加这样的基本扩展很容易。

您应该打开:

/usr/share/cinnamon/js/ui/status/power.js

并搜索percentText-随后,您应该能够添加弹出消息或警报。


有趣的是,不知道这些东西是在javascript中。但是没有/ status目录,也没有power.js,我可以在/ cinnamon / js目录中的任何地方找到。
Travis Reeder 2013年

您是否尝试过使用以下find / -type f -name power.js
命令

跑到那,什么都没找到。
Travis Reeder 2013年

0

这是我在使用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

这个词ACADSTATUS=$(cat /sys/class/power_supply/ACAD/online)将根据笔记本电脑做出改变。它用于查找您的膝盖是否插入交流适配器。这是我的crontab的样子:

* * * * * bash <path to script>

不要忘记使用以下命令使脚本可执行 chmod u+x <path to script>


0

这个简单的程序对我来说很好用,只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黑客会失败)

如果您还需要在某些关键级别上挂起/休眠计算机,请参阅此答案



0

借助此处所有答案的所有信息,我创建了一个脚本并将其放在GitLab的存储库中。

在以下情况下会显示通知:

  • 拔下电缆,电池电量低于30%
  • 您的电缆已插入并且电池电量超过80%

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.