Wie @ Teresa-e-Junior hervorhob, pactl
ist das Werkzeug zu verwenden:
Zunächst möchten wir möglicherweise die IDs unserer PA-Senken abrufen. Auf meinem System bekomme ich Folgendes:
$ pactl list short sinks
0 alsa_output.pci-0000_01_00.1.hdmi-surround module-alsa-card.c s16le 6ch 44100Hz SUSPENDED
1 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING
Waschbecken 1 ist derzeit mein Standard Waschbecken.
Aber jetzt möchte ich, dass alle meine aktuellen und zukünftigen Streams über HDMI abgespielt werden (dh Senke 0).
Es gibt einen Befehl zum Festlegen der Standardsenke für PulseAudio, der jedoch keine Auswirkungen auf meinen PC zu haben scheint:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
Stattdessen scheinen neue Streams mit der Senke verbunden zu sein, auf die zuletzt ein Stream verschoben wurde.
Lassen Sie uns also pactl anweisen, alle aktuell wiedergegebenen Streams zum Sinken zu bringen 0
. Wir müssen sie zuerst auflisten:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Ok, wir haben zwei Streams (IDs 290 und 295), die beide an sink angeschlossen sind 1
.
Verschieben wir sie zum Sinken 0
:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Das sollte es also sein. Jetzt müssen wir nur noch ein Skript erstellen, das die Arbeit für uns erledigt:
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <sinkId/sinkName>" >&2
echo "Valid sinks:" >&2
pactl list short sinks >&2
exit 1
fi
newSink="$1"
pactl list short sink-inputs|while read stream; do
streamId=$(echo $stream|cut '-d ' -f1)
echo "moving stream $streamId"
pactl move-sink-input "$streamId" "$newSink"
done
Sie können es entweder mit einer Senken-ID oder einem Senkennamen als Parameter aufrufen (dh entweder 0
oder so ähnlich alsa_output.pci-0000_01_00.1.hdmi-surround
).
Jetzt können Sie dieses Skript an ein udev-Ereignis oder eine Tastenkombination anhängen.
man pactl
Befehlszeilenoptionen von PulseAudio ansehen .