电池电量低时如何播放自定义声音?


13

我希望计算机在电池电量不足(例如10%)时播放自定义声音文件。我怎样才能做到这一点?谢谢

Answers:


6

我只是想回复,因为我使用了本页上的建议来配置自己的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%”。但是,我们需要删除'percentage'- 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任务时的特殊标志。因此,您必须\在每个百分号前加一个反斜杠()来“转义”百分号,%以免shell误解。

所以基本上取代

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

phe希望它能像我一样为您排序!!(最终!)


这是一个很好的解释!不幸的是,充电时它也会每分钟播放一次声音。
OpnSrcFan

5

您可以设置一个cron作业,该作业每5/10分钟检查一次电池状态,然后根据电池百分比播放一些声音。

要播放声音,您可以使用

mpg123 文件名.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"

现在,您可以将所有这些内容放入shell脚本(以及if检查电池状态是否低于10%的条件),然后将此shell脚本的路径提供给cron job。

因此,每隔5分钟(您可以更改此间隔),将检查一次电池状态,如果电池电量不足10%,则将播放您提供的声音文件!

希望这可以帮助!


3
没错,只有很酷的人才能使用mpg123 :)
Scott Goodgame

3

一种简单的方法是在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退出

您可能想阅读的其他内容...

Ubuntu CronHowto

Ubuntu指南


在这里没有工作:➜〜if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt“ 10”]; 然后播放/home/felipelalli/Music/siren.wav; fi [:预期的整数表达式:remainin➜〜acpi电池0:放电中,剩余9%,00:17:56剩余
Felipe

2

其实我是用安迪·派恩的答案但它对我没有用。cron执行了代码,但是没有播放声音。最后,我找到了解决方案并在这里共享:

步骤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

如果笔记本电脑正在放电并且电量小于或等于15%,则此脚本将播放battery_low.mp3。(如果连接了交流电源,它将不会提示您)。如果收费是100%,此代码也会提醒您。如果您不希望收到充满电状态的警报,请从此代码中删除else部分。

步骤3:使用以下命令使文件可执行。

chmod +x ~/bin/battery_alert

步骤4:使用cron执行此文件,方法是在命令打开的文件末尾添加以下crontrab -e命令。

*/5 * * * * /home/user/bin/battery_alert

(不要忘记在此命令后有一个空行)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.