You are not logged in.
Hi,
I am trying to adapt a script that changes volume and notifies with dunstify.
The goal is to have a function that gets the sink name and based on conditions converts it to something shorter, i.e. "alsa_output.pci-0000_06_00.6.analog-stereo" -> "laptop speakers", and then uses this rewritten output in dunstify as the appname parameter.
#!/bin/bash
function get_sink() {
sink=$(pactl get-default-sink)
if [[ $stdout == 'alsa_output.pci-0000_06_00.6.analog-stereo' ]]
then
echo Speakers
fi
}
function send_notification() {
volume=$(pamixer --get-volume)
dunstify -a "$stdout" -u low -r "9993" -h int:value:"$volume" -i "volume-$1" "Volume ${volume}%" -t 2000}Any help appreciated to make this work. 
Thanks!
Last edited by geekmiki (2022-06-24 14:22:45)
Offline
Solved my own problem.
Here's the script if someone ever finds it useful:
!/bin/bash
function get_volume() {
        pamixer --get-volume
}
function get_icon() {
        if [[ "$1" -lt 34 ]]
    then
        echo -n "audio-volume-low-symbolic"
    elif [[ "$1" -lt 67 ]]
    then
        echo -n "audio-volume-medium-symbolic"
    elif [[ "$1" -le 100 ]]
    then
        echo -n "audio-volume-high-symbolic"
    fi
}
function get_sink() {
        if [[ $(pactl get-default-sink) == 'alsa_output.usb-FIIO_FiiO_USB_DAC-E10-01.analog-stereo' ]];
     then
        echo "Headphones"
     elif [[ $(pactl get-default-sink) == 'alsa_output.pci-0000_06_00.6.analog-stereo' ]];
     then echo "Laptop"
     elif [[ $(pactl get-default-sink) == 'alsa_output.pci-0000_01_00.1.hdmi-stereo' ]];
     then echo "Speakers"
     else
        echo "Other sink"
fi
}
function send_notification() {
        volume=`get_volume`
        vol_icon=`get_icon $volume`
        get_sink=`get_sink`
        dunstify -a "Volume" -u low -r "9993" -h int:value:"$volume" -i "$vol_icon" "$get_sink" "$volume%" -t 2000
}
case $1 in
up)
        # Set the volume on (if it was muted)
        pamixer -u
        pamixer -i 5 --allow-boost
        send_notification $1
        ;;
down)
        pamixer -u
        pamixer -d 5 --allow-boost   
 send_notification $1
     ;;
mute)
        pamixer -t
        if $(pamixer --get-mute); then
                dunstify -i volume-mute -a "Volume" -t 2000 -r 9993 -u low "Muted"
        else
                send_notification up
        fi
        ;;
esacLast edited by geekmiki (2022-06-24 11:25:42)
Offline
Please remember to mark your thread [SOLVED] (edit the title of your first post).
Offline
I'm pretty sure the following would do the same thing (I didn't do much to the dunstify commands as I've never used that tool):
#!/bin/sh
case $1 in
	up)   pamixer -u; pamixer -i 5 --allow-boost ;;
	down) pamixer -u; pamixer -d 5 --allow-boost ;;
	mute) pamixer -t ;;
esac
volume=$(pamixer --get-volume)
case $volume in
	0-34)   icon=audio-volume-low-symbolic ;;
	35-67)  icon=audio-volume-medium-symbolic ;;
	68-100) icon=audio-volume-high-symbolic ;;
esac
case $(pactl get-default-sink) in
	'alsa_output.usb-FIIO_FiiO_USB_DAC-E10-01.analog-stereo')  sink=Headphones ;;
	'alsa_output.pci-0000_06_00.6.analog-stereo')              sink=Laptop ;;
	'alsa_output.pci-0000_01_00.1.hdmi-stereo')                sink=Speakers ;;
	*)                                                         sink="Other sink" ;;
esac
if $(pamixer --get-mute); then
	dunstify -i volume-mute -a "Volume" -t 2000 -r 9993 -u low "Muted"
else
	dunstify -a "Volume" -u low -r "9993" -h int:value:$volume -i $icon "$sink" "$volume%" -t 2000
fi"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Thanks @Trilby, much cleaner than mine.
Offline