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

Найденный в конфигурационном файле Openbox rc.xml:

# increase by 3%
amixer -q sset Master 3%+

# decrease by 3%
amixer -q sset Master 3%-

# mute/unmute
amixer -q sset Master toggle

amixer страница руководства может предоставить больше подробную информацию.

31
21.05.2017, 14:13
13 ответов

запишите сценарий!

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

26
27.01.2020, 19:38
  • 1
    , Этот метод имеет преимущество, что это будет относиться примерно к любой комбинации дистрибутива/настольной среды с небольшой тонкой настройкой. –  Perkins 22.10.2015, 19:53
  • 2
    Лучшим способом я нашел, чтобы 'сделать это через GUI' в моей Коричной среде, должен добавить апплет к панели: unix.stackexchange.com/a/353505/37552 –  Michael Scheper 24.03.2017, 08:59

Поскольку у меня нет Gnome Shell или Корицей установленный, я не могу иметь прямой справки, поскольку доступ к источнику мог быть очень практичным, так как это - довольно легкое добавление такого элементарного расширения с JavaScript.

Необходимо открыться:

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

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

0
27.01.2020, 19:38
  • 1
    Интересный, не знал, что этот материал находится в JavaScript. Но никакой / каталог состояния и никакой power.js я могу найти где угодно в/cinnamon/js каталогах. хороший –  Travis Reeder 12.01.2013, 20:09
  • 2
    Имейте Вас, пытался искать его от корневого использования: find / -type f -name power.js –  nesyphlopanuri 13.01.2013, 16:32
  • 3
    Выполнил это, ничто найденное. –  Travis Reeder 15.01.2013, 00:46

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

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

http://www.gkrellm.net/

1
27.01.2020, 19:38
  • 1
    GKrellM не работал на меня. Это слишком старо, и система уведомления не работает правильно. –  Bemipefe 03.09.2015, 13:18

кто | grep -e «^ $1» -e «^ $2» -e «^ $3» должен делать

-121--161479-

Я ленивый чувак, и мне нравится делать это просто. ggdG - это пять нажатий клавиш, в том числе Shift

gg переходит в первую строку файла, d - начало команды d elete и G - движение для перехода в нижнюю часть файла. Многословно, это перейти к началу файла и удалить все до конца плитки.

-121--249-

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

1
27.01.2020, 19:38

Re: Ответ HDGARROVE, настройка CRON для запуска Уведомление на самом деле оказалось мучительно сам. (Я думаю, что 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.

7
27.01.2020, 19:38

Сейчас я выполняю следующее:

$ 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

Как вы можете видеть, это просто код Orangenarhals с некоторыми изменениями:

  • Никаких DBUS Creinkery, как-то мне не нужно
  • Поместите некоторые «константы» в переменные в начале кода
  • . Реализованные предупреждения, только когда батарея не заряжается (посмотрите на тест , он объясняет, как делать и среди прочего.)
  • Добавлена ​​икона (найди несколько кандидатов в вашей системе с чем-то вроде: $ Найти / usr / share / icons / iname "* Batt * Low *" )
  • Время истечения в миллисекундах

Не забудьте CHMOD + X Ваши сценарии, вы можете запускать их непосредственно из CRON (Tab), нет необходимости в SH .

(Это работает на Ubuntu, используя XMonad.)

5
27.01.2020, 19:38

У меня такая же проблема, и это меня очень расстраивает. Я решил с помощью сценария 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
1
27.01.2020, 19:38

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

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

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

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

2
27.01.2020, 19:38

Вот как я сделал это в моем 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 <путь к скрипту>

0
27.01.2020, 19:38

Этот простой вариант отлично работает для меня, требуется установить только простой пакет 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
27.01.2020, 19:38

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

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

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

3
27.01.2020, 19:38

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

0
27.01.2020, 19:38

С помощью всей информации из всех ответов здесь я создал скрипт и поместил его в репозиторий на 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
3
27.01.2020, 19:38

Теги

Похожие вопросы