Come sottolineato da @ Teresa-e-Junior pactl
è lo strumento da utilizzare:
Prima di tutto potremmo voler ottenere gli ID dei nostri lavandini PA. Sul mio sistema questo è quello che ottengo:
$ 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
Il lavandino 1 è attualmente il mio lavandino predefinito.
Ma ora voglio che tutti i miei stream attuali e futuri vengano riprodotti tramite HDMI (ovvero sink 0).
C'è un comando per impostare il sink predefinito per PulseAudio, ma non sembra avere alcun effetto sul mio PC:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
Invece, nuovi flussi sembrano essere collegati al lavandino a cui è stato spostato un flusso più di recente.
Quindi diciamo a pactl di spostare tutti gli stream attualmente in riproduzione per affondare 0
. Dovremo prima elencarli:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Ok, abbiamo due flussi (ID 290 e 295) che sono entrambi collegati al sink 1
.
Spostiamoli per affondare 0
:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Quindi, dovrebbe essere quello. Ora non ci resta che realizzare una sceneggiatura che funzioni per noi:
#!/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
Puoi chiamarlo con un ID sink o un nome sink come parametro (cioè uno 0
o qualcosa del genere alsa_output.pci-0000_01_00.1.hdmi-surround
).
Ora puoi allegare questo script a un evento udev o a una scorciatoia da tastiera.
man pactl
opzioni della riga di comando di PulseAudio.