¿Cómo cambio el sonido con amixer?

48

Incluyendo a Natty, siempre pude alternar (silenciar / silenciar) el volumen del sonido 'Maestro' con el

amixer sset Master toggle

comando que vinculé a un enlace de borde en CompizConfig-Manager.

Ahora, después de instalar Oneiric, el comando solo silencia el sonido pero no lo activa. Incluso lo probé en la Terminal, pero tampoco funciona. Cambia ' Mono: Reproducción 68 [78%] [-14.25dB] [apagado] ' a '... [encendido]' pero el sonido permanece silenciado, así que tengo que activarlo mediante el 'indicador de sonido' en el panel.

¿Cómo puedo hacer que esto vuelva a funcionar? ¿Qué cambió desde Natty? ¿Alguien sabe el comando que utiliza el 'indicador de sonido' para alternar el volumen del sonido?

joschi
fuente
Y para hacerlo aún más extraño: en mi otra computadora portátil, donde actualicé de Natty a Oneiric en lugar de una nueva instalación, todavía funciona.
joschi

Respuestas:

51

Esto funciona para mí el 13.04, tanto silenciar como activar silencio:

amixer -D pulse set Master 1+ toggle

Especifica el pulso de audio para garantizar que se active el silencio, se activa el silencio de todo.

David C. Bishop
fuente
Trabajó en lubuntu 13.10. ¡He estado buscando esto por SEMANAS!
luisgonzalez
1
EDITAR: solo funcionaba cuando se ejecutaba como un comando en la terminal. Pero cuando trato de configurar como un enlace de teclas obtengo: No se puede acceder al directorio de inicio: Permiso denegado ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: No se puede conectar: ​​Conexión rechazada amixer: Error de pulso de conexión del mezclador: Conexión rechazada
luisgonzalez
55
Funciona aún mejor sin el 1+parámetro.
J. Katzwinkel
3
Todavía funciona en 17.10 (ingenioso). Estoy usando esto para enlaces de medios i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel
2
¿Cuál es el motivo de 1+?
Gayan Weerakutti
16

Estoy usando este script como solución alternativa:

#!/bin/bash

CURRENT_STATE=`amixer get Master | egrep 'Playback.*?\[o' | egrep -o '\[o.+\]'`

if [[ $CURRENT_STATE == '[on]' ]]; then
    amixer set Master mute
else
    amixer set Master unmute
    amixer set Front unmute
    amixer set Headphone unmute
fi

Hice una diferencia amixer scontentsantes de llamar amixer set Master mutey después de llamar y activar todo el uso de la GUI para descubrir qué era necesario activar.


  1. Con sonido en tipo amixer scontents > ~/before(obtendrá un archivo con el estado de todos los canales de sonido)
  2. Luego alterna el volumen con amixer set Master toggle
  3. Cree un segundo archivo de estado de chanel con amixer scontents > ~/after
  4. amixer set Master toggleVuelva a alternar el sonido con el que se supone que debe volver el volumen al nivel anterior al primer comando de alternar
  5. Crea un tercer archivo con amixer scontents > ~/afterafter

Ahora tiene tres archivos que le indican cuál le indica el estado de los canales de sonido utilizados para el sonido normal, cuáles están silenciados amixer set Master toggley que no se vuelven a activar al volver a activar el sonido con el mismo comando.

Para comparar fácilmente los archivos y ver las diferencias (los canales que se silencian y no se activarán después), puede usarlos melddesde el Centro de software. Comience, abra los tres archivos y en la barra de desplazamiento puede ver dónde hay diferencias entre los archivos. Utilice los nombres de los canales encontrados para agregarlos al script descrito anteriormente.

Jim Hunziker
fuente
Desafortunadamente, el guión solo silencia el sonido pero no lo
activa
Eso es probablemente porque sus cosas que necesitan ser silenciadas no se llaman "Front" y "Headphone" como si estuvieran en mi sistema.
Jim Hunziker
También hice un diff y descubrí lo que faltaba para que el script funcionara en mi computadora, ahora funciona. Muchas gracias.
Joschi
5

