Ainda outro script de comutador Sink
testado no Ubuntu 16.04
Mas este permite que você mude apenas o áudio do aplicativo desejado.
USO: Focalize o aplicativo que você deseja alterar seu coletor e execute este script. É isso!
Esse script detecta o aplicativo que está em foco, localiza todos os áudios reproduzidos a partir dele e os alterna para o próximo coletor disponível.
link
Explicando o script
Precisamos encontrar o PID do aplicativo em foco
Mas primeiro precisamos do xid
xprop -root _NET_ACTIVE_WINDOW
Em seguida, insira aqui $xid
para obter o pid da aplicação
xprop -id $xid _NET_WM_PID
Agora precisamos encontrar as entradas do coletor relacionadas a esse PID
Primeiramente vamos linearizar a saída do comando pacmd list-sink-inputs
para listar uma entrada de sumidouro por linha, mostrando seu índice, sink e pid na mesma linha
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
vamos analisá-lo passo a passo:
grep -E 'index:|sink:|process.id
apenas manter linhas que contenham index:
, sink:
ou process.id
tr '\n' ' '
une todas as linhas
tr -d '"'
remove todos os caracteres "
. Necessário para obter o pid sem aspas
sed -e 's/index:/\n/g'
substitui todas as ocorrências index:
por um novo caractere de linha \n
tail -n +2
remove a primeira linha porque está vazia
E o resultado é algo assim:
180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
Vamos analisar uma linha para entender o que isso significa:
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182
é o índice de entrada do coletor, 0
é o índice do coletor e 13752
no final, é o pid do aplicativo pertencente
Depois, percorremos cada linha
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
E, finalmente, filtre apenas o pid da entrada do coletor que corresponde ao pid do aplicativo focado
if [ $sink_input_pid = $app_pid ]; then
Extraindo dados
Com awk
, podemos obter os elementos de que precisamos
sink_input_index=$(echo $sink_input | awk '{print }')
current_sink_index=$(echo $sink_input | awk '{print }')
Obtenha o último índice de coletor, para saber quando a rotação dos coletores deve ser reiniciada a partir de 0.
pacmd list-sinks | awk '/index:/{print $NF}' | tail -n1
Encontrando a próxima pia
next_sink_index=$((($current_sink_index+1)%($sinks_length+1)))
E finalmente, mudar para o próximo sumidouro
pacmd move-sink-input $sink_input_index $next_sink_index
Nota:
Ao configurar a tecla de atalho, não consegui fazê-la funcionar com o gerenciador de atalhos do ubuntu.
Então eu tive que instalar compizconfig-settings-manager
sudo apt-get install compizconfig-settings-manager