Wie schalte ich den Sound mit amixer um?


48

Einschließlich Natty war ich immer in der Lage, die "Master" - Lautstärke mit der umzuschalten (stumm / stumm)

amixer sset Master toggle

Befehl, den ich mit einer Kantenbindung in CompizConfig-Manager verknüpft habe.

Nach der Installation von Oneiric wird der Sound durch den Befehl nur stummgeschaltet, aber nicht wieder freigegeben. Ich habe es sogar im Terminal ausprobiert, aber es funktioniert auch nicht. Es ändert sich ' Mono: Wiedergabe 68 [78%] [-14.25dB] [aus] ' in '... [ein]', aber der Ton bleibt stumm, so dass ich ihn über die 'Tonanzeige' in der wieder aufheben muss panel.

Wie kann ich das wieder zum Laufen bringen? Was hat sich seit Natty geändert? Kennt jemand den Befehl, den die 'Sound-Anzeige' zum Umschalten der Lautstärke verwendet?


Und um es noch seltsamer zu machen: Auf meinem anderen Laptop, auf dem ich statt einer Neuinstallation von Natty auf Oneiric umgestiegen bin, funktioniert es immer noch.
Josefi

Antworten:


51

Dies funktioniert für mich am 13.04, sowohl stumm als auch nicht stumm:

amixer -D pulse set Master 1+ toggle

Hiermit wird die Impulslautstärke festgelegt, um sicherzustellen, dass die Stummschaltung aufgehoben wird.


Arbeitete am Lubuntu 13.10. Hab das für WOCHEN gesucht!
Luisgonzalez

1
BEARBEITEN: Es funktionierte nur, wenn es als Befehl im Terminal ausgeführt wurde. Aber wenn ich versuche, als eine Schlüsselbindung zu konfigurieren, erhalte ich: Ausgangsverzeichnis nicht zugänglich: Erlaubnis verweigert ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: Kann nicht verbinden: Verbindung verweigert amixer: Mixer Pulsfehler anfügen: Verbindung verweigert
luisgonzalez

5
Es funktioniert sogar noch besser ohne den 1+Parameter.
J. Katzwinkel

3
Funktioniert noch in 17.10 (kunstvoll). Ich verwende dies für i3-Medienbindungen:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel

2
Was ist der Grund für 1+?
Gayan Weerakutti

16

Ich verwende dieses Skript als Workaround:

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

Ich habe amixer scontentsvor dem Aufrufen amixer set Master muteund nach dem Aufrufen einen Unterschied gemacht und mithilfe der grafischen Benutzeroberfläche die Stummschaltung aufgehoben, um herauszufinden, was nicht stummgeschaltet werden musste.


  1. Bei eingeschaltetem Sound amixer scontents > ~/before(Sie erhalten eine Datei mit dem Status aller Soundkanäle)
  2. Dann schalten Sie die Lautstärke mit amixer set Master toggle
  3. Erstellen Sie eine zweite Chanel-Statusdatei mit amixer scontents > ~/after
  4. Schalten Sie den Ton wieder um, mit amixer set Master toggledem die Lautstärke auf den Pegel vor dem ersten Umschaltbefehl zurückgesetzt werden soll
  5. Erstellen Sie eine dritte Datei mit amixer scontents > ~/afterafter

Jetzt haben Sie drei Dateien, die Ihnen den Status der für normalen Sound verwendeten Soundkanäle mitteilen, die von stumm geschaltet werden amixer set Master toggleund die nicht durch erneutes Aufheben der Stummschaltung mit demselben Befehl wieder eingeschaltet werden.

Im meldSoftware Center können Sie die Dateien einfach vergleichen und die Unterschiede (die Kanäle, die stummgeschaltet werden und die danach nicht mehr stummgeschaltet werden) anzeigen . Starten Sie es, öffnen Sie die drei Dateien und auf der Bildlaufleiste können Sie sehen, wo es Unterschiede zwischen den Dateien gibt. Verwenden Sie die gefundenen Kanalnamen, um sie dem oben beschriebenen Skript hinzuzufügen.


Leider schaltet das Skript den Ton nur stumm, aber nicht aus
joschi 24.10.11

