Как я могу получить предупреждение, когда моя батарея вот-вот погибнет в 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

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


Преимущество этого метода заключается в том, что он будет применяться практически к любой комбинации дистрибутивов и рабочих столов с небольшими изменениями.
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.


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.)


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.


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

1

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

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

http://www.gkrellm.net/


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

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

0

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

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

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

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


Интересно, что я не знал, что это в 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>


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.