No pude escuchar el sonido silenciado para alternar correctamente. Ya sea que use CLI y escriba Amixer sset Master toggle o presione la tecla de alternancia de medios HP pavillion, obtengo el mismo resultado: si el sonido está activado y funcionando, se apagará automáticamente el canal Master y el canal PCM. Luego, cuando presiono el botón nuevamente (cli o tecla) SIEMPRE enciende Master, pero deja el PCM silenciado. Para mi equipo (HP Pavilion DV6 con Xubuntu Oneric), esto significa que el sonido está apagado incluso con el maestro encendido. Cuando se ejecuta desde CLI, los mismos resultados. Si, con cli, alterno PCM, también apaga el canal maestro y nuevamente no lo vuelve a encender, aunque activa PCM correctamente.

El guión que funcionó fue:

#!/bin/bash
    if amixer -c 0 get Master | grep -q off
then
    amixer set Master unmute
    amixer set PCM unmute

else
    amixer set Master mute
fi

Luego utilicé las combinaciones de teclas Xubuntu (configuración> administrador de configuración> teclado> accesos directos a aplicaciones) para buscar el script (lo llamé sndfx.sh y lo configuré como ejecutable haciendo clic derecho en thunar y bajo los permisos marcados hacer ejecutable). Luego le asigné la tecla rápida HP Pavilion tocando esa tecla. Ahora, se alterna correctamente - Impresionante. Espero que esto ayude a alguien más.

Paz

user46082
fuente
2

Si no me equivoco, es un error que hace que otros canales del mezclador se silencian y se silencian. Para silenciar, intente

amixer establece Master 0;

Para activar el sonido

conjunto de mezclador Master 1% +; conjunto de amixer Master 7dB +;

Meme Notyou
fuente
Estos comandos funcionan, pero no me permiten alternar el volumen con un solo comando que puedo combinar con un enlace de borde.
joschi
1
Si alguien está interesado en el informe de error asociado, vea aquí .
Joschi
1

Si desea reemplazar amixer en .lircrc para su control remoto que funciona con lirc, puede intentar seguir las siguientes líneas. Asegúrese de tener instalado xmacro. El control de volumen ahora funciona de nuevo.

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

El truco consiste en hacer que el estado de los altavoces o auriculares siga el estado del canal maestro, dependiendo de si tiene los auriculares enchufados o no. Este script lo hace por mí en mi antigua computadora portátil Dell Latitude:

#!/bin/bash

amixer -q sset Master toggle

MASTER_STATE=`amixer get Master | awk -F"dB] " 'NR == 5 {print $2;}'`
HEADPHONES_PLUGGED=`amixer contents | grep -A 2 Headphone\ Jack | awk -F"=" 'NR == 3 {print $2;}'`

if [[ $HEADPHONES_PLUGGED == 'on' ]]; then
    SLAVE="Headphone"
else
    SLAVE="Speaker+LO"
fi

if [[ $MASTER_STATE == '[on]' ]]; then
    amixer -q sset $SLAVE unmute
else
    amixer -q sset $SLAVE mute
fi

Es posible que deba verificar sus canales con amixer en su computadora y cambiar las definiciones de SLAVE en consecuencia. También la cadena grep "Headphone \ Jack" en la definición HEADPHONES_PLUGGED podría ser otra cosa.

lazo
fuente
-1

Fuerza bruta sin silenciar:

for i in $(amixer |grep -o \'.*\'); do amixer set $i unmute; done
asdf
fuente
2
No creo que desconectar 80 y más dispositivos sea una buena idea. Esto incluye micrófonos, que pueden conducir a bucles de retroalimentación no deseados. haz un for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; doneantes para ver qué se haría.
Usuario desconocido