Das liegt wahrscheinlich daran, dass Ihre Dinge, die nicht stummgeschaltet werden müssen, nicht "Front" und "Kopfhörer" heißen, wie sie auf meinem System sind.
Jim Hunziker

Ich habe auch einen Unterschied gemacht und herausgefunden, was fehlte, damit das Skript auf meinem Computer funktioniert. Jetzt funktioniert es. Danke vielmals.
Josefi

5

Ich konnte die Stummschaltung nicht richtig aktivieren. Unabhängig davon, ob ich CLI verwendet und Amixer sset Master toggle oder die HP Pavillion Media-Umschalttaste gedrückt habe, erhalte ich das gleiche Ergebnis: Wenn der Ton eingeschaltet ist und funktioniert, werden Masterkanal UND PCM-Kanal automatisch ausgeschaltet. Wenn ich dann den Schalter erneut drücke (cli oder key), wird der Master IMMER eingeschaltet, PCM bleibt jedoch stummgeschaltet. Für mein Rig (HP Pavilion DV6 mit Xubuntu Oneric) bedeutet dies, dass der Ton auch bei eingeschaltetem Master ausgeschaltet ist. Beim Ausführen von CLI - dieselben Ergebnisse. Wenn ich mit cli PCM umschalte, wird auch der Hauptkanal ausgeschaltet und wieder nicht wieder eingeschaltet, obwohl PCM korrekt umgeschaltet wird.

Das Skript, das funktionierte, war:

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

Dann habe ich Xubuntu-Tastenkombinationen (Einstellungen> Einstellungsmanager> Tastatur> Anwendungsverknüpfungen) verwendet, um zum Skript zu navigieren (ich habe es sndfx.sh genannt und es auf ausführbar gesetzt, indem ich mit der rechten Maustaste in thunar geklickt habe und unter den Berechtigungen ausführbar gemacht habe). Dann habe ich ihm den HP Pavilion-Kurzbefehl zugewiesen, indem ich ihn angetippt habe. Jetzt schaltet es richtig um - Super. Hoffe das hilft jemand anderem.

Frieden


2

Wenn ich mich nicht irre, ist es ein Fehler, der dazu führt, dass andere Mixer-Kanäle stumm geschaltet und die Stummschaltung aufgehoben werden. Zum Stummschalten versuchen

Amixer Set Master 0;

Um die Stummschaltung aufzuheben, versuchen Sie es

Amixer Set Master 1% +; Amixer Set Master 7dB +;


Diese Befehle funktionieren, aber ich kann die Lautstärke nicht mit einem einzigen Befehl umschalten, den ich mit einer Kantenbindung kombinieren kann.
Josefi

1
Wenn jemand Interesse an dem dazugehörigen Fehlerbericht hat, siehe hier .
Josefi


1

Wenn Sie amixer in .lircrc für Ihre Fernsteuerung, die mit lirc arbeitet, ersetzen möchten, können Sie die folgenden Zeilen verwenden. Stellen Sie sicher, dass xmacro installiert ist. Die Lautstärkeregelung funktioniert jetzt wieder.

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

Der Trick besteht darin, den Lautsprecher- oder Kopfhörerstatus dem Status des Hauptkanals zu folgen, je nachdem, ob Sie die Kopfhörer angeschlossen haben oder nicht. Dieses Skript erledigt dies für mich auf meinem alten Dell Latitude-Laptop:

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

Möglicherweise müssen Sie Ihre Kanäle mit amixer auf Ihrem Computer überprüfen und die SLAVE-Definitionen entsprechend ändern. Auch die Grep-Zeichenfolge "Headphone \ Jack" in der HEADPHONES_PLUGGED-Definition muss möglicherweise etwas anderes sein.


-1

Brute Force-Stummschaltung aufheben:

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

2
Ich halte es nicht für eine gute Idee, die Stummschaltung von 80 und mehr Geräten aufzuheben. Dies schließt Mikrofone ein, die zu unerwünschten Rückkopplungsschleifen führen können. tun Sie ein for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; donevorher, um zu sehen, was getan werden würde.
Benutzer unbekannt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.