¿Cómo puedo hacer que el volumen cambie en incrementos más pequeños?

53

Cuando presiono las teclas de subir / bajar volumen en mi teclado, el volumen cambia demasiado. ¿Cómo puedo reducir el tamaño del paso para tener un control más preciso?

ændrük
fuente

Respuestas:

12

11.10 / 12.04

A partir de este informe de error , parece que la clave de paso de volumen desapareció en 11.10 y no ha vuelto a aparecer (todavía).

Por lo tanto, no hay un simple cambio de configuración directo que pueda hacer para reducir el paso de volumen.

La publicación n.º 18 en el enlace ofrece una solución interesante que implica el uso de alsamixerla capacidad de incremento y disminución junto con el envío de notificaciones al escritorio.

Sin embargo, no pude hacerlo funcionar, por lo que mi opinión sobre la solución se basa en esa publicación.

Con esta solución, el paso de volumen predeterminado se reducirá a pasos de dos por ciento.


Cómo

Instale el xbindkeyspaquete (usando Synaptic o con sudo apt-get install xbindkeys).

Usando su editor de texto favorito, cree un archivo en su carpeta de inicio llamado .volumeHack.shy copie y pegue el contenido a continuación en ese archivo, es decir

gedit ~/.volumeHack.sh

Ejecutar chmod a+x .volumeHack.shpara hacerlo ejecutable.

Luego edite el archivo ~/.xbindkeysrcy copie y pegue el texto a continuación en la parte inferior de este archivo. es decir

gedit ~/.xbindkeysrc

Cerrar sesión e iniciar sesión

.xbindkeysrc

# Increase volume
#"amixer set Master playback 1+"
"sh ~/.volumeHack.sh -c up -i 2% -m Master"
    m:0x0 + c:123
    XF86AudioRaiseVolume

# Decrease volume
"sh ~/.volumeHack.sh -c down -i 2% -m Master"
    m:0x0 + c:122
    XF86AudioLowerVolume

# Toggle mute - this is not used here
#"amixer set Master toggle"
# m:0x0 + c:121
# XF86AudioMute

.volumeHack.sh

#!/bin/sh

usage="usage: $0 -c {up|down|mute} [-i increment] [-m mixer]"
command=
increment=5%
mixer=Master

while getopts c:i:m:h o
do case "$o" in
    c) command=$OPTARG;;
    i) increment=$OPTARG;;
    m) mixer=$OPTARG;;
    h) echo "$usage"; exit 0;;
    ?) echo "$usage"; exit 0;;
esac
done

#echo "command:$command"
#echo "increment:$increment"
#echo "mixer:$mixer"

if [ "$command" = "" ]; then
    shift $(($OPTIND - 1))
    command=$1
    exit 0;
fi

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

#echo "icon: $icon_name and $display_volume"
fossfreedom
fuente
la respuesta de delty funcionó para mí una vez que desactivé los atajos de teclado de gnome para subir / bajar el volumen. Esta advertencia de xbindkeys fue la pista que necesitaba: *** Advertencia *** Por favor verifique que no haya otro programa ejecutándose que capture una de las claves capturadas por xbindkeys. Parece que hay un conflicto y xbindkeys no puede tomar todas las claves definidas en su archivo de configuración.
1
Para el registro, el culpable es la falta de voluntad de los desarrolladores de Gnome para proporcionar una solución pragmática: bugzilla.gnome.org/show_bug.cgi?id=650371
Jakub Kotowski
17

Ubuntu 14.04 / 15.04 / 15.10 / 16.04 / 16.10 / 17.04

Finalmente tengo una solución adecuada para los usuarios de Trusty, Vivid, Wily, Xenial, Yakkety y Zesty. En lugar de usar un montón de hacks o un script, decidí solucionar el problema en el código fuente. Apliqué este parche a gnome-settings-daemonInstalar gnome-settings-daemon y unity-settings-daemonInstalar unity-settings-daemon (se hicieron algunas modificaciones triviales al parche).

He subido los paquetes a un PPA:

ppa: george-edison55 / gnome-settings-daemonLogotipo de Launchpad ( Haga clic aquí para obtener instrucciones sobre el uso de PPA ) .

Una vez que haya agregado el PPA, ejecute:

sudo apt-get update
sudo apt-get upgrade

Deberá reiniciar después de que se complete la instalación. Una vez que se hayan actualizado los paquetes, puede usar el dconfcomandoIcono de página de manual para cambiar el incremento de volumen:

