Wie konfiguriert man ein PipeWire-Skript zum Umschalten der Audioausgabe unter Debian?

Die einfachste und zuverlässigste Methode, PipeWire-Ausgänge per Skript unter Debian umzuschalten, ist die Verwendung wpctldes Kommandozeilentools `WirePlumber`: Identifizieren Sie die beiden gewünschten Sink-Knoten, prüfen Sie den aktuell standardmäßigen Sink und rufen Sie wpctl set-default IDden anderen auf. Dies ist der Verwendung einer fest codierten numerischen Knoten-ID vorzuziehen, da sich PipeWire-Objekt-IDs ändern können, wenn Geräte die Verbindung trennen, wiederherstellen oder die Sitzung neu gestartet wird.

Diese Anleitung verwendet einen Zwei-Geräte-Schalter – beispielsweise Laptop-Lautsprecher und Bluetooth-Kopfhörer – und achtet bewusst darauf, dass die Logik sowohl mit Debian 13 (Trixie) als auch mit Debian 12 (Bookworm) kompatibel ist. Stand Oktober 2026 listet die Debian-Paketseite WirePlumber 0.5.8 in Debian 13 und 0.4.13 in Debian 12 auf. Neuere WirePlumber-Versionen bieten zusätzliche Funktionen zur Auflistung, aber wpctl status -ndie wpctl inspecthier wpctl set-defaultbenötigten Funktionen sind die grundlegenden.

Wenn diese Methode gut passt

Verwenden Sie diese Methode, wenn PipeWire bereits die Desktop-Audioausgabe übernimmt und Sie eine Tastenkombination, einen Launcher, einen Shell-Alias ​​oder einen Hotkey zum Umschalten zwischen zwei Ausgängen benötigen. Sie eignet sich gut für einen integrierten analogen Ausgang in Kombination mit einem USB-DAC, einem HDMI-Monitor, einem Bluetooth-Headset oder einem anderen Gerät, das im Abschnitt „Sinks“wpctl status angezeigt wird .

Es ist nicht für jedes Routing-Problem das richtige Werkzeug. wpctl set-defaultEs ändert das Standardziel für Streams, die eine automatische Verbindung benötigen. Es garantiert nicht, dass jede bereits laufende Anwendung einen bestehenden Stream sofort migriert. Einige Anwendungen folgen dem neuen Standard automatisch; bei anderen muss der Stream möglicherweise separat verschoben oder die Anwendung neu gestartet werden.

Bevor Sie das Drehbuch schreiben

Stellen Sie sicher, dass die PipeWire- und WirePlumber-Sitzung auf Benutzerebene fehlerfrei funktioniert. Die offizielle WirePlumber-Dokumentation empfiehlt, den Daemon mit `git check` zu überprüfen systemctl --user status wireplumber. Debian empfiehlt außerdem das pipewire-audioMetapaket unter Debian 12 und neueren Versionen für die Einrichtung eines vollständigen PipeWire-Audio-Stacks.

systemctl --user status wireplumber
systemctl --user status pipewire pipewire-pulse

Falls wpctles fehlt, installieren Sie WirePlumber und die normalen PipeWire-Audiokomponenten, anstatt zu versuchen, ein nicht zugehöriges Mixer-Dienstprogramm zu verwenden:

sudo apt update
sudo apt install pipewire-audio wireplumber

Führen Sie den Befehl nicht wpctlmit aus sudo. PipeWire und WirePlumber arbeiten normalerweise in der Sitzung Ihres Desktop-Benutzers, daher sollte der Befehl eine Verbindung zum Mediengraphen dieses Benutzers herstellen.

Schritt 1: Ermitteln Sie die Namen der Ausgabesenken

Laufen:

wpctl status -n

Diese -nOption ermöglicht wpctldie Anzeige von Objektnamen anstelle von benutzerfreundlichen Beschreibungen. Unter „Audio → Ausgänge“ finden Sie die Namen der beiden Ausgänge, die Sie umschalten möchten. Ein Gerät könnte beispielsweise einen integrierten Ausgang mit der Bezeichnung „Audio“ alsa_output.pci-0000_00_1f.3.analog-stereound einen Bluetooth-Ausgang mit der Bezeichnung „Bluetooth“ anzeigen bluez_output..

