Come si attiva / disattiva l'audio con l'amixer?


48

Compreso Natty, sono sempre stato in grado di attivare / disattivare l'audio del volume "Master" con

amixer sset Master toggle

comando che ho collegato a un'associazione dei bordi in CompizConfig-Manager.

Ora dopo l'installazione di Oneiric il comando disattiva l'audio ma non lo riattiva. L'ho anche provato nel terminale, ma non funziona. Cambia ' Mono: Riproduzione 68 [78%] [-14.25dB] [off] ' in '... [on]' ma il suono rimane disattivato in modo che io debba riattivare l'audio tramite l '"indicatore sonoro" nella pannello.

Come posso farlo funzionare di nuovo? Cosa è cambiato da Natty? Qualcuno sa il comando utilizzato dall'indicatore del suono per attivare o disattivare il volume del suono?


E per renderlo ancora più strano: sull'altro mio laptop, dove ho eseguito l'aggiornamento da Natty a Oneiric invece di una nuova installazione, funziona ancora.
joschi,

Risposte:


51

Questo funziona per me il 13.04, sia muto che muto:

amixer -D pulse set Master 1+ toggle

Specifica l'audio a impulsi per assicurare l'audio, azzerare tutto.


Ha lavorato su lubuntu 13.10. Lo stavo cercando per le SETTIMANE!
luisgonzalez,

1
EDIT: Funzionava solo quando era in esecuzione come comando nel terminale. Ma quando provo a configurare come key binding ottengo: Home directory non accessibile: autorizzazione negata ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: impossibile connettersi: connessione rifiutata amixer: errore dell'impulso di collegamento del mixer: connessione rifiutata
luisgonzalez

5
Funziona ancora meglio senza il 1+parametro.
J. Katzwinkel,

3
Funziona ancora nel 17.10 (abile). Sto usando questo per i collegamenti multimediali i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel

2
Qual è il motivo per 1+?
Gayan Weerakutti,

16

Sto usando questo script come soluzione 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

Ho fatto una differenza amixer scontentsprima di chiamare amixer set Master mutee dopo averlo chiamato e aver ripristinato l'audio di qualsiasi cosa usando la GUI per capire cosa doveva essere ripristinato.


  1. Con audio attivo amixer scontents > ~/before(otterrai un file con lo stato di tutti i canali audio)
  2. Quindi attivare il volume con amixer set Master toggle
  3. Creare un secondo file di stato di Chanel con amixer scontents > ~/after
  4. Attiva nuovamente il suono con amixer set Master togglecui si suppone che ripristini il volume al livello precedente al primo comando di attivazione / disattivazione
  5. Crea un terzo file con amixer scontents > ~/afterafter

Ora hai tre file che ti dicono che ti dicono lo stato dei canali del suono usati per il suono normale, che sono silenziati amixer set Master togglee che non vengono riattivati ​​riattivando nuovamente l'audio con lo stesso comando.

Per confrontare facilmente i file e vedere le differenze (i canali che vengono disattivati ​​e non si riattivano in seguito) è possibile utilizzare melddal Software Center. Avvialo, apri i tre file e sulla barra di scorrimento puoi vedere dove ci sono differenze tra i file. Utilizzare i nomi di chanel trovati per aggiungerli allo script sopra descritto.


Sfortunatamente la sceneggiatura disattiva l'audio ma non la riattiva
joschi il

Questo probabilmente perché le tue cose che devono essere mute non sono chiamate "Front" e "Cuffie" come se fossero sul mio sistema.
Jim Hunziker,

Ho anche fatto un diff e ho scoperto cosa mancava al funzionamento dello script sul mio computer, ora funziona. Molte grazie.
joschi,

5

Non è stato possibile disattivare l'audio per attivare / disattivare correttamente. Indipendentemente dal fatto che abbia usato la CLI e digitato il selettore Master di Amixer sset o abbia premuto il tasto di attivazione / disattivazione dei supporti HP Pavillion, ottengo lo stesso risultato: se il suono è attivo e funzionante, si spegne automaticamente il canale Master e il canale PCM. Quindi quando premo di nuovo l'interruttore (cli o key) si accende SEMPRE il Master, ma lascia il PCM disattivato. Per il mio rig (HP Pavilion DV6 con Xubuntu Oneric), ciò significa che l'audio è disattivato anche con master acceso. Quando eseguito dalla CLI, gli stessi risultati. Se, con cli, attiva / disattiva PCM, disattiva anche il canale principale e non lo riaccende, anche se attiva / disattiva PCM correttamente.

La sceneggiatura che ha funzionato è stata:

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

Quindi ho usato i tasti di scelta rapida di Xubuntu (impostazioni> gestore impostazioni> tastiera> scorciatoie applicazione) per sfogliare lo script (l'ho chiamato sndfx.sh e lo ho impostato come eseguibile facendo clic con il tasto destro del mouse su Thunar e con le autorizzazioni selezionate rendere eseguibile). Quindi ho assegnato il tasto rapido HP Pavilion toccando quel tasto. Ora commuta correttamente - Fantastico. Spero che questo aiuti qualcun altro.

Pace


2

Se non sbaglio, è un bug che fa silenziare e riattivare gli altri canali del mixer. Per disattivare l'audio, provare

set amixer Master 0;

Per riattivare l'audio, provare

set amixer Master 1% +; set di amixer Master 7dB +;


Questi comandi funzionano, ma non mi consentono di attivare il volume con un singolo comando che posso combinare con un'associazione di bordi.
joschi,

1
Se qualcuno è interessato alla segnalazione di bug associata, consultare qui .
joschi,


1

Se vuoi sostituire amixer in .lircrc per il tuo remotecontrol lavorando con lirc, puoi provare le seguenti linee. Assicurati di aver installato xmacro. Il controllo del volume ora funziona di nuovo.

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

0

Il trucco è fare in modo che lo stato dell'altoparlante o delle cuffie segua lo stato del canale principale a seconda che le cuffie siano collegate o meno. Questo script lo fa per me sul mio antico laptop 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

Potrebbe essere necessario controllare i canali con amixer sul computer e modificare le definizioni SLAVE di conseguenza. Anche la stringa grep "Headphone \ Jack" nella definizione HEADPHONES_PLUGGED potrebbe aver bisogno di essere qualcos'altro.


-1

Forza bruta riattivata:

for i in $(amixer |grep -o \'.*\'); do amixer set $i unmute; done

2
Non credo che riattivare l'audio a 80 e più dispositivi sia una buona idea. Ciò include i microfoni, che possono portare a loop di feedback indesiderati. fare un for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; doneprima, per vedere cosa sarebbe stato fatto.
utente sconosciuto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.