Сегодня я расскажу как сделать подобный индикатор на dunst.
К сожалению dunst из репозитория не поддерживает некоторых необходимых функций, поэтому будем собирать его с исходников.
Для начала установим необходимые зависимости
1 2 |
sudo apt update sudo apt install libxrandr-dev libxss-dev libglib2.0-dev libpango1.0-dev libgtk-3-dev libxdg-basedir-dev |
теперь скачиваем и собираем dunst
1 2 3 4 |
git clone https://github.com/dunst-project/dunst.git cd dunst make sudo make install |
Теперь нам нужно собрать другой компонент dunst который не собирается по дефолту
1 2 3 |
sudo apt install libgnomeui-dev libnotify-dev libglade2-dev make dunstify sudo cp dunstify /usr/local/bin/ |
Теперь нам нужно создать файл конфигурации для dunst для этого копируем файл dunstrc по пути ~/.config/dunst/ и в этом файле отредактировать необходимые параметры по типу набора иконок шрифта цвета и подобного, в самом файле есть хорошее описание каждого параметра.
Осталось создать файл volume.sh по пути /ust/local/bin/ со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#!/bin/bash get_volume() { amixer get Master | grep '%' | head -n 1 | cut -d '[' -f 2 | cut -d '%' -f 1 } is_mute() { amixer get Master | grep '%' | grep -oE '[^ ]+$' | grep off > /dev/null } send_notification() { if is_mute ; then icon_name="audio-volume-muted" bar=" Без звука" else display_volume=`get_volume` # https://en.wikipedia.org/wiki/Box-drawing_character count=21 st=$(($display_volume / 5)) en=$(($count - $st)) if [ $en -ge 21 ]; then en=20 st=0 fi pr1=$(seq -s "█" $st | sed 's/[0-9]//g') pr2=$(seq -s "░" $en | sed 's/[0-9]//g') bar="$pr1$pr2" if [ $display_volume -le 25 ]; then icon_name="audio-volume-low" elif [ $display_volume -le 75 ]; then icon_name="audio-volume-medium" else icon_name="audio-volume-high" fi if [ $display_volume -lt 100 ] ; then parsent="$display_volume%" else parsent="$display_volume" fi fi dunstify -i "$icon_name" -t 1500 -r 2593 -u normal "$bar $parsent" } case $1 in "up") amixer set Master 1%+ send_notification ;; "down") amixer set Master 1%- send_notification ;; "mute") amixer set Master toggle if is_mute ; then send_notification else pnmixer & send_notification fi ;; esac |
Советую вам отредактировать этот файл «под себя» к примеру у меня при муте звука вылетает pnmixer поэтом при включении звука я его запускаю…
Чтобы регулировать звук вызываем соответственно «volume.sh up|down|mute»
Ссылки:
https://wiki.archlinux.org/index.php/Dunst
https://gist.github.com/sebastiencs/5d7227f388d93374cebdf72e783fbd6a
https://github.com/dunst-project/dunst
https://ubuntuforums.org/showthread.php?t=928903