Jak zauważyła @ Teresa-e-Junior, pactl
jest 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 0
czegoś 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 pactl
rzucić okiem na opcje wiersza poleceń PulseAudio.