Debian-Terminal mit der Meldung „wpctl status -n“, in der unter „Audio Sinks“ ein integrierter analoger Audio-Sink und ein Bluetooth-Sink aufgeführt sind.
Eine repräsentative Terminalansicht von wpctl status -n: Stabile Namensfragmente werden im Abschnitt „Sinks“ identifiziert, anstatt numerische IDs in das Skript zu kopieren.

Wählen Sie ein Fragment, das eindeutig genug ist, um nur dem gewünschten Ausgang zugeordnet zu werden. Bei einer integrierten Soundkarte alsa_output...ist der vollständige Knotenname in der Regel sinnvoll. Bei einem Bluetooth-Gerät bluez_output.ist ein kürzeres Fragment nur dann praktikabel, wenn normalerweise nur ein Bluetooth-Audioausgang angeschlossen ist. Wenn Sie häufig mehrere Bluetooth-Ausgänge verbinden, verwenden Sie ein längeres Fragment, das eindeutig dem jeweiligen Gerät zugeordnet ist.

Schritt 2: Überprüfen Sie eine Senke mit wpctl inspect

Bevor Sie den Schalter per Skript programmieren, überprüfen Sie eine der angezeigten IDs wpctl status -n:

wpctl inspect 45

Ersetzen Sie 45<System-ID> durch die aktuelle ID Ihres Systems. Suchen Sie nach Eigenschaften wie <Eigenschaft1> node.nameund <Eigenschaft2> media.class. Bei einer Wiedergabeausgabe media.classsollte <Eigenschaft1> ein Audio-Senke identifizieren. Die numerische ID ist für die Überprüfung und den direkten set-defaultBefehl nützlich, das unten stehende Skript ermittelt jedoch bei jeder Ausführung eine neue ID.

Das Debian-Terminal zeigt die Ausgabe von `wpctl inspect` mit `node.name` für eine integrierte Audio-Senke und `media.class Audio Sink`.
Die Überprüfung eines Senkenobjekts bestätigt den Knotennamen, mit dem das Skript übereinstimmt, und hilft dabei, eine Wiedergabesenke von einer Quelle oder einem nicht zugehörigen PipeWire-Objekt zu unterscheiden.

Sie können WirePlumber auch fragen, welches Waschbecken aktuell als Standard eingestellt ist, ohne dessen numerische ID zu kennen:

wpctl inspect @DEFAULT_AUDIO_SINK@

Der spezielle Bezeichner @DEFAULT_AUDIO_SINK@ist in WirePlumber dokumentiert und wird zur Laufzeit auf den aktuellen Standard-Wiedergabeknoten aufgelöst.

Schritt 3: Erstellen Sie ein Skript zum Umschalten zweier Ausgänge.

Erstellen Sie gegebenenfalls ein persönliches ausführbares Verzeichnis und öffnen Sie dann das Skript:

mkdir -p ~/.local/bin
nano ~/.local/bin/toggle-audio-output

Fügen Sie den folgenden Code ein und ersetzen Sie SINK_A<code> SINK_B<code></ wpctl status -n...

#!/usr/bin/env bash
set -euo pipefail

# Replace these with distinctive fragments from `wpctl status -n`.
SINK_A="alsa_output.pci-0000_00_1f.3.analog-stereo"
SINK_B="bluez_output."

find_sink_id() {
    local needle="$1"
    wpctl status -n | awk -v n="$needle" '
        /Sinks:/   { in_sinks=1; next }
        /Sources:/ { in_sinks=0 }
        in_sinks && index($0, n) {
            for (i=1; i<=NF; i++) {
                if ($i ~ /^[0-9]+\.$/) {
                    gsub(/\./, "", $i)
                    print $i
                    exit
                }
            }
        }'
}

current_name="$(
    wpctl inspect @DEFAULT_AUDIO_SINK@ |
    awk -F'= ' '/node.name/ {
        gsub(/"/, "", $2)
        print $2
        exit
    }'
)"

if [[ "$current_name" == *"$SINK_A"* ]]; then
    target_pattern="$SINK_B"
elif [[ "$current_name" == *"$SINK_B"* ]]; then
    target_pattern="$SINK_A"
else
    # If the current default is neither target, switch to A first.
    target_pattern="$SINK_A"
fi

target_id="$(find_sink_id "$target_pattern")"

if [[ -z "$target_id" ]]; then
    printf 'No available sink matched: %s\n' "$target_pattern" >&2
    exit 1
fi

