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

vyb*_*vyb 14 battery notification sound-theme

我希望我的电脑在电池电量低(比如 10%)时播放自定义声音文件。我怎样才能做到这一点?谢谢

小智 7

我只是想回复,因为我使用了这个页面上的建议来配置我自己的crontab -e工作。

我正在运行 Lubuntu(可信赖),上面的方法对我不起作用,但稍微调整了一下就可以了。我的(不)经验水平是我相对能够阅读基本的脚本和命令,但不太能够在 linux disto 中从头开始编写它们。我提到这一点是因为如果我能拼凑出一个正常工作的电池警报器,那么大多数阅读本文的人也应该能够做到!

所以......脚本和基本解释......

根据上面 Glutanimate 和 Scott Goodgame 的帖子(谢谢大家!),我基本上做了以下事情:

要获得 mpg123 并能够播放音频:

sudo apt-get install acpi mpg123
Run Code Online (Sandbox Code Playgroud)

要打开的文件写入命令:

crontab -e
Run Code Online (Sandbox Code Playgroud)

在文件末尾输入的命令:

*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Run Code Online (Sandbox Code Playgroud)

以上解释

开头的星号

五个星号代表运行命令的频率。

  • 第一颗星 = 分钟:0-59
  • 第二颗星 = 小时数:0-23
  • 第三颗星 = 月份的日期:0 - 31
  • 第四颗星 = 月份:0 - 12
  • 第五颗星 = 星期几:0 - 6(0 表示星期日)

*/1 * * * *

意思是“每分钟运行一次”。

如果/那么/FI:

IF [ stuff inside these brackets ] ; THEN do something ; FI
Run Code Online (Sandbox Code Playgroud)

我想你们中的大多数人都非常熟悉 IF/THEN 语句。最后的 FI 结束了 IF 语句

播放音频:

mpg123 /home/andy/Alarm.mp3
Run Code Online (Sandbox Code Playgroud)

这只是mpg123用来播放Alarm.mp3位于我的主目录中的文件/home/andy/

输出电池信息:

acpi -b
Run Code Online (Sandbox Code Playgroud)

这只是输出电池状态。在我的笔记本电脑上,它会产生如下结果:

Battery 0: Discharging, 74%, 02:35:18 remaining
Run Code Online (Sandbox Code Playgroud)

管道到 awk 命令

 | awk ' { print ( $(NF-2)-0)}'`  -lt "15"
Run Code Online (Sandbox Code Playgroud)

好的,所以我们正在传输上面电池状态的输出并打印第二个结束值(NF-2),在上面的例子中是“74%”。但是,我们需要删除“百分比” -0。我们想将当前值与值 15 -lt "15" 进行比较。所以用简单的英语总结一下,

如果电池电量低于 15% THEN 播放音频文件

我很感激我已经稍微简化了它,也许我的解释可以改进,但希望它会帮助其他人了解如何为电池添加警报并避免他们的笔记本电脑突然断电!

祝你好运!


编辑

好的...所以当我的笔记本电脑充电时,输出

acpi -b
Run Code Online (Sandbox Code Playgroud)

是:

Battery 0: Charging, 35%, 01:04:08 until charged
Run Code Online (Sandbox Code Playgroud)

而在电池上是

Battery 0: Discharging, 36%, 01:22:36 remaining
Run Code Online (Sandbox Code Playgroud)

所以使用最初提到的参数

print ( $(NF-2)-0)
Run Code Online (Sandbox Code Playgroud)

输出不同的结果,因为记住,NF-位指定从输出的末尾向后显示多少个项目,所以电池输出

Battery 0: Discharging, 36%, 01:22:36 remaining
Run Code Online (Sandbox Code Playgroud)

$(NF-2) 输出“36%”,而在笔记本电脑充电时,

Battery 0: Charging, 35%, 01:04:08 until charged
Run Code Online (Sandbox Code Playgroud)

$(NF-2) 输出'00:50:12',即充电前剩余的时间量。

-0$(NF-2)从价值弊为零,所以当值的百分比-0改变它像'36%”到‘36’。当输出值被感知为非数字时,例如上面的'01:04:08'的时间输出,-0返回的值是'0'。所以你可以看到我的问题 - 当我的笔记本电脑充电时,输出值总是“0”。由于我想在输出值小于 15 时播放警报,因此它转换为充电时每一分钟响一次的电池警报!

我对awk命令的输出多读了一点,结果证明我不需要让它从末尾读取第二个值,我可以从输出的开头开始并向前跳过。这要好得多,因为我的电池状态开始时无论是在充电还是在电池上就参数数量而言都是相同的,即从一开始的第四个参数总是以百分比表示的充电值。

所以......为了让它读取第四个值,命令从

awk ' { print ($(NF-2)-0)}'
Run Code Online (Sandbox Code Playgroud)

awk ' { print ($4)-0}'
Run Code Online (Sandbox Code Playgroud)

或在其全盛时期:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Run Code Online (Sandbox Code Playgroud)

我再次希望对某人有所帮助!祝你好运,感谢阅读!


奖金编辑

好的,所以再多看看,我还研究了如何在播放闹钟之前将音量设置为 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
Run Code Online (Sandbox Code Playgroud)

如您所见,我所做的只是插入了命令字符串

pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&
Run Code Online (Sandbox Code Playgroud)

&&'s 只是将多个命令绑定在一起)

再次祝大家好运!

上次编辑

好的,所以......最后(希望!)编辑......显然,百分比符号是运行cron任务时的特殊符号。因此,您必须通过\在每个百分号前面放置一个反斜杠 ( )来“转义”百分号,%这样 shell 就不会(错误)解释它。

所以基本上更换

100%
Run Code Online (Sandbox Code Playgroud)

100\%
Run Code Online (Sandbox Code Playgroud)

因此,您真正需要的命令是:

*/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
Run Code Online (Sandbox Code Playgroud)

希望它对你像对我一样!!(最终!)


Sco*_*ame 4

一种简单的方法是在 crontab 中添加一个简单的检查(cron 是一个在后台定期运行用户定义的系统)。

首先,您需要安装命令行 mp3 播放器和 acpi 才能读取电池状态。

从终端运行以下命令来安装软件包。

sudo apt-get install acpi mpg123
Run Code Online (Sandbox Code Playgroud)

接下来,仍在终端中,crontab -e在文件末尾键入并输入以下内容。只需将用户更改为您的用户名,并将 .mp3 更改为您主目录中的文件名。

*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'`  -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3   ;fi
Run Code Online (Sandbox Code Playgroud)

按 Control-O(字母)并 Enter 进行保存。按 Control-x 退出

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

Ubuntu Cron指南

Ubuntu 指南


Nul*_*ter 4

您可以设置一个 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 作业。

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

希望这可以帮助!

  • 没错,只有酷人才用 mpg123 :) (3认同)