Debian schaltet Laptop-Lautsprecher auf Kopfhörer um, aber nicht HDMI auf Kopfhörer. Kann die Audioausgabe automatisch umgeschaltet werden?

Debian schaltet Laptop-Lautsprecher auf Kopfhörer um, aber nicht HDMI auf Kopfhörer. Kann die Audioausgabe automatisch umgeschaltet werden?

Bei Verwendung von Laptop-Lautsprechern wird beim Einstecken von Kopfhörern die Ausgabe automatisch von den Lautsprechern auf die Kopfhörer umgeschaltet und beim Abziehen umgekehrt. Bei Verwendung der Monitorlautsprecher über HDMI erfolgt keine automatische Umschaltung:

Kann die Audioausgabe zwischen Geräten automatisch umgeschaltet werden, wenn Kopfhörer ein- oder ausgesteckt werden?

Debian 12 (Bookworm), Kernelversion 6.7.9-2, Pipewire 1.0.5.

Antwort1

Die automatische Audioumschaltung zwischen Laptop-Lautsprechern und analogen Kopfhörern erfolgt zwischen verschiedenen Ausgängen eines einzelnen Audiochips. Der Chip kann sogar Hardware-Unterstützung dafür haben: Mit HD-Audio-Audiobuchsen an der Vorderseite ist es eine umschaltbare Funktion innerhalb des Soundchips, die, wenn aktiviert, andere Ausgänge automatisch stummschaltet, wenn sie erkennt, dass Kopfhörer angeschlossen sind.

(Wenn Sie zB verwenden alsamixerund den tatsächlichen Hardware-Mixer Ihres Soundchips anstelle der vereinfachten Lautstärkeregelung von Pipewire auswählen, wird es möglicherweise als Auto-MuteUmschalter angezeigt.)

Bei älteren Audiobuchsen auf der Vorderseite im AC97-Stil handelt es sich tatsächlich um einen mechanischen Schalter in der Audiobuchse selbst, der die Ausgangssignale zum Lautsprecher-/Line-Ausgang unterbricht, wenn ein Kopfhörerstecker eingesteckt wird.

Beim Umschalten zwischen HDMI und Kopfhörern jeglicher Art oder zwischen Laptop-Lautsprechern und einem USB-Headset muss der Audiodatenstrom auf einen anderen Audiochip umgeschaltet werden. Pipewire kann das, aber nur, wenn die Prioritäten der Ausgabesenke richtig eingestellt sind und die automatische Umschaltung aktiviert ist.

Sehendieser Blogeintragwireplumber: Es beschreibt, wie Audio-Sink-Prioritäten in der 0.4-Serie, die in Debian 12 enthalten ist, überprüft und angepasst werden .Dieser Hinweis ist nicht direkt anwendbar, wenn Sie wireplumber0.5 oder höher haben, da sich die Konfigurationsmethode in Version 0.5 geändert hat.

Kurz gesagt: Der erste Schritt besteht darin, die automatische Umschaltung zu aktivieren, wenn ein neues Soundgerät angeschlossen wird. Sie können dies vorübergehend tun, indem Sie ausführen pactl load-module module-switch-on-connect.

Diese AskUbuntu.SE-Frageenthält auch den Vorschlag zum Ausführen pactl load-module module-switch-on-port-available: Ich verstehe, dass das Umschalten ermöglicht wird, wenn auf einem vorhandenen Audiogerät ein neuer Port verfügbar wird.

Um die obigen Befehle dauerhaft zu machen, lesen Sie /usr/share/pipewire/pipewire-pulse.confdie Beispiele und fügen Sie den entsprechenden Teil einer *.confDatei in Ihrem ~/.config/pipewire/pipewire-pulse.conf.d/Verzeichnis hinzu (erstellen Sie sie, falls sie noch nicht existiert). Beispiel:

pulse.cmd = [
    { cmd = "load-module" args = "module-always-sink" flags = [ ] } #default
    { cmd = "load-module" args = "module-switch-on-connect" } #uncommented
    { cmd = "load-module" args = "module-switch-on-port-available" }  #added
    #{ cmd = "load-module" args = "module-gsettings" flags = [ "nofail" ] }
]

Der zweite Schritt besteht darin, sicherzustellen, dass Ihren Soundgeräten die entsprechenden Prioritäten zugewiesen werden.

Sie können wpctl statusdie Identifikationsnummern aller Geräte anzeigen, die Pipewire wichtig sind, und dann wpctl inspect <number> | grep -e node -e priorityden/die Namen, die Beschreibung und die Priorität eines bestimmten Audiogeräts anzeigen. Wenn die standardmäßige Prioritätsreihenfolge nicht die gewünschte ist, können Sie eine ~/.config/wireplumber/main.lua.d/60-*.luaDatei erstellen, um sie anzupassen. Der Inhalt sollte ungefähr wie folgt aussehen:

rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_output.usb-MOTU_M4_M4MC0570FU-00.Direct__hw_M4__sink" },
    },
  },
  apply_properties = {
    ["priority.driver"] = 1050,
    ["priority.session"] = 1050,
  },
}

Die Standardpriorität für das „erwartete“ primäre Soundgerät sollte bei etwa 1009 liegen. Wenn Sie also einem anderen Soundgerät einen höheren Wert zuweisen, wird pipewirees gegenüber anderen bevorzugt, sofern es verfügbar ist. Sie sollten jedoch keinen höheren Wert als 1500 zuweisen, da die höheren Werte für Monitorgeräte reserviert sind.

Es gibt anscheinend auch Prioritätswerte für einzelne Ports, leider weiß ich derzeit nicht, wie ich diese anpassen kann. Sie können sie anzeigen, pactl list cardsobwohl die Ausgabe ziemlich lang ist.

Wenn jemand eine gute Möglichkeit zum Anpassen der Pipewire-Portprioritäten kennt, können Sie diese gerne bearbeiten, wenn Sie nicht selbst eine vollständige Antwort schreiben möchten.

verwandte Informationen