Как я могу воспроизвести собственный звук при низком заряде батареи?
Я хочу, чтобы мой компьютер воспроизводил пользовательский звуковой файл, когда батарея разряжена (скажем, 10%). Как я могу это сделать? Спасибо
4 ответа
Я просто хотел ответить, поскольку я использовал совет на этой странице для настройки своего собственного 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
Объяснение вышесказанного
Звездочки на старте
Пять звездочек представляют частоту выполнения команд.
- Первая звезда = минуты: 0-59
- Вторая звезда = Часы: 0-23
- Третья звезда = День месяца: 0 - 31
- Четвертая звезда = месяц: 0 - 12
- Пятая звезда = День недели: 0 - 6 (0 означает воскресенье)
*/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)
минус ноль от значения, поэтому, когда значение является процентом -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|percentage"
Теперь вы можете поместить все эти вещи в сценарий оболочки (а также 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, чтобы выйти
Дополнительные вещи, которые вы можете прочитать...
На самом деле я использовал ответ Энди Пайна, но он не сработал для меня. Крон выполнил код, но не воспроизводил звук. Наконец я нашел решение и поделился им здесь:
Шаг 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: Сделайте файл исполняемым с помощью следующей команды.
chmod +x ~/bin/battery_alert
Шаг 4: Запустите этот файл с помощью cron, добавив следующую команду в конец файла. Opend by crontrab -e
команда.
*/5 * * * * /home/user/bin/battery_alert
(Не забывайте иметь пустую строку после этой команды)