Created
November 2, 2022 03:52
-
-
Save lucasxavierleite/558b5f550b4365f05bae19a51ff358fe to your computer and use it in GitHub Desktop.
ACPI handler script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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