Как я могу получить предупреждение, когда моя батарея вот-вот погибнет в Linux Mint?

31

Это случается со мной больше, чем я хотел бы признать, но иногда я не замечаю, что мощность снижается, так как она отображается только в моей строке состояния, а затем компьютер просто выключается. Я хотел бы получить большое предупреждение, которое предупреждает меня, прежде чем это произойдет. Есть ли способ предупредить меня? У Ubuntu есть хорошее всплывающее окно, которое говорит вам, что становится мало.

Трэвис Ридер
источник
Сконфигурируйте power-manager из среды рабочего стола, чтобы он делал «что-то» - обычно он может варьироваться от «ничего» до «выполнить команду» до «спящего режима» / «выключить питание».
Петер
Какая среда рабочего стола?
Ренан
1
@peterph У меня есть только опции «Выключить» и «Спящий режим».
Трэвис Ридер
@ Ренан управляет Корицей.
Трэвис Ридер
@TravisR извините, я хотел сказать, настроить поведение при достижении критического уровня заряда батареи
peterph

Ответы:

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

затем бегите каждые несколько минут или около того. Но да, если вы можете сделать это через графический интерфейс, это, вероятно, гораздо лучший способ сделать это.

hdgarrood
источник
Преимущество этого метода заключается в том, что он будет применяться практически к любой комбинации дистрибутивов и рабочих столов с небольшими изменениями.
Perkins
Лучший способ «сделать это с помощью GUI» в моей среде Cinnamon - добавить апплет на панель: unix.stackexchange.com/a/353505/37552
Майкл Шепер,
7

re: hdgarrood 's ответ, установка 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.

orangenarwhals
источник
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, что, помимо прочего, объясняется, как выполнять операции AND).
  • добавлен значок (найти несколько кандидатов в вашей системе что - то вроде: $ find /usr/share/icons/ -iname "*batt*low*")
  • время истечения в миллисекундах

не забывайте chmod +xсвои скрипты, вы можете запускать их прямо из cron (вкладка), в этом нет необходимости sh.

(Это работает в Ubuntu с использованием Xmonad.)

Higemaru
источник
3

Поскольку вы, очевидно, используете Cinnamon, просто установите Battery Applet с функцией мониторинга и отключения (BAMS) .

Щелкните правой кнопкой мыши панель → + Добавить апплеты на панельДоступные апплеты (онлайн) , введите «BAMS» в виджете поиска, установите и настройте его.

Это не самая яркая вспышка, но пока она меня уже насторожила, когда я невольно отключил ноутбук.

Майкл Шепер
источник
2

Незначительный поворот - на Knoppix (предоставляется, а не Mint, как используется OP) уведомление-отправка было недоступно (пакет libnotify-bin не установлен), поэтому вместо этого я нашел это полезным для предупреждения:

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

Я просто добавил это в команду «Alarm» на панели «Battery Monitor» LXDE, сценарий не нужен.

Это предполагает, что у вас установлен LibreOffice, но .wav издает хороший звук с низким энергопотреблением. На Knoppix практически нет .ogg.

Randall
источник
1
один может также лучше zenityвместо xmesssageи aplayвместоmplayer
Матия Nalis
1

У меня была та же проблема, и я нашел обходной путь. Я установил из репозиториев Linux Mint приложение под названием GKrellM. Он контролирует много вещей на вашей машине и есть батарея. Настройка с будильниками, это работает для меня как шарм.

больше информации на:

http://www.gkrellm.net/

Marcello
источник
GKrellM не работал для меня. Он слишком старый и система уведомлений не работает должным образом.
Бемипефе
1

Проблема связана со средой KDE. У меня та же проблема с MintMAYA KDE_version. Когда я работал с Mint9_Gnome, очень полезное всплывающее окно появлялось при достижении определенного уровня низкого энергопотребления (автоматическая настройка out_of_the_box при новой установке). Очень очень раздражает, когда меня закрывают без совета и никакой помощи, даже если он много гуглит :(

Symb932
источник
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. Вам нужно только изменить звук уведомления, если вы хотите звуковое оповещение. Если вы не хотите запускать сценарий автоматически при запуске среды рабочего стола, поместите сценарий в папку $ USER / bin с помощью сценария BatteryAlertLauncher.sh :

#!/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
Bemipefe
источник
0

Поскольку у меня не установлены Gnome Shell или Cinnamon, я не могу помочь вам напрямую, так как доступ к источнику может быть очень практичным, поскольку добавить такое элементарное расширение с помощью JavaScript довольно просто.

Вы должны открыть:

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

и искать процент текста - впоследствии, вы должны иметь возможность добавить всплывающее сообщение или предупреждение.

nesyphlopanuri
источник
Интересно, что я не знал, что это в javascript. Но нет каталога / status и нет power.js, который я могу найти в каталогах / cinnamon / js.
Трэвис Ридер
Вы пытались найти его с правами root с помощью:find / -type f -name power.js
nesyphlopanuri
Побежал, ничего не нашел.
Трэвис Ридер
0

Вот как я это сделал на моем Arch Linux с Gnome как DE:

#!/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>

daltonfury42
источник
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

Загрузите апплет под названием BAMS. Он автоматически предупредит вас, когда батарея достигнет определенного вами уровня. Это самое простое решение.

Праная Сарайвала
источник
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.
# /ubuntu/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
gitaarik
источник