Skip to content

Instantly share code, notes, and snippets.

@lucasxavierleite
Created November 2, 2022 03:52
Show Gist options
  • Save lucasxavierleite/558b5f550b4365f05bae19a51ff358fe to your computer and use it in GitHub Desktop.
Save lucasxavierleite/558b5f550b4365f05bae19a51ff358fe to your computer and use it in GitHub Desktop.
ACPI handler script
#!/bin/bash
VOLUME_MAX=150
VOLUME_STEP=10
BRIGHTNESS_STEP=10
# TODO: test with currently active icon theme, using the command below
# gsettings get org.gnome.desktop.interface icon-theme
ICON_VOLUME_MUTED="/usr/share/icons/Papirus/48x48/status/notification-audio-volume-muted.svg"
ICON_VOLUME_LOW="/usr/share/icons/Papirus/48x48/status/notification-audio-volume-low.svg"
ICON_VOLUME_MEDIUM="/usr/share/icons/Papirus/48x48/status/notification-audio-volume-medium.svg"
ICON_VOLUME_HIGH="/usr/share/icons/Papirus/48x48/status/notification-audio-volume-high.svg"
ICON_BRIGHTNESS_OFF="/usr/share/icons/Papirus/48x48/status/notification-display-brightness-off.svg"
ICON_BRIGHTNESS_LOW="/usr/share/icons/Papirus/48x48/status/notification-display-brightness-low.svg"
ICON_BRIGHTNESS_MEDIUM="/usr/share/icons/Papirus/48x48/status/notification-display-brightness-medium.svg"
ICON_BRIGHTNESS_HIGH="/usr/share/icons/Papirus/48x48/status/notification-display-brightness-high.svg"
ICON_BRIGHTNESS_FULL="/usr/share/icons/Papirus/48x48/status/notification-display-brightness-full.svg"
# Upload volume change audio sample
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl upload-sample /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga
function get_sink {
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl get-default-sink
}
function get_volume {
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl get-sink-volume `get_sink` | cut -d':' -f3 | cut -d'/' -f2 | head -n1 | xargs | cut -d'%' -f1
}
function volume_is_muted {
M="$(sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl get-sink-mute "$(get_sink)" | cut -d':' -f2 | xargs)"
[[ $M == no ]] && return
#if [[ $M -eq 'não' ]]
#then
#false
#return
#elif [[ $M -eq 'sim' ]]
#then
#true
#return
#fi
}
function volume_mute_toggle {
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-mute `get_sink` toggle
}
function volume_down {
volume_is_muted
if [[ $? -eq 1 ]]
then
volume_mute_toggle
fi
VOLUME="$VOLUME + $VOLUME_STEP"
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-volume `get_sink` -$VOLUME_STEP%
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl play-sample audio-volume-change
}
function volume_up {
VOLUME=`get_volume`
if [[ "$VOLUME + $VOLUME_STEP" -gt $VOLUME_MAX ]]
then
return
fi
volume_is_muted
if [[ $? -eq 1 ]]
then
volume_mute_toggle
fi
VOLUME="$VOLUME + $VOLUME_STEP"
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-volume `get_sink` +$VOLUME_STEP%
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 pactl play-sample audio-volume-change
#sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 canberra-gtk-play -i audio-volume-change -V="$VOLUME"
}
function brightness_down {
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 light -U $BRIGHTNESS_STEP
}
function brightness_up {
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 light -A $BRIGHTNESS_STEP
}
function notify_volume {
VOLUME=`get_volume`
volume_is_muted
MUTE=$?
if [[ $VOLUME -eq 0 ]] || [[ $MUTE -eq 1 ]]
then
VOLUME=0
ICON=$ICON_VOLUME_MUTED
elif [[ $VOLUME -le 30 ]]
then
ICON=$ICON_VOLUME_LOW
elif [[ $VOLUME -le 60 ]]
then
ICON=$ICON_VOLUME_MEDIUM
else
ICON=$ICON_VOLUME_HIGH
fi
if [[ $VOLUME -eq 0 ]] || [[ $MUTE -eq 1 ]]
then
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 dunstify -h string:x-dunst-stack-tag:volume -i $ICON ""
else
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 dunstify -h string:x-dunst-stack-tag:volume -h int:value:$VOLUME -i $ICON ""
fi
}
function notify_brightness {
BRIGHTNESS=`light -G | cut -d'.' -f1`
if [[ $BRIGHTNESS -eq 0 ]]
then
ICON=$ICON_BRIGHTNESS_OFF
elif [[ $BRIGHTNESS -le 30 ]]
then
ICON=$ICON_BRIGHTNESS_LOW
elif [[ $BRIGHTNESS -le 60 ]]
then
ICON=$ICON_BRIGHTNESS_MEDIUM
elif [[ $BRIGHTNESS -lt 100 ]]
then
ICON=$ICON_BRIGHTNESS_HIGH
else
ICON=$ICON_BRIGHTNESS_FULL
fi
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 dunstify -h string:x-dunst-stack-tag:display_brightness -h int:value:$BRIGHTNESS -i $ICON ""
}
case "$1" in
button/mute)
volume_mute_toggle
notify_volume
logger 'Mute'
;;
button/volumedown)
volume_down
notify_volume
logger 'Volume Down'
;;
button/volumeup)
volume_up
notify_volume
logger 'Volume Up'
;;
cd/prev)
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 playerctl --player spotify previous
logger 'Previous track'
;;
cd/play)
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 playerctl --player spotify play-pause
logger 'Play/pause track'
;;
cd/next)
sudo -u lucas XDG_RUNTIME_DIR=/run/user/1000 playerctl --player spotify next
logger 'Next track'
;;
video/brightnessdown)
case "$2" in
BRTDN)
brightness_down
notify_brightness
logger 'Brightness down'
;;
esac
;;
video/brightnessup)
case "$2" in
BRTUP)
brightness_up
notify_brightness
logger 'Brightness up'
;;
esac
;;
button/power)
case "$2" in
PBTN|PWRF)
logger 'PowerButton pressed'
;;
*)
logger "ACPI action undefined: $2"
;;
esac
;;
button/sleep)
case "$2" in
SLPB|SBTN)
logger 'SleepButton pressed'
;;
*)
logger "ACPI action undefined: $2"
;;
esac
;;
ac_adapter)
case "$2" in
AC|ACAD|ADP0)
case "$4" in
00000000)
logger 'AC unpluged'
;;
00000001)
logger 'AC pluged'
;;
esac
;;
*)
logger "ACPI action undefined: $2"
;;
esac
;;
battery)
case "$2" in
BAT0)
case "$4" in
00000000)
logger 'Battery online'
;;
00000001)
logger 'Battery offline'
;;
esac
;;
CPU0)
;;
*) logger "ACPI action undefined: $2" ;;
esac
;;
button/lid)
case "$3" in
close)
logger 'LID closed'
;;
open)
logger 'LID opened'
;;
*)
logger "ACPI action undefined: $3"
;;
esac
;;
*)
logger "ACPI group/action undefined: $1 / $2"
;;
esac
# vim:set ts=4 sw=4 ft=sh et:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment