Skip to content

Instantly share code, notes, and snippets.

@enginefeeder101
Created December 28, 2022 10:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save enginefeeder101/d7695e22a8b741e4b27b9ba4712e2a0f to your computer and use it in GitHub Desktop.
Save enginefeeder101/d7695e22a8b741e4b27b9ba4712e2a0f to your computer and use it in GitHub Desktop.
Beep on low battery (even when muted)
#!/bin/bash
# Script to detect low battery volume while discharging and beep when so
# Prevent beeps with: `touch /tmp/no-beep'
while true
do
status=$(cat /sys/class/power_supply/BAT0/status)
full=$(cat /sys/class/power_supply/BAT0/energy_full)
now=$(cat /sys/class/power_supply/BAT0/energy_now)
low=$(echo "$now / $full < 0.1" | bc -l)
if [ "$status" != "Charging" ] && [ "$low" == "1" ] && ! [ -f "/tmp/no-beep" ]; then
# Play a warning sound, even when speakers are muted
# Get current settings
volume=$(pactl -- get-sink-volume 0 | grep -oEi '([0-9]+)%')
mute=$(pactl -- get-sink-mute 0 | awk '{print $2}')
# Unmute set volume
pactl -- set-sink-mute 0 no
pactl -- set-sink-volume 0 40%
# Upload audio, play, remove
pactl -- upload-sample /usr/share/sounds/freedesktop/stereo/suspend-error.oga error
pactl -- play-sample error 0
sleep 1.5
pactl -- remove-sample error
# Restore settings
pactl -- set-sink-mute 0 $mute
pactl -- set-sink-volume 0 $volume
fi
sleep 60
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment