[Script] Dunst : notification du volume avec barre de progression

Autres projets et contributions
Uzo67
Hankyu
Messages : 11
Inscription : sam. 15 févr. 2020, 17:54

[Script] Dunst : notification du volume avec barre de progression

Message par Uzo67 »

Bonjour,

Je partage un script nommé "notification_volume.sh" dont je me sers pour ajuster le volume et afficher une notification avec barre de progression. Je suis sur openbox "pure", et utilise dunst pour les notifications (le script est prévu pour dunst, à ajuster pour les autres gestionnaires de notification).
J'ai commenté le script pour être utilisable et compréhensible par tous ;-)

Code : Tout sélectionner

#!/bin/bash

# Un script pour modifier le volume et faire apparaître une notification avec barre de progression dans dunst

# On appelle ce script de la façon suivante :
# $./notification_volume.sh up
# ou
# $./notification_volume.sh down
# ou
# $./notification_volume.sh mute

# Ce script se fonde sur une version plus simple trouvée ici :
# https://gist.github.com/sebastiencs/5d7227f388d93374cebdf72e783fbd6a
# Il a été modifié pour correspondre mieux à mes attentes (apparence et autres légères moidifications)
# Le choix des différentes icones se fait plus bas


	# Choix du pas (c'est à dire de l'incrémentation en % du volume dans alsa)
	# NB : plus le pas est grand, plus la barre est petite
	# -> avec un pas de 4% (inc=4), il y a 25 crans (100/4)
	# -> avec un pas de 5% (inc=5), il y a 20 crans (100/5) etc.

	inc=5

function get_volume {

    amixer get Master  | grep -m 1 "%]" | cut -d "[" -f2 | cut -d "%" -f1

}


function is_mute {

	amixer get Master | grep "\[off\]"

}

function send_notification {
	volume=$(get_volume)
	let rest=100-$volume

	# APPARENCE	 #
	# Choix actuel : ─ pour volume et · pour le reste
	# Cela donne l'apparence suivante :

	# Volume : 50%
	# ──────────··········

	# Variante possible avec # et - par exemple (modifier les caratères entre " " juste après les "seq -s"

    bar=$(seq -s "─" 0 $inc $volume | sed 's/[0-9]//g')
	rest_bar=$(seq -s "·" 0 $inc $rest | sed 's/[0-9]//g')

	# ICONES #
	# Les icones changent en fonction du volume
	# Mes icones personnelles sont dans ~/Images/Icons/ , chemin à ajuster
	# On peut mettre une icone statique en précisant le chemin avec icon_name="LE_CHEMIN_VERS_L_ICONE" et
	# en commentant les trois "if" qui suivent

icon_name=""

if [ "$volume" = "0" ]; then

        icon_name="~/Images/Icons/audio-volume-muted.svg"

 else

     if [ "$volume" -lt "30" ]; then

         icon_name="~/Images/Icons/audio-volume-low.svg"

     else

         if [ "$volume" -lt "70" ]; then

             icon_name="~/Images/Icons/audio-volume-medium.svg"

         else

             icon_name="~/Images/Icons/audio-volume-high.svg"

         fi

     fi

fi

    # La notification 
   
    dunstify -i  $icon_name  -t 3000 -u normal -r 2593 "Volume : $volume%" "$bar$rest_bar"

}


case $1 in

    up)

 amixer set Master $inc%+ unmute > /dev/null

 send_notification

 ;;

    down)

 amixer set Master $inc%- unmute > /dev/null

 send_notification

 ;;

    mute)

 amixer set Master toggle > /dev/null


 if is_mute ; then
	
	# la notification pour le passage en muet (mute)
	# Je n'ai mis que quelques ···, à ajuster selon l'envie ou à supprimer complètement
	# Attention, ici le chemin vers l'icone "muet" est inscrit directement dans la commande dunstify 

     dunstify -i ~/Images/Icons/audio-volume-muted.svg -t 3000 -r 2593 -u normal "Volume :($(get_volume)%) Muet" "···"

 else

     send_notification

 fi

 ;;

esac
exit

Répondre