Comment activer / désactiver le son avec amixer?

48

Y compris Natty, je pouvais toujours basculer (mute / muet) le volume sonore «maître» avec le

amixer sset Master toggle

commande que j'ai liée à une liaison de bord dans CompizConfig-Manager.

Maintenant, après l’installation de Oneiric, la commande coupe uniquement le son, mais ne le rétablit pas. Je l'ai même essayé dans le terminal mais cela ne fonctionne pas non plus. Cela change ' Mono: Playback 68 [78%] [-14.25dB] [off] ' en '... [on]' mais le son reste en sourdine de sorte que je dois le réactiver via l'indicateur de son situé dans le panneau.

Comment puis-je obtenir que cela fonctionne à nouveau? Qu'est-ce qui a changé depuis Natty? Est-ce que quelqu'un connaît la commande utilisée par 'l'indicateur de son' pour changer le volume du son?

Joschi
la source
Et pour rendre cela encore plus étrange: sur mon autre ordinateur portable, où je suis passé de Natty à Oneiric au lieu d’une nouvelle installation, cela fonctionne toujours.
joschi

Réponses:

52

Cela fonctionne pour moi le 13.04, muet et non muet:

amixer -D pulse set Master 1+ toggle

Il spécifie l'audio à impulsion pour assurer la suppression du son, tout réactiver.

David C. Bishop
la source
Travaillé sur lubuntu 13.10. Je cherchais cela depuis des semaines!
luisgonzalez
1
EDIT: Cela ne fonctionnait que s’il s’agissait d’une commande dans le terminal. Mais lorsque j'essaie de configurer en tant que liaison de clé, je reçois: Répertoire de base inaccessible: autorisation refusée ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: connexion impossible: connexion refusée: mélangeur: erreur liée à l'impulsion de connexion: connexion refusée
luisgonzalez
5
Cela fonctionne encore mieux sans 1+paramètre.
J. Katzwinkel
3
Fonctionne toujours en 17h10 (artistique). J'utilise ceci pour les reliures multimédias i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel
2
Quelle est la raison pour 1+?
Gayan Weerakutti
16

J'utilise ce script comme solution de contournement:

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

J'ai fait un diff amixer scontentsavant d'appeler amixer set Master muteet après l'avoir appelé et avoir tout réactivé en utilisant l'interface graphique pour déterminer ce qui devait être désactivé.


  1. Avec son sur type amixer scontents > ~/before(vous obtiendrez un fichier avec le statut de tous les canaux sonores)
  2. Puis basculer le volume avec amixer set Master toggle
  3. Créez un deuxième fichier d’état de canal avec amixer scontents > ~/after
  4. Basculer à nouveau le son avec amixer set Master togglelequel est supposé ramener le volume au niveau qui précédait la première commande de basculement
  5. Créez un troisième fichier avec amixer scontents > ~/afterafter

Maintenant, vous avez trois fichiers qui vous indiquent l’état des canaux utilisés pour le son normal, qui sont coupés par amixer set Master toggleet qui ne sont pas réactivés en réactivant à nouveau avec la même commande.

Pour comparer facilement les fichiers et voir les différences (les canaux qui sont coupés et qui ne seront pas réactivés par la suite), vous pouvez utiliser meldle Centre de logiciel. Démarrez-le, ouvrez les trois fichiers et sur la barre de défilement, vous pouvez voir s’il existe des différences entre les fichiers. Utilisez les noms de canaux trouvés pour les ajouter au script décrit ci-dessus.

Jim Hunziker
la source
Malheureusement, le script ne fait que mettre le son en sourdine, mais ne le met pas en
sourdine
C'est probablement parce que vos éléments devant être désactivés ne s'appellent pas "Avant" et "Casque" comme ils le sont sur mon système.
Jim Hunziker
J'ai également fait un diff et découvert ce qui manquait pour que le script fonctionne sur mon ordinateur, maintenant cela fonctionne. Merci beaucoup.
Joschi
5

Je n'arrivais pas à assourdir correctement les sons. Que j'utilise CLI et que je tape Amixer sset Master ou que j'appuie sur la touche de basculement des supports du pavillon HP, j'obtiens le même résultat: si le son est activé et fonctionne, il désactivera automatiquement le canal principal ET le canal PCM. Puis, lorsque je frappe à nouveau sur la bascule (cli ou touche), il active TOUJOURS le maître mais laisse PCM en sourdine. Pour mon appareil (HP Pavilion DV6 exécutant Xubuntu Oneric), cela signifie que le son est désactivé même lorsque le maître est activé. Lorsqu'il est exécuté à partir de la CLI - mêmes résultats. Si, avec cli, je bascule PCM, il désactive également le canal principal et ne le rallume plus, même s’il bascule correctement sur PCM.

Le script qui a fonctionné était:

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

Ensuite, j'ai utilisé les raccourcis clavier Xubuntu (Paramètres> Gestionnaire de paramètres> Clavier> Raccourcis d'application) pour accéder au script (je l'ai appelé sndfx.sh et je l'ai défini sur exécutable en effectuant un clic droit dans thunar et sous les autorisations cochées pour l'exécuter). Ensuite, je lui ai attribué la touche rapide Pavillon HP en appuyant sur cette touche. Maintenant, il bascule correctement - Génial. J'espère que ceci aide quelqu'un d'autre.

Paix

utilisateur46082
la source
2

Si je ne me trompe pas, c'est un bogue qui provoque la mise en sourdine et l'activation d'autres canaux de mixage. Pour couper le son, essayez

amixer set Master 0;

Pour réactiver le son

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

Meme Notyou
la source
Ces commandes fonctionnent, mais elles ne me permettent pas de basculer le volume avec une seule commande que je peux combiner avec une liaison de bord.
Joschi
1
Si quelqu'un est intéressé par le rapport de bogue associé, voir ici .
Joschi
1

Si vous souhaitez remplacer amixer dans .lircrc pour votre commande à distance utilisant lirc, vous pouvez essayer les lignes suivantes. Assurez-vous d'avoir installé xmacro. Le contrôle du volume fonctionne à nouveau.

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

L'astuce consiste à faire en sorte que l'état du haut-parleur ou du casque suive celui du canal principal, selon que le casque est branché ou non. Ce script le fait pour moi sur mon ancien ordinateur portable 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

Vous devrez peut-être vérifier vos chaînes avec amixer sur votre ordinateur et modifier les définitions de SLAVE en conséquence. De même, la chaîne grep "Headphone \ Jack" dans la définition HEADPHONES_PLUGGED peut être différente.

boucle
la source
-1

Force brute non-muette:

for i in $(amixer |grep -o \'.*\'); do amixer set $i unmute; done
asdf
la source
2
Je ne pense pas que désactiver 80 ou plus de périphériques soit une bonne idée. Cela inclut les microphones, ce qui peut entraîner des boucles de rétroaction indésirables. faire un for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; doneavant, pour voir ce qui serait fait.
Utilisateur inconnu