Як я можу отримати сповіщення, коли моя батарея збирається вмерти в Linux Mint?


31

Це трапляється зі мною більше, ніж я хотів би визнати, але іноді я не помічаю, як потужність знижується, оскільки вона відображається лише в моєму рядку стану, тоді комп'ютер просто закривається. Мені хотілося б великого попередження, яке попереджає мене до того, як це станеться. Чи є якийсь спосіб, щоб він попередив мене? У Ubuntu є гарне спливаюче вікно, яке говорить про те, що він стає низьким.


Налаштуйте менеджер живлення з вашого робочого середовища, щоб зробити щось "- це зазвичай може варіюватися від" нічого "," виконувати команду "до" сплячки "/" вимкнення живлення ".
петерф

Яке середовище робочого столу?
Ренан

1
@peterph У мене є лише параметри "Вимкнено живлення" та "Спячий режим".
Тревіс Редер

@Renan працює Корицею.
Тревіс Редер

@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

потім виконайте її запуск кожні кілька хвилин або близько того. Але так, якщо ви можете це зробити через GUI, це, мабуть, набагато кращий спосіб зробити це.


Цей метод має ту перевагу, що він застосовуватиметься майже до будь-якої комбінації дистрибутива / робочого столу з невеликою настройкою.
Перкінс

Найкращий спосіб, який я знайшов "зробити це через GUI" у своєму середовищі Cinnamon, - додати аплет на панель: unix.stackexchange.com/a/353505/37552
Майкл

7

re: відповідь 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баш сценаріїв.


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

Як ви бачите, це просто помаранчевий код з деякими змінами:

  • ніяких хитрощів на dbus, якось мені це не було потрібно
  • помістити деякі "константи" в змінні на початку коду
  • реалізовані попередження лише тоді, коли акумулятор не заряджається (погляньте man test, це пояснює, як робити AND, серед іншого).
  • доданий значок (знайдіть кандидатів у вашій системі з чимось на зразок $ find /usr/share/icons/ -iname "*batt*low*":)
  • час закінчення в мілісекундах

не забувайте про chmod +xсвої сценарії, ви можете запустити їх безпосередньо з cron (tab), не потрібно sh.

(Це працює на Ubuntu за допомогою Xmonad.)


3

Оскільки ви, мабуть, працюєте з Cinnamon, просто встановіть Battery Applet з моніторингом та вимкненням (BAMS) .

Клацніть правою кнопкою миші на панелі → + Додати аплети на панельДоступні аплети (онлайн) , введіть у пошуковий віджет 'BAMS' та встановіть та налаштуйте його.

Це не найсміливіше, але поки що воно вже насторожило мене, коли у мене ноутбук мимоволі вийшов з розетки.


2

Незначні повороти - на Knoppix (надано, не монетний двір, як використовується ОП) сповіщення-відправлення не було доступне (пакет libnotify-bin не встановлений), тому замість цього я вважаю це корисним для оповіщення:

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

Я просто кинув це в команду тривоги на панелі монітора акумулятора LXDE, не потрібно сценарій.

Це передбачає, що у вас встановлено LibreOffice, але це .wav видає хороший звук низької потужності. На Knoppix практично немає .ogg.


1
також може бути приємніше zenityзамість xmesssageі aplayзамістьmplayer
Matija 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 Shenam або Cinnamon, я не можу надати прямої допомоги, оскільки доступ до джерела міг би бути дуже практичним, оскільки досить просто додати таке рудиментарне розширення JavaScript.

Вам слід відкрити:

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

і шукати процентний текст - згодом ви повинні мати можливість додати спливаюче повідомлення або попередження.


Цікаво, що не знав, що цей матеріал знаходиться у JavaScript. Але не каталог / статус та відсутність 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.
# 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.