笔记本电脑拔掉电源时如何播放声音?

笔记本电脑拔掉电源时如何播放声音?

我的笔记本电脑拔掉电源后等待 1 分钟。上周我的笔记本电脑电缆开始无法与笔记本电脑良好连接。

我希望每次拔掉电源时都播放特定的声音,这样我就能快速将它们连接好。有人知道吗?

答案1

正如解释的那样这个答案, 你必须:

  1. cd进入你的主文件夹并创建目录.local/share/sounds

    cd && mkdir -p .local/share/sounds
    
  2. cd进入新创建的目录:

    cd .local/share/sounds
    
  3. 将所需的声音放在目录中,并将其重命名为power-unplug.wav(例如以这种方式):

    ln -s /usr/share/sounds/alsa/Noise.wav power-unplug.wav
    
  4. 使用以下方法测试事件:

    canberra-gtk-play -i power-unplug
    

我想,此时,您必须注销并重新登录才能使事件正常工作。尝试一下,看看它是否有效。您可以找到更多事件和声音名称这里

答案2

在我的 Ubuntu 16.04 系统上,声音并没有响应实际事件而发出,尽管它们会在测试中播放。

最后我写了一个脚本:~/checkpower.sh

#! /bin/bash
echo "monitoring"
power=$(cat /sys/class/power_supply/BAT0/status)
while true; do
  actual=$(cat /sys/class/power_supply/BAT0/status)
  # echo $actual
  if [ $actual != $power ]; then
     power=$actual
     echo $actual
  fi
  if [ $actual == "Discharging" ]; then
     echo "discharging"
     /usr/bin/speaker-test --frequency 2000 --test sine -p 1 -P 2 -l 1
  fi

  sleep 10
done

chmod +x ~/checkpower.sh

并设置服务:/etc/systemd/system/checkpower.service

[Unit]
Description=Check to see if battery is discharging and warn user

[Service]
Type=simple
ExecStart=/home/<myusername>/checkpower.sh
#in this line specify the path to the script.
User=<myusername>
#Environment=DISPLAY=:0
#Group=audio
Environment="XDG_RUNTIME_DIR=/run/user/1000"

[Install]
WantedBy=multi-user.target

显然,请更改<myusername>为您的实际用户名或将该路径更改为放置脚本的位置。可能应该在 /usr/bin 中。然后: sudo systemctl start checkpower

然后拔掉笔记本电脑的电源……等到它尖叫。我可以systemctl status checkpower看到回声和错误。退出状态并返回更新。可能有更好的方法可以做到这一点。

所以一旦它起作用了,(我必须将我的 BAT1 更改为 BAT0)然后我做了一个 sudo systemctl enable checkpower 并且它似乎工作正常。

针对 Ubuntu 22.04 进行了更新:我必须添加 User= 行和环境设置,这些设置是我从 echo $XDG_RUNTIME_DIR

我想做但不能做的事情:

  • aplay、canberra-gtk-play 等所有东西在作为服务运行时都无法工作。服务以 root 身份运行,而 root 无法找到硬件。我猜 Speaker-test 之所以能工作是因为它使用了默认设置?不知道。
  • 比如用于/usr/bin/notify-send -u critical "Monitoring Battery"显示通知也是一样。它找不到显示,并且 DBUS_SESSION_BUS_ADDRESS 存在一些奇怪的问题... 请参阅:crontab 中的 Notify-send 功能无法运行

答案3

您可以使用 Ubuntu 软件中心的“cuttlefish”和“vlc”(例如)。借助这个精致的小应用程序,您可以使用不同的情况作为触发特定操作的触发器。

对于你来说,情况是这样的:

开始乌贼

  • 创建新的“规则”
    1. 选择“通过刺激激活”
    2. 选择刺激 -> 硬件 -> ‘电源线已拔出’
    3. 然后在“反应”选项卡上选择“启动应用程序(高级模式)”
    4. 选择 cvlc(需要安装 vlc)作为可执行文件
    5. 在参数字段中输入所需声音的路径(应该很短)

现在,每次拔掉电源线时都应该播放声音。

答案4

#!/usr/bin/env python

import commands
import pynotify
from threading import Timer


def battery_check():

    rem = float(commands.getoutput("grep \"^remaining capacity\" /proc/acpi/battery/BAT0/state | awk '{ print $3 }'"))
    full = float(commands.getoutput("grep \"^last full capacity\" /proc/acpi/battery/BAT0/info | awk '{ print $4 }'"))
    state = commands.getoutput("grep \"^charging state\" /proc/acpi/battery/BAT0/state | awk '{ print $3 }'")

    percentage = int((rem/full) * 100)

    if state == "discharging":
        pynotify.init("Battery Alert!")
        notification = pynotify.Notification("Battery "+state,str(percentage)+"%","/usr/share/icons/gnome/32x32/status/battery-low.png")
        notification.show()

    timer = Timer(300.0,battery_check)
    timer.start()

if __name__ == "__main__": battery_check()

下载这里

相关内容