wpctl set-default "$target_id"
printf 'Default audio sink changed to ID %s\n' "$target_id"
Der Nano-Editor in einem Debian-Terminal zeigt ein Bash-Skript an, das zwei PipeWire-Sink-Namen identifiziert und den Standard-Sink mit wpctl ändert.
Das Umschaltskript sollte die Senkennamen dynamisch abgleichen, den aktuellen Standardwert ermitteln und die aktuelle Objekt-ID des Ziels auflösen, bevor es aufgerufen wird wpctl set-default.

Warum löst das Skript jedes Mal IDs auf?

PipeWire-Objekt-IDs sind Sitzungsobjekte, daher 45ist die Verwendung einer ID als permanente Geräte-ID problematisch. Das Skript speichert stattdessen erkennbare Knotennamenfragmente, analysiert den aktuellen Abschnitt „Sinks“ und extrahiert die numerische ID erst beim Umschalten.

Warum es wpctl inspect für den aktuellen Standard verwendet

Das Skript fragt @DEFAULT_AUDIO_SINK@nach dessen node.name. Dadurch wird vermieden, dass die visuelle Position eines Sternchens in wpctl statusder Auswahl des aktuell ausgewählten Senkenbereichs ausschlaggebend ist. Anschließend vergleicht es diesen Namen mit SINK_Aund SINK_B.

Schritt 4: Machen Sie das Skript ausführbar und testen Sie es.

Speichern Sie die Datei und führen Sie sie anschließend aus:

chmod +x ~/.local/bin/toggle-audio-output
~/.local/bin/toggle-audio-output
wpctl status -n

Wenn die Zielsenke verfügbar ist, sollte das Skript die ausgewählte ID ausgeben. Führen Sie es erneut aus; es sollte nun die andere konfigurierte Senke auswählen. Überprüfen Sie das Ergebnis mit wpctl status -noder durch Inspektion @DEFAULT_AUDIO_SINK@.

Debian-Terminal nach Ausführung eines ausführbaren Audio-Umschaltskripts, wobei wpctl status die Bluetooth-Senke als Standardausgabe anzeigt
Nach Ausführung des Skripts wpctl status -nsollte überprüft werden, ob das gewünschte Ziel nun als Standard festgelegt ist.

WirePlumber dokumentiert wpctl set-default IDdas Festlegen einer Senke oder Quelle als Standardziel. In der aktuellen Version von WirePlumber wird diese Benutzerauswahl gespeichert und kann die automatische, prioritätsbasierte Auswahl überschreiben. Wenn Sie später wieder die automatische Standardauswahl verwenden möchten, gehen Sie wie folgt vor:

wpctl clear-default

Füge das Skript einer Tastenkombination hinzu

Sobald der Terminaltest zuverlässig ist, binden Sie ihn /home/YOUR_USER/.local/bin/toggle-audio-outputan eine Desktop-Tastenkombination. Verwenden Sie den absoluten Pfad, da ~manche Shortcut-Programme Shell-Kurzbefehle nicht auflösen. Die genaue Darstellung der Tastenkombination hängt von der Desktop-Umgebung ab. Daher ist es wichtig, dass das Skript zunächst in einem normalen Benutzerterminal korrekt funktioniert.

Wenn eine Verknüpfung ausgeführt wird, aber wpctlmeldet, dass keine Verbindung hergestellt werden kann, übernimmt der Launcher möglicherweise nicht die erwartete Benutzersitzungsumgebung. Überprüfen Sie denselben Befehl in einem Terminal innerhalb der grafischen Sitzung und prüfen Sie anschließend die Ausführungsregeln für Verknüpfungen der Desktop-Umgebung. Beheben Sie dieses Problem nicht, indem Sie dem Skript ein Präfix voranstellen sudo.

Behebung häufiger Fehler

„Kein passendes Spülbecken verfügbar“

Das Ziel ist wahrscheinlich nicht verbunden, sein Knotenname hat sich geändert oder Ihr Muster ist zu spezifisch. Führen Sie den Vorgang wpctl status -nerneut aus und aktualisieren Sie den entsprechenden SINK_AWert SINK_B. Stellen Sie bei Bluetooth-Verbindungen sicher, dass das Headset angeschlossen ist und ein Audiosignal freigegeben hat, bevor Sie das Skript aufrufen.

Das Skript ändert die Standardeinstellung, aber die vorhandene Audiowiedergabe wird an anderer Stelle fortgesetzt.

