如何在电池电量不足时播放自定义声音?
我希望我的电脑在电池电量不足时播放自定义声音文件(比如说10%)。 我怎样才能做到这一点? 谢谢
我只想回复,因为我使用了此页面上的建议来配置我自己的crontab -e
作业。
我正在运行Lubuntu(可信赖),上面的内容对我来说不起作用,但稍作调整就行了。 我的经验水平是,我相对有能力阅读基本的脚本和命令,但不太能够在linux disto中从头开始编写它们。 我提到这一点,因为如果我可以拼凑一个工作电池警报,你们大多数人都应该能够这样做!
所以….剧本和基本解释….
根据Glutanimate和Scott Goodgame的上述post(谢谢大家!),我基本上做了以下事情:
获得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
播放位于我的主目录/home/andy/
名为Alarm.mp3
的文件。
输出电池信息:
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%那么播放音频文件
我很欣赏我有点愚蠢,也许我的解释可以改进,但希望它能帮助别人了解如何为电池添加警报并避免他们的笔记本电脑突然断电!
祝好运!
编辑
好吧……所以事实certificate,当我的笔记本电脑充电时,输出
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’,即收费前的剩余时间。
$(NF-2)
之后的-0
从值中减去零,所以当值为百分比-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
phew希望能为你排序,因为它对我有用!! (最终!)
您可以设置一个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"
现在,您可以将所有这些内容放在shell脚本中(以及if
条件以检查电池状态是否低于10%),并将此shell脚本的路径提供给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退出
您可能想要阅读的额外内容……
Ubuntu CronHowto
Ubuntu指南
实际上我使用了Andy Pyne的答案,但它对我不起作用。 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
命令的文件crontrab -e
。
*/5 * * * * /home/user/bin/battery_alert
(不要忘记在此命令后有一个空行)