Para usar sua máquina Ubuntu como um dispositivo Bluetooth a2dp, você deve primeiro configurá-lo para se registrar como um ponto de extremidade "a2dp sink".
O pacote bluez no Ubuntu (10.04 e acima) inclui um utilitário chamado sdptool que pode ser usado para verificar se um dispositivo Bluetooth está configurado como um coletor a2dp ou não. Aqui está a saída do sdptool executado contra o meu fone de ouvido Bluetooth (o endereço está tirando da caixa de diálogo "Bluetooth settings" no gnome-control-center):
$ sdptool search --bdaddr 00:18:16:3A:3B:D4 a2snk
Searching for a2snk on 00:18:16:3A:3B:D4 ...
Service RecHandle: 0x10002
Service Class ID List:
"Audio Sink" (0x110b)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 25
"AVDTP" (0x0019)
uint16: 0x102
Profile Descriptor List:
"Advanced Audio" (0x110d)
Version: 0x0102
$
e aqui está a saída quando executado contra minha máquina Ubuntu local:
$ sdptool search --bdaddr local a2snk
Searching for a2snk on FF:FF:FF:00:00:00 ...
$
Isso mostra que a máquina Ubuntu não está se anunciando como um coletor a2dp. No entanto, está se anunciando como uma fonte do a2dp:
$ sdptool search --bdaddr local a2src
Searching for a2src on FF:FF:FF:00:00:00 ...
Service Name: Audio Source
Service RecHandle: 0x10003
Service Class ID List:
"Audio Source" (0x110a)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 25
"AVDTP" (0x0019)
uint16: 0x102
Profile Descriptor List:
"Advanced Audio" (0x110d)
Version: 0x0102
Isso permite que a máquina Ubuntu seja emparelhada corretamente com o fone de ouvido como uma fonte de áudio, mas não permite usar a máquina Ubuntu como saída (dissipador) para áudio Bluetooth.
Se você editar /etc/bluetooth/audio.conf
, poderá ativar o suporte a dissipador a2dp adicionando esta linha abaixo da seção [General]
:
Enable=Source
Isso é chamado de contra-intuitivamente - já que o que estamos adicionando aqui é suporte a coletor de Bluetooth, não suporte de fonte - e em contradição com o comentário neste arquivo que afirma que todos os serviços implementados estão habilitados por padrão. : (
Depois de fazer essa alteração, você precisará reiniciar o bluetoothd executando sudo service bluetooth restart
.
Se você já fez o emparelhamento do seu dispositivo Android e Ubuntu enquanto tenta fazer isso funcionar, você precisará excluir o emparelhamento dos dois lados e re-emparelhá-los para que o Android reconheça o Ubuntu como um dispositivo de áudio disponível.
Depois de fazer isso, o dispositivo Android deve aparecer como um dispositivo de entrada no PulseAudio. Se o PulseAudio não detectar a nova fonte de áudio Bluetooth, talvez seja necessário instalar e carregar o módulo Bluetooth, na linha de comando:
sudo apt-get install pulseaudio-module-bluetooth
pactl load-module module-bluetooth-discover
Em seguida, você precisa informar ao PulseAudio para direcionar essa entrada de áudio para sua saída / coletor (como os alto-falantes ou um fone de ouvido Bluetooth) usando uma conexão de loopback (uma linha reta de uma fonte a um coletor).
As versões posteriores do PulseAudio podem ter a política do módulo-bluetooth incluída e talvez já tenha configurado um dispositivo de loopback para você, mas esse não parece ser o caso mais comum.
Uma forma semi-automática para configurar a conexão de loopback - se você também tem o programa GUI pavucontrol instalado - é simplesmente carregar o módulo de loopback e configurá-lo usando pavucontrol, já que o PulseAudio se lembrará do configurações. Carregando o módulo é feito a partir do comando usando pactl:
pactl load-module module-loopback
Não se preocupe se você ainda não ouviu nada ou se obtiver efeitos de feedback estranhos, precisamos informar ao dispositivo recém-criado de qual fonte obter entrada e qual afundar para enviar a saída para primeiro.
Abra o pavucontrol e abra sua guia Configuração. Verifique se o seu dispositivo Bluetooth aparece aqui (depois de emparelhar com ele usando o blueman-manager ou outra ferramenta Bluetooth) e o perfil está definido como A2DP. Mude para o separador Dispositivos de entrada e certifique-se de que o seu dispositivo aparece aqui também e não está sem som. Agora mude para a guia Gravação e faça com que a conexão de loopback recém-criada use seu dispositivo como uma fonte com a caixa de seleção ao lado do botão sem áudio. Alterne para a guia Reprodução para selecionar o coletor que a conexão de loopback deve usar da mesma maneira. Se o dispositivo de loopback não aparecer nas guias, verifique se todos os fluxos são exibidos usando a caixa de seleção na parte inferior de cada guia.
Agora você deve ouvir o áudio do seu dispositivo, se ele estiver tocando, nos alto-falantes ou no coletor de saída selecionado. Quando o dispositivo é desconectado, o dispositivo de loopback alterna para um coletor e fonte disponíveis, o que pode não ser desejável, portanto, certifique-se de desativar o dispositivo de loopback até precisar dele. A conexão de loopback restaurará o mesmo coletor / fonte na próxima vez que o mesmo dispositivo Bluetooth for conectado graças aos módulos de restauração do módulo - * -.
Se isso não funcionar , ou você não tiver o pavucontrol instalado, você pode configurar o loopback usando o seguinte método:
pactl load-module module-loopback source_dont_move=yes source=$BTSOURCE sink=$SINK
(Substitua $BTSOURCE
pelo nome da origem do seu dispositivo Bluetooth como visto por PulseAudio, por exemplo, bluez_source.14_DA_E9_2A_D7_57
; e substitua $SINK
pelo nome da saída do PulseAudio para o qual deseja enviar o fluxo de áudio, por exemplo: alsa_output.pci-0000_00_1b.0.analog-stereo
. Você pode deixar o argumento do coletor totalmente de lado e tê-lo em reserva para um coletor ativo e alterá-lo posteriormente via pavucontrol.)
- Você pode encontrar
$SINK
compactl list sinks
, exibido depois deName:
- Da mesma forma, você pode ver o
$BTSOURCE
compactl list sources
- O argumento
source_dont_move
impede que a conexão de loopback retorne a outra fonte de áudio quando o dispositivo Bluetooth é desconectado. Em vez disso, ele é removido e você terá que configurá-lo novamente na próxima vez.
Veja como seria um exemplo de um (Lembre-se de substituir o :
por _
no endereço Bluetooth!):
pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo
Se o carregamento do módulo de fallback falhar, tente remover o argumento source_dont_move=yes
, ele foi disponibilizado primeiro na versão 1.0.
Em seguida, tenha cuidado, no entanto, para remover essa conexão de loopback antes de soltar esse áudio ou, se, por exemplo, o microfone do seu laptop estiver ligado, você poderá receber um feedback muito ruim. Para descartar essa conexão de loopback manualmente quando terminar, execute:
pactl unload-module $(pactl list short modules | grep "loopback.*$BTSOURCE" | cut -f1)
Novamente, substitua $BTSOURCE
pelo nome da origem PulseAudio referente ao seu dispositivo Bluetooth. Você também pode descarregar o módulo usando o id retornado pelo comando load-module:
$ pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo
15
$ pactl unload-module 15
Referências:
- Postagem do blog descrevendo alguns detalhes sobre como está sendo corrigido no Ubuntu.