Jak zauważyła @ Teresa-e-Junior, pactljest to narzędzie do użycia:
Przede wszystkim możemy chcieć uzyskać identyfikatory naszych zlewozmywaków PA. W moim systemie otrzymuję to:
$ 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
Zlew 1 jest obecnie moim domyślnym zlewem.
Ale teraz chcę, aby wszystkie moje obecne i przyszłe strumienie były odtwarzane przez HDMI (tj. Sink 0).
Istnieje polecenie ustawienia domyślnego ujścia PulseAudio, ale wydaje się, że nie ma to żadnego wpływu na mój komputer:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
Zamiast tego wydaje się, że nowe strumienie są podłączone do zlewu, do którego ostatnio przeniesiono strumień.
Powiedzmy więc pactl, aby przesunął wszystkie aktualnie odtwarzane strumienie do zatonięcia 0. Najpierw musimy je wymienić:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Ok, mamy dwa strumienie (identyfikatory 290 i 295), które są dołączone do zlewu 1.
Przenieśmy je do tonięcia 0:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Tak powinno być. Teraz musimy tylko stworzyć skrypt, który wykona dla nas pracę:
#!/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
Możesz to nazwać za pomocą identyfikatora ujścia lub nazwy ujścia jako parametru (tj. Albo 0czegoś w tym rodzaju alsa_output.pci-0000_01_00.1.hdmi-surround).
Teraz możesz dołączyć ten skrypt do zdarzenia udev lub skrótu klawiszowego.
man pactlrzucić okiem na opcje wiersza poleceń PulseAudio.