Я хочу, чтобы мой компьютер воспроизводил пользовательский звуковой файл при низком заряде батареи (скажем, 10%). Как я могу это сделать? Благодаря
Я просто хотел ответить, поскольку воспользовался советом на этой странице для настройки своего собственного crontab -e
задания.
Я использую Lubuntu (надежный), и описанное выше не сработало меня, но с небольшой настройкой все получилось. Мой уровень (не) опыта заключается в том, что я относительно способен читать базовые сценарии и команды, но менее способен писать их с нуля в Linux disto. Я упоминаю об этом, потому что, если я смогу собрать работающую сигнализацию батареи, большинство из вас, читающих это, тоже смогут!
Итак ... сценарий и основное объяснение ....
Согласно сообщения выше от Glutanimate и Scott Goodgame (спасибо, ребята!), я в основном сделал следующее:
Чтобы получить mpg123 и иметь возможность воспроизводить аудио:
sudo apt-get install acpi mpg123
Файл, который нужно открыть, чтобы написать команду:
crontab -e
Команда для ввода в конец файла:
*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Звездочки в начале
Пять звездочек представляют частоту, с которой следует запускать команды.
* / 1 * * * *
означает «запускать каждую минуту».
IF / THEN / FI:
IF [ stuff inside these brackets ] ; THEN do something ; FI
Большинство из вас Я полагаю, они хорошо знакомы с операторами IF / THEN. FI в конце завершает оператор IF
Воспроизведение звука:
mpg123 /home/andy/Alarm.mp3
здесь просто используется mpg123
для воспроизведения файла с именем Alarm.mp3
, расположенного в моем домашнем каталоге ] / home / andy /
.
Вывод информации о батарее:
acpi -b
просто выводит состояние батареи. На моем ноутбуке это дает такие результаты, как:
Battery 0: Discharging, 74%, 02:35:18 remaining
Передать команду awk
| awk ' { print ( $(NF-2)-0)}'` -lt "15"
Хорошо, поэтому мы передаем по конвейеру вывод состояния батареи выше, а печатаем во втором с конца значение (NF-2) , которое в приведенном выше примере равно «74%». Однако нам нужно удалить «процент» -0 . Мы хотим сравнить текущее значение со значением 15 -lt "15" . Итак, чтобы резюмировать это на простом английском языке,
ЕСЛИ уровень заряда батареи МЕНЬШЕ 15%, ТО воспроизведите аудиофайл
Я ценю, что я немного его упустил и, возможно, мое объяснение можно улучшить, но надеюсь, это поможет кому-то другому понять, как добавить будильник для батареи и предотвратить внезапное отключение ноутбуков!
Удачи!
Хорошо ... так получается что когда мой ноутбук заряжается, вывод
acpi -b
будет:
Battery 0: Charging, 35%, 01:04:08 until charged
, тогда как на батарее -
Battery 0: Discharging, 36%, 01:22:36 remaining
, поэтому при использовании параметра, упомянутого вначале
print ( $(NF-2)-0)
, получаются разные результаты, потому что помните, значение NF- бит указывает, сколько элементов в обратном направлении от конца вывода для отображения, поэтому при выводе на батарее
Battery 0: Discharging, 36%, 01:22:36 remaining
$ (NF-2)
выводится '36% ', тогда как при заряженном портативном компьютере
Battery 0: Charging, 35%, 01:04:08 until charged
$ (NF-2)
выводит '00: 50: 12 ', то есть количество времени, оставшееся до зарядки.
-0
после $ (NF-2)
минус ноль от th е значение, поэтому, когда значение представляет собой процент -0
изменяет его с чего-то вроде «36%» на «36». Когда выходное значение воспринимается как нечисловое, например, выходное время «01: 04: 08», как указано выше, возвращаемое значение -0
равно «0». Итак, вы можете видеть мою проблему - когда мой ноутбук заряжен, выходное значение всегда равно «0». Так как я хочу включить будильник, когда выходное значение меньше 15, это преобразуется в аварийный сигнал батареи, который срабатывает каждую минуту при зарядке!
Я прочитал немного больше о выходе awk
, и оказалось, что мне не нужно было заставлять ее читать второе значение с конца, я мог начать с начала вывода и пропустить вперед. Это намного лучше, поскольку состояние моей батареи начинается одинаково, независимо от того, заряжена она или нет, с точки зрения количества параметров, то есть четвертый параметр с самого начала всегда является значением заряда в процентах.
ТАК ... заставьте его прочитать четвертое значение, команда изменится с
awk ' { print ($(NF-2)-0)}'
на
awk ' { print ($4)-0}'
или во всей красе:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Опять же, я надеюсь, что это кому-то поможет! Удачи и спасибо за чтение!
Хорошо, я еще немного пощупал, и я также придумал, как установить громкость на 100% и включить звук перед включением будильника - потому что давайте посмотрим правде в глаза, что за точка срабатывания будильника, если вы не слышите его, потому что вы установили низкий уровень громкости или отключили звук?!
В любом случае, вам нужна следующая команда:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi
как видите, все, что я сделал вставляется командная строка
pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&
( &&
просто связывают несколько команд вместе)
И снова удачи всем!
Итак ... один последний (надеюсь!) редактировать ... видимо, знак процента - это особый знак при запуске задач cron. Следовательно, вы должны «избежать» знака процента, поставив обратную косую черту ( \
) перед каждым %
, чтобы это не (неправильно) интерпретировалось оболочкой.
Так что в основном замените
100%
на
100\%
Таким образом, команда, которая вам ДЕЙСТВИТЕЛЬНО нужна:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then pactl set-sink-volume 0 100\% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi
фу надеюсь, что это отсортирует ее для вас так же, как и для меня !! (в конце концов!)
Вы можете настроить задание cron, которое будет проверять состояние батареи каждые 5/10 минут, а затем, в зависимости от процента заряда батареи, будет воспроизводить какой-то звук.
Для воспроизведения звука вы можете использовать
mpg123
filename.mp3
Чтобы установить его
sudo apt-get install mpg123
Чтобы узнать состояние батареи из командной строки, вы можете использовать эту команду
upower -i / org / freedesktop / UPower / devices / battery_BAT0
с помощью grep
вы можете извлечь точную информацию следующим образом
upower -i / org / freedesktop / UPower / devices / battery_BAT0 | grep -E "state | to \ full | percent"
Теперь вы можете поместить все это в сценарий оболочки (а также условие if
для проверки того, что уровень заряда батареи ниже 10%) и просто укажите путь к этому сценарию оболочки для задания cron.
чтобы через каждые 5 минут (вы можете изменить этот интервал) ваш статус батареи будет проверяться, и если батарея ниже 10%, ваш предоставленный звуковой файл будет воспроизводиться!
Надеюсь, это поможет!
Один из простых способов сделать это - добавить простую проверку в ваш crontab (cron - это система, которая запускает вещи на регулярной, определяемой пользователем основе в фоновом режиме).
Во-первых. вам необходимо установить mp3-плеер командной строки и acpi, чтобы иметь возможность считывать состояние батареи.
С терминала запустите следующее, чтобы установить пакеты.
sudo apt-get install acpi mpg123
Затем, все еще находясь в терминале, введите crontab - e
и введите следующее в конец файла. Просто измените пользователя на свое имя пользователя и .mp3 на свое имя файла в домашнем каталоге.
*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'` -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3 ;fi
Нажмите Control-O (буква) и Enter, чтобы сохранить. Нажмите Control-x для выхода
Дополнительные материалы, которые вы, возможно, захотите прочитать ...
На самом деле я использовал ответ Andy Pyne, но он не сработал на меня. Крон выполнил код, но не воспроизвел звук. Наконец-то я нашел решение и поделился им здесь:
Шаг 1: Установите mpg3
sudo apt-get install acpi mpg123
Шаг 2:.
Сохраните следующую команду в ~/bin/battery_alert
#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ `acpi -b | awk ' { print ($3)}'` == "Discharging," ] ; then
# Discharging
# Monitor for low battery
if [ `acpi -b | awk ' { print ($4)-0}'` -le "15" ] ; then
pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_low.mp3 ;
fi
else
# Charging
if [ `acpi -b | awk ' { print ($4)-0}'` -eq "100" ] ; then
# Fully charged
pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_full.mp3 ;
fi
fi
Этот сценарий воспроизводит battery_low.mp3, если ноутбук разряжается, а зарядка составляет менее или равна 15%. (Если питание от переменного тока подключено, он не предупредит вас). Этот код также предупреждает, если заряд составляет 100%. Если вы не хотите получать предупреждение о состоянии полной зарядки, удалите из этого кода оставшуюся часть.
Шаг 3: Сделайте файл исполняемым, используя следующую команду. Шаг 4: Выполните этот файл с помощью cron, добавив следующую команду в конец файла, opend командой crontrab -e
.
*/5 * * * * /home/user/bin/battery_alert
(Не забудьте иметь пустую строку после этой команды)