dconf write /org/gnome/settings-daemon/plugins/sound/volume-step 2

(El valor predeterminado es 6.)

Ahora, cuando presiona las teclas de volumen, el volumen cambiará en incrementos de 2:

ingrese la descripción de la imagen aquí

Nathan Osman
fuente
3
¿Este ppa se mantendrá actualizado con el gnome upstream / unity-settings-daemon en el futuro?
starbeamrainbowlabs
1
@starbeamrainbowlabs sí, espero estar al tanto de eso.
Nathan Osman
1
¡Gracias! Solo quería comprobarlo. Cambiaré a usar tu ppa hasta que se fusione con la ppa principal (suponiendo que eso suceda).
starbeamrainbowlabs
1
@NathanOsman, ¿hay alguna posibilidad de que también puedas parchear y empaquetar mate-settings-daemon? Estaría eternamente agradecido :-)
Alex Grin
3
Buenas noticias de @AlexGrin: MATE ya es compatible con este producto listo para usar. Solo necesita usar un comando diferente para cambiar el valor de incremento: dconf write /org/mate/settings-daemon/plugins/media-keys/volume-step <NUM>dónde <NUM>está el nuevo valor. Acabo de probar esto en MATE 16.04.
Nathan Osman
11

10.04 / 10.10 / 11.04

Acabo de descubrir que gconf-editortiene una configuración para "Paso de volumen como porcentaje del volumen":

/apps/gnome_settings_daemon/volume_step

Mucho más elegante, y funciona con las notificaciones de volumen OSD.

ændrük
fuente
10

Esta solución fácil funciona para (al menos) 12.04 y no requiere CCSM.

No tendrá acción de barra de volumen en pantalla cuando use los atajos de teclado, pero tendrá el control de volumen preciso que desee.

  1. Configuración del sistema> Teclado> pestaña "Accesos directos"> categoría "Sonido y medios"

  2. Deshabilite los accesos directos existentes "Bajar volumen" y "Subir volumen". Para hacer esto, haga clic en cada uno para seleccionarlo y luego presione Retroceso para borrar cualquier combinación de teclas asociada.

  3. Ahora seleccione la categoría "Accesos directos personalizados" y haga clic en el icono "+" para crear dos nuevos accesos directos de la siguiente manera:

    Nombre: 
    Comando Subir volumen : amixer set Master 3% +
    Nombre: 
    Comando para bajar el volumen : amixer set Master 3% -

    (Experimente con los porcentajes. Si necesita ir extremadamente bien, omita el signo de% y usará una escala de 0-255 en lugar de porcentaje).

  4. Ahora asigne cada uno de sus nuevos atajos a una combinación de teclas o teclas: seleccione un acceso directo y escriba la tecla o teclas deseadas en su teclado.

Después de esto, cuando use los controles de volumen del teclado, debería tener los incrementos de volumen que especificó. Siempre puede volver al comportamiento original deshabilitando sus accesos directos personalizados y volviendo a habilitar los prefabricados en la categoría "Sonido y medios".

cdaddr
fuente
Esto funcionó desde la línea de comandos y desde mis asignaciones de teclas ayer, pero después de un reinicio, no tuvo efecto en la línea de comandos o la asignación de teclas.
GlenPeterson
8

Vale la pena señalar que en Ubuntu 17.10, ya existe (aunque algo enrevesado) tipo de apoyo a esta. Presione Shift+ XF86AudioRaiseVolume(o XF86AudioLowerVolume) para cambiar el volumen con un tamaño de paso más pequeño.

ingrese la descripción de la imagen aquí

