Startseite
» PC-Tipps
»
Erstelle ein PipeWire-Ausgabe-Umschaltskript, das den aktiven Audioausgang verschiebt.
Erstelle ein PipeWire-Ausgabe-Umschaltskript, das den aktiven Audioausgang verschiebt.
Für eine einfache Audioumschaltung unter Debian verwenden Sie pactlden PulseAudio-kompatiblen Server von PipeWire. Das folgende Skript schaltet zwischen zwei benannten Ausgängen um, legt den neuen Standardausgang fest und verschiebt bereits geöffnete Wiedergabestreams. Ersetzen Sie die Beispielnamen der Ausgänge durch die exakten Namen auf Ihrem System.
1. Bestätigen Sie den PipeWire Pulse-Server und ermitteln Sie Ihre Ausgänge.
Die PipeWire- pipewire-pulseKomponente stellt einen PulseAudio-kompatiblen Server bereit, sodass Standardtools wie [Name des Tools einfügen] pactldessen Sinks (Audioausgänge) steuern können. Prüfen Sie, welchen Server Ihr Client erreicht, und listen Sie die verfügbaren Sinks auf:
pactl info | grep -E 'Server Name|Server Version'
pactl list short sinks
Für diese Vorgehensweise muss der Servername PipeWire enthalten. Die Sink-Liste enthält symbolische Namen wie z. B. „<Ausgangsname>“ alsa_output.pci-0000_00_1f.3.analog-stereo. Kopieren Sie zwei Namen exakt: einen für jeden Ausgang, zwischen dem Sie umschalten möchten. Diese Namen sind spezifisch für die angeschlossene Hardware und das Audioprofil. Kopieren Sie keine Namen aus dem Beispiel und verwenden Sie keinen numerischen Sink-Index, da dieser sich während einer Sitzung ändern kann.
Falls pactldie Datei fehlt, stellt Debian sie bereit pulseaudio-utils. Installieren Sie dieses Client-Paket nur bei Bedarf. Falls pactl infokeine Verbindung hergestellt werden kann oder ein anderer Audioserver gemeldet wird, überprüfen Sie zunächst, ob der PulseAudio-Ersatz von PipeWire in Ihrer Benutzersitzung ausgeführt wird. Installieren oder wechseln Sie Audioserver nicht ohne Weiteres.
Kopieren Sie die exakten symbolischen Senkennamen aus der Live-Ausgabeliste, bevor Sie das Umschaltskript ausfüllen.
2. Erstellen Sie das Umschaltskript.
Erstellen Sie ein benutzerspezifisches Skriptverzeichnis und öffnen Sie eine neue Datei:
Fügen Sie dieses Skript ein und ersetzen Sie die beiden Werte in SINK_Aund SINK_Bdurch die kopierten Namen:
#!/usr/bin/env bash
set -euo pipefail
SINK_A='alsa_output.pci-0000_00_1f.3.analog-stereo'
SINK_B='alsa_output.usb-Generic_Headset-00.analog-stereo'
command -v pactl >/dev/null || { echo "pactl is missing" >&2; exit 1; }
server_name=$(pactl info | sed -n 's/^Server Name: //p')
case "$server_name" in
*PipeWire*) ;;
*) echo "pactl is not connected to PipeWire's Pulse server" >&2; exit 1 ;;
esac
sinks=$(pactl list short sinks | awk '{print $2}')
for sink in "$SINK_A" "$SINK_B"; do
if ! grep -Fqx -- "$sink" <<< "$sinks"; then
printf 'Sink not found: %s\n' "$sink" >&2
exit 1
fi
done
current=$(pactl get-default-sink)
if [[ "$current" == "$SINK_A" ]]; then
target=$SINK_B
else
target=$SINK_A
fi
pactl set-default-sink "$target"
while IFS= read -r input_id; do
[[ -n "$input_id" ]] || continue
pactl move-sink-input "$input_id" "$target"
done < <(pactl list short sink-inputs | awk '{print $1}')
printf 'Default output: %s\n' "$target"
Das Skript prüft vor jeder Änderung, ob beide Ausgänge vorhanden sind. Es wählt den anderen konfigurierten Ausgang, wenn der aktuelle Standardausgang leer ist SINK_A; ist der aktuelle Standardausgang ein anderer, wird mit dem aktuellen Ausgang begonnen SINK_A. Der set-default-sinkBefehl wirkt sich auf neue Streams aus, während die Schleife die move-sink-inputAusgabe auch für bestehende Wiedergabestreams verwendet. Sollen nur zukünftige Anwendungen den neuen Standardausgang verwenden, entfernen Sie die whileSchleife; bereits laufende Streams bleiben unverändert. Führen Sie dieses Skript als derselbe angemeldete Desktop-Benutzer aus, dem die PipeWire-Sitzung gehört. Verwenden Sie nicht `pactl` sudo, da dies zu einer Verbindung über eine andere Benutzerlaufzeitumgebung führen und die Steuerung Ihres Desktop-Audios beeinträchtigen kann. Diese Vorgänge sind im Debian- Handbuch zu `pactl` dokumentiert .
Weisen Sie jeder Variablen einen der von pactl in dieser Debian-Sitzung gemeldeten Senkennamen zu.
3. Speichern, ausführen und den Schalter überprüfen.
Speichern Sie das Skript in Nano mit Ctrl+O, drücken Sie Enter, und beenden Sie dann mit Ctrl+X. Markieren Sie das Skript als ausführbar und führen Sie es aus:
Es sollte die neue Standard-Senke ausgeben. Überprüfen Sie die aktuelle Standard-Senke des Servers und alle aktiven Wiedergabestreams:
pactl get-default-sink
pactl list short sink-inputs
Führen Sie das Skript ein zweites Mal aus, um zurückzuwechseln. Um dies praktisch zu überprüfen, spielen Sie während des Umschaltens eine kurze Audiodatei ab und vergewissern Sie sich, dass diese vom ausgewählten Gerät stammt. Die genauen Gerätenamen und das Anzeigeverhalten hängen von der Hardware, dem Bluetooth-Verbindungsstatus und den aktiven Audioprofilen ab.
Das Skript meldet, welcher Name als Ausgabe zum neuen Standardwert geworden ist.Bestätigen Sie die Standardsenke und prüfen Sie, ob ein aktiver Datenstrom an den ausgewählten Ausgang weitergeleitet wird.
Wenn das Skript den Ton nicht umschaltet
„Senke nicht gefunden“: Führen Sie den Vorgang pactl list short sinkserneut aus. Möglicherweise wurde der Senkenname durch ein getrenntes Headset oder ein geändertes Profil geändert; aktualisieren Sie die entsprechende Variable.
Verbindung fehlgeschlagen: Überprüfen Sie, ob die PipeWire-Benutzerdienste ausgeführt werden und ob pactl infoder PipeWire-Pulse-Server identifiziert wurde. Das Debian -Paket pipewire-pulse stellt diesen Ersatzserver bereit, während pulseaudio-utilspactl den Client enthält .
Neue Audio-Streams werden verschoben, die aktuelle App jedoch nicht: Führen Sie das Skript erneut aus, solange der Stream sichtbar ist pactl list short sink-inputs. Einige Anwendungen öffnen Streams erneut oder behalten ihre eigene Geräteauswahl bei. Wählen Sie daher in dieser Anwendung „Standard“, wenn sie weiterhin an einen Ausgang gebunden ist.
Die Dokumentation zum PipeWire- Protokoll Pulse erklärt, warum PulseAudio-Befehlszeilenclients PipeWire steuern können, wenn PulseAudio pipewire-pulseder aktive Server ist. Dieses Skript nutzt diese Kompatibilitätsschicht; es konfiguriert keine Hardwareprofile und garantiert nicht die Verfügbarkeit eines getrennten Geräts.