OSD индикатор уровня громкости

openbox,lxde
уровень громкости меняется медиакнопками через amixer

какие программы существуют для отображения уровня громкости в стиле OSD ?
volti Там в настройках есть галка показывать всплывающие уведомления.
volti это полный волум контрол, меня же интересует только индикация
к тому-же он много ресурсов потребляет.. питон же
Можно использовать xfce4-volumed плюс какой нибудь osd
Или использовать скрипты плюс osd, например скрипт на клавишу звук +
    #!/bin/bash
    #прибавляем громкость     
     amixer -q set Master 10+ unmute
    #прибиваем предыдущее OSD, измените на свое
     killall /usr/lib/notify-osd-customizable/notify-osd
    #Далее идет скрипт индикации состояния звука, взятый где то на просторах сети
    #DESKTOP=:0 # need for notifications run 'over' display
    mixer_state=$(amixer get Master | awk '$1=="Mono:" {print $6}')
    x=$(amixer get Master | sed -rn "/[^[]+\[/{s///;s/%.+//p;q}")
    z=$[x/10];  y='◼◼◼◼◼◼◼◼◼◼'
    zz=$[10-z];yy='◻◻◻◻◻◻◻◻◻◻'
     
    # get current screen resoultion
    curres=$(xdpyinfo | grep dimensions | awk '{print $2}')
    # calculate current max x
    curmx=$(echo $curres | sed 's/x.*$//')
    # calculate current max y
    curmy=$(echo $curres | sed 's/^.*x//')
     
    poffset=0
     
    notify_title="Volume"
     
    case $x in
        0*|?|1?)  notify_icon="notification-audio-volume-off";;
        2?|3?|4?)  notify_icon="notification-audio-volume-low";;
        5?|6?|7?)  notify_icon="notification-audio-volume-medium";;
        8?|9?|100)  notify_icon="notification-audio-volume-high";;
    esac
     
    if [ $mixer_state == "[off]" ];then
        notify_icon="notification-audio-volume-muted"
        notify_title="$notify_title muted"
    fi
     
    notify-send -i $notify_icon -t 1500 -u low -h int:x:$[$curmx-$poffset] -h \
        int:y:$[$curmy-$poffset] "$notify_title" "${y::z}${yy::zz} $x%"
notify-osd получается, он разве не должен демоном работать?
grayich
notify-osd получается, он разве не должен демоном работать?
работает демоном, но если не прибить то новое окно появляется только когда отработает предыдущее. Как изменять вывод в открытом уведомлении notify я к сожалению не знаю
Я пользуюсь таким вот скриптом, стыренным где-то на просторах сети, для amixer и notify-osd:

#!/bin/sh
# created by abarilla
usage="usage: $0 -c {up|down|mute} [-i increment] [-m mixer]"
command=
increment=5%
mixer=Master
while getopts i:m:h o
do case "$o" in
    i) increment=$OPTARG;;
    m) mixer=$OPTARG;;
    h) echo "$usage"; exit 0;;
    ?) echo "$usage"; exit 0;;
esac
done
shift $(($OPTIND - 1))
command=$1
if [ "$command" = "" ]; then
    echo "usage: $0 {up|down|mute} [increment]"
    exit 0;
fi
display_volume=0
if [ "$command" = "up" ]; then
    display_volume=$(amixer set $mixer $increment+ unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
fi
if [ "$command" = "down" ]; then
    display_volume=$(amixer set $mixer $increment- unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
fi
icon_name=""
if [ "$command" = "mute" ]; then
    if amixer get Master | grep "\[on\]"; then
        display_volume=0
        icon_name="notification-audio-volume-muted"
        amixer set $mixer mute
    else
        display_volume=$(amixer set $mixer unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
    fi
fi
if [ "$icon_name" = "" ]; then
    if [ "$display_volume" = "0" ]; then
        icon_name="notification-audio-volume-off"
    else
        if [ "$display_volume" -lt "33" ]; then
            icon_name="notification-audio-volume-low"
        else
            if [ "$display_volume" -lt "67" ]; then
                icon_name="notification-audio-volume-medium"
            else
                icon_name="notification-audio-volume-high"
            fi
        fi
    fi
fi
notify-send " " -i $icon_name -h int:value:$display_volume -h string:synchronous:volume 

И в опенбоксовом rc.xml вызывается вот так:

    <keybind key="XF86AudioLowerVolume">
      <action name="Execute">
        <execute>sh /home/Колючка/scripts/vol.sh down</execute>
      </action>
    </keybind>
    <keybind key="XF86AudioRaiseVolume">
      <action name="Execute">
        <execute>sh /home/Колючка/scripts/vol.sh up</execute>
      </action>
    </keybind>
    <keybind key="XF86AudioMute">
      <action name="Execute">
        <execute>sh /home/Колючка/scripts/vol.sh mute</execute>
      </action>
    </keybind>

Выглядит как-то так:
Ещё есть патченый notify-osd, там окна параллельно отображаются
Колючка
Я пользуюсь таким вот скриптом

О то что надо, спасибо.
хотелось бы обойтись без демона, но похоже не выйдет.. придётся ставить notify-osd

себе я тут накалякал скрипт, посмотрев некоторые скрипты в инете, вывод через утилиту aosd_cat
#!/bin/bash
retype ()
{
	CNT=$1
	S=$2
	until [ "$CNT" -eq 0 ]
 	do
 		let "CNT=$CNT-1"
 		OSD="${OSD}${S}"
 	done
}      
case $1 in
up)		PLAYBACK=$(amixer sset Master 1%+ | grep Left: | awk '{print $4}') ;;
down)	PLAYBACK=$(amixer sset Master 1%- | grep Left: | awk '{print $4}') ;;
*) 		echo "Usage: $0 { volup | voldown}"  ;;
esac
LIMIT=31
let "SPACE=$LIMIT-$PLAYBACK"
OSD="["
#■♪♫
retype $PLAYBACK "■"
retype $SPACE " "
OSD="${OSD}]"
killall aosd_cat > /dev/null 2>&1
echo "$OSD" |  aosd_cat -p 7 -y -180 -x -50 -e 15 -n "Monospace Bold 24" -R green -S black -f 0 /dev/null 2>&1& 
exit 0
выглядит так:

цикл наверно можно заменить на форматированный вывод printf или awk, но не знаю как.
у скрипта есть 1 приличный недостаток, если зажать кнопку, то срипты-процессы плодятся как блохи и не успевают киляться, может кто подскажет как это победить?

впрочем даже через notify-osd при зажатии клавиши тормозит :/
 
Зарегистрироваться или войдите чтобы оставить сообщение.