Comme @ Teresa-e-Junior a souligné pactl
l'outil à utiliser:
Tout d’abord, nous voudrons peut-être obtenir les identifiants de nos puits d’AP. Sur mon système, voici ce que je reçois:
$ 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
Le puits 1 est actuellement mon puits par défaut.
Mais maintenant, je veux que tous mes flux actuels et futurs soient lus via HDMI (c-à-d. Évier 0).
Il y a une commande pour définir le récepteur par défaut pour PulseAudio, mais cela ne semble pas avoir d'effet sur mon PC:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
Au lieu de cela, de nouveaux flux semblent être connectés au récepteur auquel un flux a été déplacé le plus récemment.
Alors disons à pactl de déplacer tous les flux en cours de lecture vers le puits 0
. Nous devons d’abord les lister:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Ok, nous avons deux flux (ID 290 et 295) qui sont tous deux attachés à couler 1
.
Passons-les à couler 0
:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Donc, ça devrait être ça. Maintenant, nous devons juste faire un script qui fait le travail pour nous:
#!/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
Vous pouvez l'appeler avec un ID de récepteur ou un nom de récepteur en tant que paramètre (c'est-à-dire 0
ou quelque chose comme cela alsa_output.pci-0000_01_00.1.hdmi-surround
).
Vous pouvez maintenant attacher ce script à un événement udev ou à un raccourci clavier.
man pactl
options de ligne de commande PulseAudio.