我的笔记本电脑拔掉电源后等待 1 分钟。上周我的笔记本电脑电缆开始无法与笔记本电脑良好连接。
我希望每次拔掉电源时都播放特定的声音,这样我就能快速将它们连接好。有人知道吗?
答案1
正如解释的那样这个答案, 你必须:
cd
进入你的主文件夹并创建目录.local/share/sounds
:cd && mkdir -p .local/share/sounds
cd
进入新创建的目录:cd .local/share/sounds
将所需的声音放在目录中,并将其重命名为
power-unplug.wav
(例如以这种方式):ln -s /usr/share/sounds/alsa/Noise.wav power-unplug.wav
使用以下方法测试事件:
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”(例如)。借助这个精致的小应用程序,您可以使用不同的情况作为触发特定操作的触发器。
对于你来说,情况是这样的:
开始乌贼
- 创建新的“规则”
- 选择“通过刺激激活”
- 选择刺激 -> 硬件 -> ‘电源线已拔出’
- 然后在“反应”选项卡上选择“启动应用程序(高级模式)”
- 选择 cvlc(需要安装 vlc)作为可执行文件
- 在参数字段中输入所需声音的路径(应该很短)
现在,每次拔掉电源线时都应该播放声音。
答案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()
下载这里。