Nonny Moose
fuente
Esto fue genial en GNOME y realmente lo extraño en Cinnamon. :( (Tuve que cambiar porque GNOME estaba perdiendo memoria como una locura para mí, gnome-shell usaba hasta 6 GiB RAM como máximo.)
Según Lundberg el
@PerLundberg Interesante. Realmente no he experimentado los efectos adversos de la pérdida de memoria.
Nonny Moose
¿Con qué frecuencia reinicias? Dejo mi máquina en funcionamiento durante una semana o más, que es cuando el problema realmente se acelera.
Según Lundberg el
@PerLundberg jajaja una vez por noche. Tiene sentido ahora XD
Nonny Moose
1
Ajá ya veo. Ejecuto Linux en el trabajo, por lo que normalmente nunca apago la máquina, excepto cuando es necesario. Ponlo a dormir por la noche, restaura a la mañana siguiente.
Según Lundberg el
5

Puede hacer esto con CompizConfig Settings Manager. Use el comando sudo apt-get install compizconfig-settings-manager si aún no lo ha instalado.

Ahora abra el Administrador de configuración de CompizConfig y vaya a Comandos en la sección General . Marque la casilla de verificación Habilitar comandos a la derecha. En la pestaña Comandos , ingrese los siguientes dos comandos por separado como dos comandos:

amixer set Master 5%+ -q

amixer set Master 5%- -q

Asigne dos atajos de teclado para los comandos en la pestaña Vinculaciones de teclas . Yo uso la combinación Super + [y Super +]. Ahora cierre el Administrador de configuración de CompizConfig y esto debería funcionar.

Sin embargo, no estoy seguro de si puede asignar los comandos a los controladores de volumen integrados de la computadora.

thameera
fuente
1
¿Amixer necesita Compiz?
Takkat
También puede hacerlo utilizando los métodos abreviados de teclado en Preferencias. De todos modos, el administrador de Compiz ofrece más opciones, incluida la asignación de eventos de clic, etc.
thameera
2
El amixercomando es maravilloso, pero no es necesario que le indique a los lectores que instalen CompizConfig Settings Manager.
ændrük
2
Al principio esto funcionó para mí, pero el buen resultado no fue estable. Sin ninguna razón obvia, mi sistema 12.04 volvió a su comportamiento original con incrementos de volumen demasiado grandes, a pesar de que mis nuevas configuraciones todavía estaban configuradas y habilitadas en CCSM. También intenté eliminarlos y volver a crearlos en vano. Encontré otra forma amigable de 12.04 para hacer esto y la publicaré como otra respuesta.
cdaddr
3

12.04 (y posiblemente 11.10)

Si desea controlar el volumen de pulseaudio directamente en lugar de seguir la ruta ALSA, puede usar el siguiente script. Si bien también debería ser posible controlar el volumen a través de DBUS como se detalla en esta respuesta de Stackoverflow , sin embargo, no pude encontrar una manera de hacer que esto funcione en Ubuntu 12.04.

Como se dice en el script en sí, utiliza esta respuesta de Stackoverflow sobre cómo cambiar el volumen mediante programación en Ubuntu y expande la idea en un script que toma el cambio de volumen como un argumento de línea de comando y también muestra una notificación OSD. He intentado modelarlo lo más cerca posible del comportamiento predeterminado de Ubuntu (12.04).

El script toma los cambios de volumen como un número absoluto o relativo o un valor porcentual. Entonces, por ejemplo:

  • pavol.sh 2000 establece el volumen en 2000,
  • pavol.sh 30% establece el volumen al 30 por ciento,
  • pavol.sh +1000 aumenta el volumen en 1000 y
  • pavol.sh -5% disminuye el volumen en un 5 por ciento.

También es bastante liberalmente comentado con la esperanza de que sea útil para más ajustes.

Cómo

Use su editor de texto favorito para crear un archivo en su carpeta de inicio (o en cualquier otro lugar, solo recuerde la ruta) a la que llamó pavol.shy copie y pegue el contenido a continuación en ese archivo, es decir

gedit ~/pavol.sh

Ejecutar chmod a+x ~/pavol.shpara hacerlo ejecutable.

Luego abra Sytem Settings, vaya a la Keyboardconfiguración y cambie a la Shortcutspestaña. Haga clic en Custom Shortcutsy cree dos nuevos atajos de teclado con el botón más.

Asigne un nombre a cada uno y, como comando, ingrese algo como esto: /home/username/pavol.sh "+3%"es importante ingresar la ruta completa al pavol.shscript (a menos que el script se encuentre en una carpeta incluida en la variable de entorno PATH). También use signos de comillas ""alrededor del valor del volumen o el atajo de teclado no funcionará.

Después de eso, haga clic en el lado derecho de cada entrada para configurar una combinación de teclas o una tecla multimedia. Si la combinación o tecla deseada ya está asignada a otro acceso directo, el programa le preguntará si desea reasignarla.

pavol.sh

#!/bin/bash --

## This script expands upon this answer on stackoverflow:
## https://stackoverflow.com/a/10739764
##



## GLOBAL VARIABLES

# restrict usable commands
PATH="/bin:/usr/bin"

# this script changes the volume of the default sink (as set, for instance, via the Ubuntu sound menu);
# use "pactl info" to display these settings neatly in a terminal
DEFAULT_SINK=$(pacmd dump | grep 'set-default-sink' | cut -d ' ' -f 2)

# get max. volume from the DEFAULT_SINK
MAX_VOL=$(pacmd list-sinks | grep -A 20 "name: <${DEFAULT_SINK}>" | grep "volume steps:" | tr -d '[:space:]' | cut -d ':' -f 2)

# show debug messages?
# 0 means no debug messages; 1 prints the current volume to the console at the end of the script; 2 switches on bash debugging via "set -x"
DEBUG=0



## FUNCTIONS

# generate trace output if DEBUG is 2 or higher
if [ ${DEBUG} -gt 1 ]; then set -x; fi

# use poor man's return buffer via this variable (This is not stackable!)
RETVAL=""


# print simple usage text to console
show_usage() {
    echo "Usage: $(basename ${0}) [+|-][number|percentage]"
}


# return (via RETVAL) the current pulseaudio volume as hexadecimal value
get_cur_vol() {
    RETVAL=$(pacmd dump | grep "set-sink-volume ${DEFAULT_SINK}" | cut -d ' ' -f 3)
}


# change the pulseaudio volume as set in the first parameter variable, i.e. ${1};
# this can either be an absolute percentage or normal value, for instance 20% or 2000,
# or a relative percentage or normal value, for instance +3% or -5% or +200 or -1000
change_vol() {
    step=${1}

    relative=${step:0:1} # extract first character
    percent=${step: -1}  # extract last character

    # cut off first character for easier calculations, if it is either a "+" or "-"
    if [ "${relative}" = "+" -o "${relative}" = "-" ]; then step=${step:1}; fi

    # if the last character of ${step} was, in fact, a percent sign...
    if [ "${percent}" = "%" ]; then
        step=${step:0:-1}        # cut off last character for easier calculations
        step=$[step*MAX_VOL/100] # change percentage into fixed value via MAX_VOL
    fi

    # save current volume in ${old_vol}
    get_cur_vol
    old_vol=$[RETVAL+0] # the dummy calculation turns the hexadecimal number to a decimal one

    # calculate the new volume value ${new_vol} with the operand that was extracted earlier
    if [ "${relative}" = "+" ]; then
        new_vol=$[old_vol+step]
    else
        if [ "${relative}" = "-" ]; then
            new_vol=$[old_vol-step]
        else
            # no operand found, so ${step} must be an absolute value
            new_vol=${step}
        fi
    fi

    # check boundaries - don't go below 0 and above MAX_VOL
    if [ ${new_vol} -lt 0 ]; then new_vol=0; fi
    if [ ${new_vol} -gt ${MAX_VOL} ]; then new_vol=${MAX_VOL}; fi

    # set the new volume
    pactl -- set-sink-volume "${DEFAULT_SINK}" "${new_vol}"

    # mute the sink if the new volume drops to 0 ...
    if [ ${new_vol} -le 0 ]; then
        pactl -- set-sink-mute "${DEFAULT_SINK}" yes
    else
        # ... or unmute the sink if the new volume is greater than the old
        if [ ${new_vol} -gt ${old_vol} ]; then
            pactl -- set-sink-mute "${DEFAULT_SINK}" no
        fi
    fi
}


# show an OSD notification
notify_osd() {
    # get current volume
    get_cur_vol
    cur_vol_percent=$[RETVAL*100/MAX_VOL]

    # get mute state (gives "yes" or "no")
    muted=$(pacmd dump | grep "set-sink-mute ${DEFAULT_SINK}" | cut -d ' ' -f 3)

    # choose suitable icon (modeled after the default Ubuntu 12.04 behavior):
    # muted-icon if volume is muted
    if [ "${muted}" = "yes" ]; then
        icon="notification-audio-volume-muted"
    else
        # icon with loudspeaker and 1 of the 3 circle segments filled if volume is less than 34%
        if [ ${cur_vol_percent} -lt 34 ]; then
            icon="notification-audio-volume-low"
        else
            # icon with loudspeaker and 2 of the 3 circle segments filled if volume is between 34% and 66%
            if [ ${cur_vol_percent} -lt 67 ]; then
                icon="notification-audio-volume-medium"
            else
                # icon with loudspeaker and all 3 of the 3 circle segments filled if volume is higher than 66%
                icon="notification-audio-volume-high"
            fi
        fi
    fi

    # show notification
    notify-send "Volume" -i ${icon} -h int:value:${cur_vol_percent} -h string:synchronous:volume
}


# fake main function, that gets called first and kicks off all the other functions
main() {
    # only change volume if input is a number with either a +/- prefix and/or a % suffix
    if [[ "${1}" =~ ^[+-]?[0-9]+[%]?$ ]]; then
        change_vol ${1}
    else
        show_usage
    fi

    # show volume osd
    notify_osd

    # show the new - now current - volume in hexadecimal, decimal and percentage if DEBUG is greater than 0
    if [ ${DEBUG} -gt 0 ]; then
        get_cur_vol
        echo "${RETVAL} - $[RETVAL+0] - $[RETVAL*100/MAX_VOL]%"
    fi
}



## REAL MAIN

# run the fake main function and pass on all command line arguments; then exit the script
main ${@}
exit 0
Kuro
fuente
esto funciona bien, excepto que acumula notificación OSD de envío cuando se usa gnome-shell. Cada prensa agrega un nuevo OSD y el anterior no desaparece. OSD es agradable, pero no es esencial para mí. Traté de comentar la notificación OSD del programa, pero eso rompió el script para mí.
Kendor
Lo siento @kendor porque no funcionó para ti. Solo lo probé con Unity. ¿Has probado el workaroud del comentario en este informe de error: https://bugzilla.redhat.com/show_bug.cgi?id=693207#c3 ? Simplemente agregue --hint=int:transient:1antes "Volume"en la línea con el comando de notificación de envío (debe ser el número de línea 130). Quizás ayude.
Kuro
2

Kubuntu 17.04

Edite el archivo que main.xmlnormalmente se encuentra en: /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/config/main.xmlcomo root.

Busque la entrada volumeStep:

<entry name="volumeStep" type="Int">
  <default>2</default>
</entry>

y cambie el porcentaje por paso a lo que quiera. Yo uso el 2% como puedes ver.

Como está escrito en Kubuntu 16.04, deberá reiniciar Plasma para que esto surta efecto:

killall plasmashell #to stop it
kstart plasmashell #to restart it
Bas
fuente
0

Kubuntu 16.04

Actualicé desde 14.04, que tenía un nivel de volumen maestro, así como las fuentes de entrada individuales y las fuentes de salida, y un paso de incremento / disminución del 3% (que luego cambió al 5%). Logré mantenerlo en alrededor del 2% y 3% de los pasos simplemente ajustando los niveles de volumen de la fuente de salida para compensar los pasos del volumen maestro.

Entonces, naturalmente, me molesté un poco cuando 16.04 aumentó esto al 6%, y eliminé el control de volumen maestro, en cambio, los botones de volumen controlan ambas fuentes de salida.

La solución anterior para Ubuntu 16.04 no funciona con la interfaz Plasma 5 utilizada en KDE5, por lo que no funcionará para Kubuntu 16.04. Lo intenté y no funciona.

Entonces, hice una comprobación rápida en línea, y el proceso requiere cambiar manualmente un archivo, pero es bastante sencillo.

Edite el archivo que ListItemBase.qmlnormalmente se encuentra en la /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/ui/ListItemBase.qmlraíz.

Hay un par de líneas dentro de las funciones increaseVolumey decreaseVolumeque definen el paso dividiendo el volumen máximo de 15. Se ven como:

var step = slider.maximumValue / 15;

Cuanto mayor es el número, más pequeños son los pasos. Si esto fuera 1, el volumen es 0% o 100%, pero si fuera 100, el volumen subiría en pasos de 1%.

Personalmente, apuntaba al 2%, así que cambié ambas líneas a

var step = slider.maximumValue / 50;

El crédito va a este Reddit: https://www.reddit.com/r/kde/comments/3t1xr0/how_to_change_the_volume_increment_step_size_for/

Sin embargo, deberá reiniciar Plasma para que esto surta efecto:

killall plasmashell #to stop it
kstart plasmashell #to restart it

Esperemos que esto ayude a alguien, o tal vez incluso haga que alguien envíe un cambio en Plasma para hacer que esta configuración sea impulsada ... ambos pueden terminar siendo yo después de otra actualización.

SEoF
fuente