Como señaló @ Teresa-e-Junior, pactl
es la herramienta a utilizar:
En primer lugar, es posible que deseemos obtener las identificaciones de nuestros sumideros PA. En mi sistema esto es lo que obtengo:
$ 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
El sumidero 1 es actualmente mi sumidero predeterminado.
Pero ahora quiero que todas mis transmisiones actuales y futuras se reproduzcan a través de HDMI (es decir, sumidero 0).
Hay un comando para establecer el sumidero predeterminado para PulseAudio, pero no parece tener ningún efecto en mi PC:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
En cambio, las nuevas transmisiones parecen estar conectadas al sumidero al que se le trasladó una transmisión más recientemente.
Entonces, digamos a pactl que mueva todas las transmisiones actualmente en reproducción para hundirse 0
. Primero tendremos que enumerarlos:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Ok, tenemos dos transmisiones (ID 290 y 295) que están conectadas al receptor 1
.
Vamos a moverlos a hundirse 0
:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Entonces, eso debería ser. Ahora solo tenemos que hacer un script que haga el trabajo por nosotros:
#!/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
Puede llamarlo con una ID de sumidero o un nombre de sumidero como parámetro (es decir, 0
o algo parecido alsa_output.pci-0000_01_00.1.hdmi-surround
).
Ahora puede adjuntar este script a un evento udev o atajo de tecla.
man pactl
opciones de línea de comandos de PulseAudio.