Autorandr mas para dispositivos de áudio?

1

Meu ThinkPad T450s roda o Manjaro. Como um scrum master, eu freqüentemente me movo entre minha mesa com dois monitores externos, salas de reunião sem exibições e salas de reunião com um monitor externo. Instalei autorandr para que o laptop configure automaticamente meus espaços de trabalho de acordo com o hardware disponível. Eu amo tanto!

Mas também adoraria uma solução semelhante para áudio. Quando na minha mesa, eu quero que os dispositivos de retorno para ambas as entradas sejam meu fone de ouvido Bluetooth Jabra e que a saída seja meu pseudo-dispositivo de "saída simultânea para todos os dispositivos", mas em salas de reunião usualmente conecto um USB (Jabra ou Logitech) dispositivo de viva-voz da sala de reunião - e, em seguida, preciso entrar no painel de controle de volume e configurar os dispositivos padrão.

Se eu pudesse automatizar tudo, para que dispositivos recém-conectados fossem automaticamente selecionados como entrada / saída alternativa, isso seria tão interessante!

Advertência : Para ganhar a recompensa, a resposta deve descrever uma solução que funcione automaticamente quando o hardware estiver conectado / desconectado. Seria aceitável disparar um script para ser executado sempre que autorandr fosse executado (mas autorandr não possui tal capacidade de correção).

Editar: Inspirado pela resposta da @ telcoM, agora posso incluir a lista de fontes e repositórios reconhecidos pelo meu sistema (exceto aqueles nas salas de reunião às quais não estou atualmente conectado):

$ pactl list | grep -B 2 'ame:' | grep -A 2 'Sink #'
Sink #0
    State: SUSPENDED
    Name: alsa_output.pci-0000_00_1b.0.analog-stereo
--
Sink #1
    State: SUSPENDED
    Name: combined
--
Sink #43
    State: SUSPENDED
    Name: alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
--
Sink #93
    State: SUSPENDED
    Name: alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1

e também

$ pactl list | grep -B 2 'ame:' | grep -A 2 'Source #'
Source #0
    State: SUSPENDED
    Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
--
Source #1
    State: SUSPENDED
    Name: alsa_input.pci-0000_00_1b.0.analog-stereo
--
Source #2
    State: SUSPENDED
    Name: combined.monitor
--
Source #46
    State: SUSPENDED
    Name: alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono.monitor
--
Source #47
    State: SUSPENDED
    Name: alsa_input.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
--
Source #97
    State: SUSPENDED
    Name: alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1.monitor
    
por KlaymenDK 07.08.2018 / 10:15

2 respostas

0

Oho! Encontrei os comandos corretos para obter os nomes das entradas e saídas! Isto é principalmente de esta resposta para outra pergunta , mas realmente o crédito vai para telcoM por me indicar pactl .

$ pactl list short sources
0   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
1   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
2   combined.monitor    module-combine-sink.c   s16le 2ch 44100Hz   RUNNING
144 alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono.monitor    module-alsa-card.c  s16le 1ch 16000Hz   RUNNING
145 alsa_input.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono module-alsa-card.c  s16le 1ch 16000Hz   RUNNING
152 alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1.monitor module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

e

$ pactl list short sinks
0   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
1   combined    module-combine-sink.c   s16le 2ch 44100Hz   RUNNING
136 alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono    module-alsa-card.c  s16le 1ch 16000Hz   RUNNING
143 alsa_output.pci-0000_00_03.0.hdmi-stereo-extra1 module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

Isso me permite definir as fontes:

$ pactl set-default-source alsa_input.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
$ pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo

E também os sumidouros:

$ pactl set-default-sink alsa_output.usb-GN_Netcom_A_S_Jabra_PRO_9470_026D0D98A805-00.analog-mono
$ pactl set-default-sink combined

Esses comandos, então, podem colocar " scripts de gancho " para que autorandr seja acionado. Eu só preciso conectar os dispositivos de áudio USB antes dos cabos de vídeo, e tudo será incrível!

    
por 16.08.2018 / 12:11
1

Por padrão, o Pulseaudio lembra qual dispositivo de saída cada fonte de reprodução estava associada, e também para dispositivos de entrada e software de gravação. Esta é a principal fonte de associações de dispositivos para a baunilha Pulseaudio.

O dispositivo de retorno é usado apenas quando, por ex. uma fonte de reprodução não tem registro de associação anterior ou o dispositivo associado anteriormente não está mais disponível.

Pelo menos o KDE possui uma caixa de diálogo de configurações multimídia que você pode usar para definir uma ordem de prioridade para seus dispositivos de entrada / saída de áudio, separadamente para cada tipo de entrada / saída de áudio (comunicações vs. áudio / vídeo / gravação, por exemplo) . Isso parece modificar o comportamento do Pulseaudio.

Este blog e o utilitário paswitch mencionado podem ser úteis para você:

link

O repositório Git para paswitch : link

Anteriormente, eu tinha um script para essa finalidade, mas paswitch é melhor, pois alterna fontes ativas e lembradas anteriormente para uma nova saída, além de alternar a saída padrão / de fallback. Infelizmente, só lida com o lado da saída.

Para mudar clientes ativos que já começaram a usar um microfone específico, você precisará fazer algo assim:

pacmd set-default-source "$SOURCEID"
if ! pacmd list-source-outputs | head -1 | grep -q "^0 source output"
then
    # active input clients, switch them to new mic
    for idx in $(pacmd list-source-outputs | awk '/index:/{print $2;}')
    do
        # sources include monitor sources that cannot be moved
        pacmd move-source-output $idx $SOURCEID >/dev/null
    done
fi

Isso primeiro altera o microfone padrão para o especificado em $SOURCEID e, em seguida, move todos os aplicativos ativos para esse novo microfone.

Mas se um aplicativo foi executado antes de usar um dispositivo de origem de áudio diferente e essa fonte ainda estiver disponível no sistema, o Pulseaudio conectará por padrão a fonte antiga em vez da nova fonte padrão, a menos que seu recurso de persistência seja alternado off.

    
por 14.08.2018 / 11:00

Tags