Concluindo os nomes das variáveis, você não entende o que está acontecendo aqui.
Esta linha está bem. (Mas não se você tiver mais de duas pias.) Você está procurando a pia sem *
e atribuindo-a a inactive_sink_id
.
inactive_sink_id=$(pacmd list-sinks | grep -E "[^*] index: [0-9]+" | sed -r -e "s/.*([0-9]+)//g")
Isso também é bom. Contanto que você tenha apenas dois dissipadores. Se você tiver mais, haverá um erro, pois a variável conterá muitos números.
pacmd set-default-sink $inactive_sink_id
Este também pode estar bem, mas com apenas uma entrada. E o nome da variável aqui não está bem.
move_sink_to_id=$(pacmd list-sink-inputs | grep -E "index: [0-9]+" | sed -r -e "s/.* ([0-9]+)//g")
Você não está movendo uma pia para um id. Você está movendo uma entrada para um coletor identificado por um id. (Os ids não mudam. Por que eles iriam?) Se houver mais entradas, esta linha não funcionará, pois o move_sink_to_id
conterá muitos inteiros:
pacmd move-sink-input $move_sink_to_id $inactive_sink_id
Tente usar essa construção:
for input in $(pactl list short sink-inputs | awk '{print $1}'); do
pacmd move-sink-input $input $inactive_sink_id
done
Agora você tem certeza de que todas as entradas são movidas para o coletor de destino. Isso é importante, porque mesmo se você pausar um vídeo do YouTube, ele ainda permanece na lista de entrada por algum tempo. Você pode fazer algumas experiências com
pactl list short sink-inputs
e veja como o PulseAudio o vê.
Além disso, altero o nome inactive_sink_id
para target_sink_id
e apresentarei uma cobertura para a situação quando houver mais de dois coletores. Isso pode ser uma codificação rígida com base no nome do coletor. Você pode se referir a pias não apenas por id, mas também por nome, por exemplo.
pactl move-sink-input 65 alsa_output.pci-0000_00_1b.0.analog-stereo
Ou você pode apresentar uma lista de seleção possivelmente opcional que permitirá escolher onde você deseja mover as entradas.
Este comando produz uma lista clara de coletores com nomes na segunda coluna:
pactl list short sinks
E certifique-se de que o seu script esteja em execução assim que o PulseAudio puder ver sua TV afundar!
O script final pode ser assim:
#!/bin/bash
target_sink=alsa_output.pci-0000_00_1b.0.analog-stereo
pactl list short sinks | grep -- "$target_sink" || {
echo Sink "$target_sink" not found! >&2
exit 1
}
pacmd set-default-sink "$target_sink"
for input in $(pactl list short sink-inputs | awk '{print $1}'); do
pacmd move-sink-input "$input" "$target_sink"
done