Ajuste el volumen a través de la línea de comandos para que aparezca la notificación de volumen

14

¿hay alguna manera de ajustar el volumen del sistema a través de la línea de comandos para que la ventana emergente de volumen predeterminada (la que aparece al presionar las teclas multimedia en las computadoras portátiles) todavía se muestre?

Necesito esto para mi control remoto. Se ejecutará utilizando un archivo lircrc e irexec.

Lincoln
fuente

Respuestas:

15

Instale el paquete xdotool e intente emitir

xdotool key XF86AudioLowerVolume

y

xdotool key XF86AudioRaiseVolume
mgunes
fuente
1
Es posible que deba anteponer eso con DISPLAY=:0(u otro si su pantalla es diferente) para que el usuario de lirc pueda enviarlo al lugar correcto. Aunque no podría.
Oli
1
¡Muchas gracias! No necesitaba configurar la variable DISPLAY ...
Lincoln
1
Es posible que deba usar el --clearmodifiersparámetro después de la tecla para usarlo en la configuración de atajos de teclado de Ubuntu.
Pablo Bianchi
@Oli Sí, lo necesitará, por ejemplo, para cambiar el volumen a través de SSH.
wjandrea
@PabloBianchi En mi experiencia, Unity reasigna las teclas muy fácilmente, no es necesario --clearmodifiers, sin embargo, definitivamente lo necesitas para xbindkeys.
wjandrea
3

Puede vincular un acceso directo a este script que he encontrado en los foros de Arch (necesita el paquete 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

Parece funcionar bien en Ubuntu 10.10.

htorque
fuente
1

Control de volumen de sonido

Puede usar amixerpara controlar el volumen del sonido, p. Ej.

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

Puede que necesite configurar la tarjeta de sonido usando, por ejemplo, -c 1para la segunda tarjeta de sonido, vea man amixer.

Reproducir sonido

Los sonidos se pueden reproducir usando un jugador como aplayo paplay, por ejemplo

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

Es posible que desee echar un vistazo a esta pregunta: ¿Dónde encuentro los sonidos del sistema?

Mostrar notificaciones en pantalla

Puede reproducir la notificación en pantalla utilizando la biblioteca XOSD en pantalla XOSD. Se llama al paquete xosd-biny el comando osd_catse usa para mostrar texto, barras de estado, etc. en la pantalla.

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

muestra

ingrese la descripción de la imagen aquí

Vea esta página wiki alemana para opciones y ejemplos y man osd_catpara más.

postre
fuente
0

Instalé xmacro y agregué las siguientes líneas a .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
fuente
0

Esta es una versión mejorada del script htorque publicado .

A mí me funciona el 14.04. Avíseme si funciona en 16.04 o más reciente.

Se requiere libnotify-bininstalado.

#!/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
fuente