Dies kann normal sein. Die Dokumentation des Upstream-Projekts beschreibt set-defaultdie Auswahl des Ziels für neue Streams, die eine automatische Verbindung erfordern. Falls der bestehende Stream einer Anwendung weiterhin auf dem alten Zielsystem verbleibt, stoppen Sie die Wiedergabe und starten Sie sie neu oder öffnen Sie die Anwendung erneut. Wenn Sie bestehende Streams migrieren müssen, behandeln Sie dies als separate Routing-Aufgabe und gehen Sie nicht davon aus, dass set-defaultdies automatisch erfolgt.

Das falsche Bluetooth-Gerät wurde ausgewählt

Präzisieren Sie SINK_BIhre Angaben. Ein allgemeines Muster wie beispielsweise bluez_output.ist nur dann geeignet, wenn ein passendes Bluetooth-Gerät vorhanden ist. Verwenden Sie den vollständigen Knotennamen oder ein eindeutiges mittleres Fragment, wenn mehrere drahtlose Ausgänge gleichzeitig verbunden werden können.

WirePlumber ist nicht aktiv.

Überprüfen:

systemctl --user status wireplumber
journalctl --user -u wireplumber

Die Dokumentation des Entwicklers gibt Empfehlungen für systemctl --user --now enable wireplumberden Fall, dass der Daemon installiert, aber nicht aktiviert ist. Auf einem bereits konfigurierten Debian-Desktop sollte untersucht werden, warum der Benutzerdienst beendet wurde, bevor der gesamte Audio-Stack wiederholt neu gestartet wird.

Debian 12 versus Debian 13: Was ändert sich?

Debian-VersionWirePlumber-PaketPraktische Auswirkungen für dieses Skript
Debian 12 (Bookworm)Version 0.4.13 im Standard-RepositoryNutzen Sie den hier gezeigten kompatiblen wpctl status -n, inspect, und set-defaultWorkflow.
Debian 13 (Trixie)0.5.8 im Standard-RepositoryDas gleiche Skript funktioniert; neuere WirePlumber-Versionen bieten außerdem eine erweiterte CLI und ein JSON-basiertes Konfigurationsverhalten.

Kopieren Sie die Konfigurationsbeispiele von WirePlumber 0.5 nicht einfach in eine ältere 0.4-Installation. WirePlumber 0.5 hat sein Konfigurationssystem geändert; dieses Tutorial umgeht diese Versionsgrenze, indem es Befehlszeilenoperationen anstelle von persistenten Richtliniendateien verwendet.

Checkliste zur schnellen Überprüfung

  • systemctl --user status wireplumberzeigt an, dass der Sitzungsmanager läuft.
  • wpctl status -nUnter „Sinks“ werden beide beabsichtigten Ausgänge aufgelistet.
  • wpctl inspect @DEFAULT_AUDIO_SINK@Gibt einen gültigen aktuellen Wiedergabeknoten zurück.
  • Die beiden Skriptmuster identifizieren die beabsichtigten Senken eindeutig.
  • Durch zweimaliges Ausführen des Skripts wird die Standardeinstellung zwischen den beiden Ausgaben gewechselt.
  • Wenn eine bestehende Anwendung nicht migriert wird, ist Ihnen bewusst, dass die Standardauswahl und die Active-Stream-Migration unterschiedliche Verhaltensweisen darstellen.

Primärquellen

Informationen zur Befehlssemantik und zum aktuellen Verhalten von WirePlumber finden Sie im offiziellen WirePlumber-wpctl-Handbuch und im offiziellen WirePlumber-Leitfaden für Einsteiger . Spezielle Informationen zu Paketen und deren Einrichtung unter Debian finden Sie in der Debian-PipeWire-Dokumentation , auf der Debian-12-WirePlumber-Paketseite und auf der Debian-13-WirePlumber-Paketseite .

Einen Kommentar hinterlassen

Wie man ein entferntes SSHFS-Verzeichnis beim Systemstart in Debian automatisch einbindet

Wie man ein entferntes SSHFS-Verzeichnis beim Systemstart in Debian automatisch einbindet

Automatisches Einbinden eines entfernten SSHFS-Verzeichnisses beim Systemstart in Debian mittels schlüsselbasiertem SSH, /etc/fstab, systemd-Netzwerkoptionen, automatischem Einbinden und Verifizierungsschritten.

