我希望我的电脑在电池电量低(例如 10%)时播放自定义声音文件。我该怎么做?谢谢
答案1
我只是想回复,因为我使用此页面上的建议来配置我自己的crontab -e
工作。
我正在运行 Lubuntu(值得信赖),上面的方法对我来说不起作用,但经过一些调整后就可以了。我的经验水平(缺乏)是,我相对能够阅读基本的脚本和命令,但不太能够在 Linux 发行版中从头编写它们。我提到这一点是因为如果我能拼凑出一个可以工作的电池警报,那么阅读本文的大多数人也应该能够做到!
所以......脚本和基本解释....
根据 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 * * * *
意思是‘每分钟运行一次’。
如果/则/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"
好的,我们将电池状态的输出传输到上面,打印倒数第二个值(神经纤维化-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 &&
(&&
's 只是将多个命令绑定在一起)
再次祝大家好运!
最后编辑
好的,那么... 最后(希望如此!)编辑一下... 显然,百分号在运行 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
呼希望这对你也有帮助,就像对我一样!!(最终!)
答案2
您可以设置一个 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%,则会播放您提供的声音文件!
希望这可以帮助!
答案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 退出
您可能想阅读的额外内容...
答案4
其实我用的是安迪·派恩但对我来说没用。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
(不要忘记此命令后有一个空行)