Dostosuj głośność za pomocą wiersza polecenia, aby pojawiło się powiadomienie o głośności

15

istnieje sposób na dostosowanie głośności systemu za pomocą wiersza polecenia, tak aby nadal wyświetlało się domyślne okno wyskakujące głośności (to, które pojawia się po naciśnięciu klawiszy multimediów na notebookach).

Potrzebuję tego do mojego pilota. Zostanie uruchomiony przy użyciu pliku lircrc i irexec.

Lincoln
źródło

Odpowiedzi:

16

Zainstaluj pakiet xdotool i spróbuj go wydać

xdotool key XF86AudioLowerVolume

i

xdotool key XF86AudioRaiseVolume
mgunes
źródło
1
Konieczne może być dodanie tego za pomocą DISPLAY=:0(lub innego, jeśli twój ekran jest inny), aby użytkownik lirc mógł wysłać go we właściwe miejsce. Może nie.
Oli
1
Wielkie dzięki! Nie musiałem ustawiać zmiennej DISPLAY ...
Lincoln
1
Może być konieczne użycie --clearmodifiersparametru po klawiszu, aby użyć go w ustawieniach skrótów klawiaturowych Ubuntu.
Pablo Bianchi
@Oli Tak, będzie to potrzebne np. Do zmiany głośności przez SSH.
wjandrea
@PabloBianchi Z mojego doświadczenia wynika, że ​​Unity mapuje klucze bardzo łatwo, bez potrzeby --clearmodifiers, jednak zdecydowanie potrzebujesz go dla xbindkeys.
wjandrea
3

Możesz powiązać skrót do tego skryptu, który znalazłem na forach Arch (potrzebuje pakietu libnotify-bin):

#!/bin/sh

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"
    elif [ "$display_volume" -lt "33" ]; then
        icon_name="notification-audio-volume-low"
    elif [ "$display_volume" -lt "67" ]; then
        icon_name="notification-audio-volume-medium"
    else
        icon_name="notification-audio-volume-high"
    fi
fi
notify-send " " -i $icon_name -h int:value:$display_volume -h string:synchronous:volume

Wygląda na to, że działa dobrze w Ubuntu 10.10.

htorque
źródło
1

Kontroluj głośność dźwięku

Możesz użyć amixerdo sterowania głośnością dźwięku, np

amixer set 'Master' 50%
amixer set 'Master' 10%+
amixer set 'Master' 2dB-

Może być konieczne ustawienie karty dźwiękowej za pomocą np -c 1. Drugiej karty dźwiękowej, patrz man amixer.

Odtwórz dźwięk

Dźwięki można odtwarzać za pomocą odtwarzacza takiego jak aplaylub paplaynp

paplay /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga

Możesz rzucić okiem na to pytanie: Gdzie znajdę dźwięki systemowe?

Wyświetl powiadomienie na ekranie

Możesz odtworzyć powiadomienie na ekranie za pomocą biblioteki X On-Screen Display XOSD. Pakiet jest wywoływany, xosd-bina polecenie osd_catsłuży do wyświetlania tekstu, pasków stanu itp. Na ekranie.

osd_cat -b percentage -P 20 -T Status: -f "-adobe-helvetica-bold-*-*--34-*-*-*-*"

wyświetla

wprowadź opis zdjęcia tutaj

Zobacz tę niemiecką stronę wiki, gdzie znajdziesz opcje i przykłady oraz man osd_catwięcej.

deser
źródło
0

Zainstalowałem xmacro i dodałem następujące linie do .lircrc :

begin
        prog = irexec
        button = KEY_VOLUMEUP
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioRaiseVolume KeyStrRelease XF86AudioRaiseVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_VOLUMEDOWN
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioLowerVolume KeyStrRelease XF86AudioLowerVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_MUTE
        config = echo KeyStrPress XF86AudioMute KeyStrRelease XF86AudioMute | xmacroplay $DISPLAY
end
Jakob
źródło
0

To jest ulepszona wersja opublikowanego skryptu htorque .

Działa dla mnie 14.04. Daj mi znać, jeśli działa 16.04 lub nowszy.

Wymaga libnotify-binzainstalowania.

#!/bin/sh
# Adjust the volume, play a sound, and show a notification.
#
# Replacement for default Ubuntu volume adjustment behaviour.
#
# Based on /ubuntu//a/12769/301745

command=""
device="pulse"
display_volume=0
icon_name="error"
increment=5
mixer="Master"
usage="usage: $0 [-d device] [-i increment] [-m mixer] (up|down|mute)"

# For compatibility with SSH sessions.
export DISPLAY=:0

_amixer(){
    # amixer alias
    local set_get="$1"
    shift
    amixer -D "$device" "$set_get" "$mixer" "$@"
}

_get_display_volume(){
    # grep alias
    grep -Pom 1 '(?<=\[)[0-9]+(?=%\])'
}

while getopts d:hi:m: opt; do
    case "$opt" in
        d)
            device="$OPTARG"
            ;;
        h)
            echo "$usage"
            exit 0
            ;;
        i)
            increment="$OPTARG"
            ;;
        m)
            mixer="$OPTARG"
            ;;
        ?)
            echo "$usage"
            exit 1
            ;;
    esac
done

shift "$(($OPTIND - 1))"
command="$1"

case "$command" in
    down)
        display_volume="$(
            _amixer set "$increment%-" unmute |
                _get_display_volume
            )"
        ;;
    mute)
        if _amixer get | grep -q "\[on\]"; then
            display_volume=0
            icon_name="notification-audio-volume-muted"
            _amixer set mute > /dev/null
        else
            display_volume="$(
                _amixer set unmute |
                    _get_display_volume
                )"
        fi
        ;;
    up)
        display_volume="$(
            _amixer set "$increment%+" unmute |
                _get_display_volume
            )"
        ;;
    *)
        echo "$usage"
        exit 1
        ;;
esac

if [ "$icon_name" = "error" ]; then
    if [ "$display_volume" = "0" ]; then
        icon_name="notification-audio-volume-off"
    elif [ "$display_volume" -lt "33" ]; then
        icon_name="notification-audio-volume-low"
    elif [ "$display_volume" -lt "67" ]; then
        icon_name="notification-audio-volume-medium"
    else
        icon_name="notification-audio-volume-high"
    fi

    # In a subshell in the background to minimize latency.
    ( canberra-gtk-play --id=audio-volume-change & )
fi

notify-send "Volume: $display_volume%" -i "$icon_name" -h "string:synchronous:volume" -h "int:value:$display_volume"
wjandrea
źródło