Behebung des Fehlers „Speicher kann nicht zugewiesen werden“ während eines SLES-System-Upgrades

Behebung des Fehlers „Speicher kann nicht zugewiesen werden“ während eines SLES-System-Upgrades

Beheben Sie den Fehler „Speicher kann nicht zugewiesen werden“ während eines SLES-Upgrades. Überprüfen Sie RAM, Swap-Speicher, OOM-Protokolle und Prozesslimits und beheben Sie das Problem, ohne die Pakettransaktionen zu unterbrechen.

Behebung von Touchscreen-Kalibrierungsproblemen auf Harmonica OS-Tablets: Die richtige Linux-Lösung auswählen

Behebung von Touchscreen-Kalibrierungsproblemen auf Harmonica OS-Tablets: Die richtige Linux-Lösung auswählen

Beheben Sie Probleme mit Touch-Offset, Rotation und Display-Mapping auf Harmonica OS (HamoniKR)-Tablets. Vergleichen Sie die Korrekturen von X.Org und libinput, testen Sie sicher und erkennen Sie, wann eine Kalibrierung nicht hilft.

Wie man eine verschlüsselte Swap-Partition unter Debian 12 einrichtet

Wie man eine verschlüsselte Swap-Partition unter Debian 12 einrichtet

Verschlüsseln Sie eine bestehende Debian 12 Swap-Partition mit dm-crypt, einem neuen zufälligen Schlüssel bei jedem Systemstart, /etc/crypttab, /etc/fstab und sicheren Verifizierungsschritten.

Wie man den Zustand von SMART-Laufwerken unter Ubuntu per E-Mail-Benachrichtigung überwacht

Wie man den Zustand von SMART-Laufwerken unter Ubuntu per E-Mail-Benachrichtigung überwacht

Richten Sie smartmontools unter Ubuntu ein, um den Zustand von Laufwerken zu überwachen und SMART-E-Mail-Benachrichtigungen zu versenden. Prüfen Sie die Geräteunterstützung, konfigurieren Sie die E-Mail-Zustellung, testen Sie Benachrichtigungen und beheben Sie Fehler.

Behebung des Fehlers „Kein bootfähiges Gerät gefunden“ nach der Installation von Debian auf einem UEFI-System

Behebung des Fehlers „Kein bootfähiges Gerät gefunden“ nach der Installation von Debian auf einem UEFI-System

Beheben Sie Debian UEFI-Bootfehler, indem Sie den Bootmodus des Installationsprogramms, die EFI-Systempartition, NVRAM-Einträge, GRUB-EFI-Dateien, Secure Boot und Firmware-Fallbacks überprüfen.

Wie man automatisierte Btrfs-Snapshots auf Ubuntu Desktop einrichtet

Wie man automatisierte Btrfs-Snapshots auf Ubuntu Desktop einrichtet

Konfigurieren Sie Snapper so, dass es auf Ubuntu Desktop geplante Btrfs-Snapshots erstellt und löscht. Überprüfen Sie vorher Ihr Subvolume-Layout, aktivieren Sie die Systemd-Timer und stellen Sie die Aufbewahrungsdauer sicher.

Sicheres Beheben von Speicherplatzproblemen bei SUSE Linux Enterprise LVM Thin Provisioning

Sicheres Beheben von Speicherplatzproblemen bei SUSE Linux Enterprise LVM Thin Provisioning

Diagnostizieren und Wiederherstellen eines vollständigen LVM Thin Pools auf SUSE Linux Enterprise durch Unterscheidung von Daten- und Metadatenerschöpfung, Erweiterung des Speichers, Reparatur der Metadaten und Aktivierung der automatischen Erweiterung.

Debian 12 CIS Hardening Guide: A Step-by-Step Server Baseline

Debian 12 CIS Hardening Guide: A Step-by-Step Server Baseline

Harden Debian 12 Bookworm against the current CIS Benchmark v2.0.0 with a safe server workflow for updates, SSH, firewall, AppArmor, auditing, and validation.

So installieren Sie Flatpak- und Snap-Apps auf Gooroom OS

So installieren Sie Flatpak- und Snap-Apps auf Gooroom OS

Installieren Sie Flatpak- und Snap-Apps auf Gooroom OS mit Versionsprüfungen, Terminalbefehlen und einem praktischen Vergleich von Kompatibilität, Sicherheitskontrollen, Updates und Speicherplatz.