@ Teresa-e-Junior'ın belirttiği gibi pactl
kullanılacak araç:
Her şeyden önce, KA lavabolarımızın kimliklerini almak isteyebiliriz. Benim sistemimde bu ne elde edilir:
$ 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
Lavabo 1 şu anda benim varsayılan lavabo.
Ancak şimdi tüm mevcut ve gelecekteki akışlarımın HDMI üzerinden çalınmasını istiyorum (örn. Lavabo 0).
PulseAudio için varsayılan havuzu ayarlama komutu var, ancak bilgisayarımda herhangi bir etkisi görünmüyor:
$ pacmd set-default-sink 0 #doesn't work on my PC :(
Bunun yerine, yeni akışlar, en son bir akıntının kendisine taşındığı lavaboya bağlı görünüyor.
Öyleyse pactl’a şu anda çalmakta olan tüm akıntıları batması için hareket ettirelim 0
. Önce onları listelememiz gerekecek:
$ pactl list short sink-inputs
290 1 176 protocol-native.c float32le 2ch 44100Hz
295 1 195 protocol-native.c float32le 2ch 44100Hz
Tamam, her ikisi de lavaboya bağlı iki akışımız (ID 290 ve 295) var 1
.
Onları batırmaya taşıyalım 0
:
$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0
Yani, bu olmalı. Şimdi sadece bizim için işi yapan bir senaryo yazmamız gerekiyor:
#!/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
Parametre olarak bir lavabo kimliği veya bir lavabo adı ile çağırabilirsiniz (yani ya 0
da benzeri bir şey alsa_output.pci-0000_01_00.1.hdmi-surround
).
Şimdi bu betiği bir udev olayına veya anahtar kısayoluna ekleyebilirsiniz.
man pactl
PulseAudio komut satırı seçeneklerine bakabilirsiniz .