Ajustez le volume via la ligne de commande pour que la notification de volume apparaisse

15

existe-t-il un moyen d'ajuster le volume du système via la ligne de commande afin que la fenêtre contextuelle de volume par défaut (celle qui apparaît lorsque vous appuyez sur les touches multimédias des ordinateurs portables) soit toujours affichée.

J'en ai besoin pour ma télécommande. Il sera exécuté en utilisant un fichier lircrc et irexec.

Lincoln
la source

Réponses:

16

Installez le package xdotool et essayez d'émettre

xdotool key XF86AudioLowerVolume

et

xdotool key XF86AudioRaiseVolume
mgunes
la source
1
Vous devrez peut-être ajouter cela avec DISPLAY=:0(ou un autre si votre affichage est différent) pour que l'utilisateur lirc puisse l'envoyer au bon endroit. Peut-être pas.
Oli
1
Merci beaucoup! Je n'avais pas besoin de régler la variable DISPLAY ...
Lincoln
1
Vous devrez peut-être utiliser le --clearmodifiersparamètre après la clé pour l'utiliser dans les paramètres des raccourcis clavier d'Ubuntu.
Pablo Bianchi
@Oli Oui, vous en aurez besoin pour, par exemple, changer le volume via SSH.
wjandrea
@PabloBianchi D'après mon expérience, Unity remappe les clés très facilement, pas besoin --clearmodifiers, mais vous en avez absolument besoin pour xbindkeys.
wjandrea
3

Vous pouvez lier un raccourci vers ce script que j'ai trouvé dans les forums Arch (nécessite le package 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

Semble fonctionner correctement dans Ubuntu 10.10.

htorque
la source
1

Contrôle du volume sonore

Vous pouvez utiliser amixerpour contrôler le volume sonore, par exemple

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

Vous devrez peut-être régler la carte son en utilisant, par exemple, -c 1la deuxième carte son, voir man amixer.

Jouer son

Les sons peuvent être lus en utilisant un lecteur comme aplayou paplay, par exemple

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

Vous voudrez peut-être jeter un œil à cette question: Où puis-je trouver les sons système?

Afficher la notification à l'écran

Vous pouvez reproduire la notification à l'écran à l'aide de la bibliothèque X On-Screen Display XOSD. Le package est appelé xosd-binet la commande osd_catest utilisée pour afficher du texte, des barres d'état, etc. à l'écran.

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

affiche

entrez la description de l'image ici

Voir cette page wiki allemande pour les options et exemples et man osd_catpour plus.

dessert
la source
0

J'ai installé xmacro et ajouté les lignes suivantes à .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
la source
0

Il s'agit d'une version améliorée du script htorque publiée .

Cela fonctionne pour moi le 14.04. Faites-moi savoir si cela fonctionne sur 16.04 ou plus récent.

Il nécessite libnotify-bininstallé.

#!/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
la source