O PulseAudio falha ao definir o perfil do cartão para 'a2dp_sink'. Como posso ver os logs e descobrir o que está errado?


31

Atualmente, instalei o ubuntu 16.04 e o a2dp costumava funcionar em uma instalação nova, que eu preferiria deixar como última opção. Quando o emparelhamento é apagado das configurações do bluetooth e emparelhado novamente, às vezes, ele consegue estar no perfil a2dp, mas se o fone de ouvido for desconectado e reconectado, os perfis a2dp não funcionarão mais (embora esteja no a2dp) depois de mudar para HSP / HSF e não consigo configurá-lo no a2dp.

Eu tentei fazer:

 pacmd set-card-profile <index> a2dp_sink

mas o seguinte erro aparece:

"Failed to set card profile to 'a2dp_sink'"

Sou bastante inexperiente no Linux, então não sei como obter logs ou o que procurar neles, mas obtive isso nas listas de pacmd:

Quando funciona:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 27
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: unknown)
    off: Off (priority 0, available: yes)
active profile: <a2dp_sink>
sinks:
    bluez_sink.50_C9_71_97_A1_86/#6: Jabra REVO a4.0.0
sources:
    bluez_sink.50_C9_71_97_A1_86.monitor/#10: Monitor of Jabra REVO a4.0.0
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

Quando isso não acontecer:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 25
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: yes)
    off: Off (priority 0, available: yes)
active profile: <off>
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: yes)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

E o módulo proprietário é:

name: <module-bluez5-device>
argument: <path=/org/bluez/hci0/dev_50_C9_71_97_A1_86>
used: 0
load once: no
properties:
    module.author = "João Paulo Rechi Vita"
    module.description = "BlueZ 5 Bluetooth audio sink and source"
    module.version = "8.0"

Eu já tentei modificar o /etc/bluetooth/audio.conf e instalar o blueman, mas não funcionou. Eu também tentei reinstalar o bluez e o pulseaudio, mas nada mudou.

Existe alguma maneira de saber o que está errado e corrigi-lo?


você poderia explicar de onde você obtém essas informações? e o que é índice? obrigado!
Ezequiel Moreno

Respostas:


23

Com base na linha "perfil ativo: <off>", o perfil de som não foi ativado.

Um programa fácil de usar para alterar o perfil é o pavucontrol. Você pode instalá-lo com sudo apt install pavucontrol -y. Em seguida, execute o pavucontrol na linha de comando ou Alt + F2 se você estiver no Kubuntu e inserindo o pavucontrol.

Selecione a guia de configuração e tente alterar o perfil dos fones de ouvido e veja se isso é atualizado para você. Parece haver um bug com o bluetooth a2dp ainda no linux e isso afeta duas das minhas instalações 16.04. Se já indicar A2DP, mude para OFF, desconecte o dispositivo no applet bluetooth e reconecte-o. Finalmente, prossiga para alterar o perfil novamente para A2DP e ele deve funcionar.

Você também pode tentar o seguinte na linha de comando e a guia deve completar a maior parte dele para você. Substitua o número 2 pelo número do índice atualmente nos dois comandos pacmd abaixo.

pacmd set-card-profile 2 off
bluetoothctl
disconnect 50:C9:71:97:A1:86
connect 50:C9:71:97:A1:86
pacmd set-card-profile 2 a2dp_sink

Para uma maneira mais complicada, mas automatizada, de fazer a mesma coisa para desligar o perfil e depois voltar para a2dp, mas não desconecte e conecte o dispositivo bluetooth

index=`pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'`;pacmd set-card-profile $index off; pacmd set-card-profile $index a2dp_sink 

Eu também deveria criar um script funcional, mas desleixado, para fazer a mesma coisa, mas também desconectar e reconectar os fones de ouvido bluetooth. Ele pega o índice do perfil porque o índice muda toda vez que o dispositivo é desconectado e reconectado. Esse código é codificado com a ID do dispositivo para os fones de ouvido listados acima

pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` off; sleep 2 ; echo -e "disconnect 50:C9:71:97:A1:86\n quit"|bluetoothctl;sleep 5; echo -e "connect 50:C9:71:97:A1:86\n quit"|bluetoothctl; sleep 5; pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` a2dp_sink

Durante o teste, terminei com os 5 segundos de suspensão em vez de 3 porque o dispositivo ainda não estava pronto para alterar o perfil de áudio. Seus resultados podem variar em alguns segundos +/- 5 segundos. Edite sobre uma possível armadilha. Descobri que ocasionalmente é necessário executar o script maior duas vezes antes de funcionar. Não tenho certeza se o aumento do tempo de sono ajudaria ou não, pois ainda não testei isso. Mas eu o usei em duas máquinas com a mesma marca de fones de ouvido BT e está fazendo o que deveria para automatizar o processo para obter o som funcionando nos fones de ouvido.

Eventualmente, o problema será corrigido no pacote bluetooth, mas parece continuar retornando em novos lançamentos do Ubuntu, bem como em outras versões do Linux. Mas de qualquer forma espero que ajude para você


>> Como posso ver os registos e descobrir o que está errado << Seria ótimo se você também pode responder a esta pergunta :)?
kitingChris

Definir som para fones de ouvido bluetooth no pavucontrol gui funciona para mim. Funciona melhor que a ferramenta de som do Gnome.
QkiZ

1
2 anos depois e esta resposta foi necessária para mim com o meu Sony WH-H900N.
Joakim Wimmerstedt 14/10/1918

(1 ano depois) usando o XFCE e o blueman-manager, muitas vezes bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffantes de clicar com o botão direito do mouse no menu Dispositivos para que eu mude o perfil de áudio para A2DP. Eu também ocasionalmente tenho que matar um processo filho de gerente blueman quando leva muito tempo para abrir o menu de dispositivos.
ericP 17/06

Obrigado por fornecer esses comandos. Esta é a única solução alternativa que funcionou com meu Ubuntu 18.04 e Sony WH-1000xm2. Eu o escrevi
egelev 12/11

19

Para permitir que o seu sistema seja detectado como um coletor A2DP (por exemplo, para reproduzir músicas do seu telefone pelos alto-falantes do computador), adicione Enable=Source,Sink,Media,Socketabaixo [General]de /etc/bluetooth/audio.conf.

Depois de fazer isso, reinicie o daemon bluetooth

systemctl restart bluetooth

Conecte seu dispositivo de fone de ouvido

bluetoothctl
connect <MAC>

Verifique seu cartão e defina o perfil

pacmd list-cards
pacmd set-card-profile <index> <profile>

1
Usando o ubuntu 16.04 /etc/bluetooth/audio.conf não existe, onde devo escrever esta linha?
thebeancounter

Isso corrigiu para mim no Debian Sid, obrigado!
Xerz

@thebeancounter adicionar o arquivo se ele não existe
Jimubao

ocasionalmente, se você perdeu a conexão com pia A2DP, tente "power off" em bluetoothctl e depois "systemctl restart Bluetooth" e depois que, em bluetoothctl "power on" e conectar o dispositivo novamente
Jimubao

1
Trabalhou no ARch / Manjaro! No entanto, o arquivo agora está localizado na /etc/bluetooth/main.confversão recente
MCMZL

13

Eu tive esse problema no Ubuntu 16.04.1 LTS e a aplicação da solução GDM encontrada em https://wiki.debian.org/BluetoothUser/a2dp resolveu o problema.

Especificamente, crie / edite /var/lib/gdm3/.config/pulse/client.confpara ler:

autospawn = no
daemon-binary = /bin/true

Então

sudo chown gdm:gdm /var/lib/gdm3/.config/pulse/client.conf

Eu também adicionei a /etc/pulse/default.pa

load-module module-switch-on-connect

Embora isso possa não ser estritamente necessário.

Após uma reinicialização, conectei-me via bluetooth manager e consegui alternar com êxito o perfil de áudio a2dp_sink.


Eu tive o problema de o bluez-firmware não estar disponível durante a primeira etapa do link, e o usuário gdm não pode ser encontrado. Além disso, a pasta gdm3 não existia, portanto era necessário criar esse caminho inteiro.
wordsforthewise

Eu fiz a segunda solução alternativa a partir desse link do Debian, funciona como um encanto!
Amfasis

5

lagerismi postou um script aqui na barra de lançamento com base na resposta de Jamie S.

  • Mude o endereço MAC do dispositivo na variável dentro do script! (pode ser encontrado em bluetoothctl-> Dispositivo)

  • Tornar o script executável chmod a-x bluetooth_headphone_reactivation.sh

Para execução automática na inicialização (funciona apenas se o fone de ouvido já estiver ligado):

  • Adicione o script aos scripts de início / desligamento no painel de controle do KDE

Para execução manual rápida:

  • Adicione uma entrada ao iniciador do aplicativo (você também pode definir um atalho de carregamento de teclas como "CTRL + ALT + H" e / ou fixar esse iniciador na barra da janela)

O script:

#!/bin/sh
device_mac='<your-devices-mac-address-here>'
pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` off
sleep 2 
echo "disconnect $device_mac\n quit"|bluetoothctl
sleep 5
echo "connect $device_mac\n quit"|bluetoothctl
sleep 5
pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` a2dp_sink

Você deve usar -ecom echo.
jarno

3

No Xubuntu 16.04.2,
use o blueman-manager:

  1. conectar -> desativar perfil
  2. reconectar -> definir perfil a2dp
  3. agora seu fone de ouvido está ok!

Meu script bash JBL

#!/bin/bash
#headset mac
mac="00:1D:DF:67:0A:29"
profile="a2dp"
# Special Bluetooth controller, default is empty
btMac=""
#connect|disconnect wait time
waitTime=5

macId="${mac//:/_}"
deviceId="bluez_card.$macId"

declare -A profiles
profiles['a2dp']='a2dp_sink'
profiles['hsp']='headset_head_unit'
profiles['off']='off'

function btCmd() {
    cmd="$1\nquit"
    [ ! -z "$btMac" ] && cmd="select $btMac\n$cmd"
    echo -e "$cmd" | bluetoothctl
}
function setProfile() {
    cmd="pactl set-card-profile $deviceId ${profiles[$1]}"
    echo $cmd
    $cmd
}
function btWaitConnect() {
    conState=$1
    for ((i=1;i<=$waitTime;++i)); do
        tmp="`btCmd "info $mac"|grep 'Connected: '`"
        [ ! -z "`echo "$tmp"|grep $conState`" ] && echo "$tmp" && return 0
        sleep 1s
    done
    echo "$tmp"
    return 1
}
function btConnect() {
    tmp="`btCmd "trust $mac\nconnect $mac" | grep -v 'NEW\|DEL\| quit'`"
    echo "$tmp"

    tmp="`btWaitConnect yes`"
    echo $tmp
    [ -z "`echo "$tmp" | grep yes`" ] && echo -e "Device $mac:\n\tConnected: fail." && return 1
    sleep 2s
    return 0
}
function btDisConnect() {
    tmp="`btCmd "disconnect $mac" | grep -v 'NEW\|DEL\| quit'`"
    echo "$tmp"

    tmp="`btWaitConnect no`"
    echo $tmp
    [ -z "`echo "$tmp" | grep no`" ] && echo -e "Device $mac:\n\tdisconnected: fail." && return 1
    sleep 1s
    return 0    
}


# controller
echo ""
btCtls="`btCmd list | grep '^Controller' | grep " $btMac"`"
echo -e "controller:\n$btCtls"
[ -z "$btCtls" -o ! -z "`echo "$btCtls" | grep "not available"`" ] && exit 1


# connect -> set off
echo ""
tmp="`btCmd paired-devices | grep '^Device' | grep " $mac"`"
echo -e "paired-devices:\n$tmp"
[ `echo "$tmp" | wc -l` != 1 ] && echo "Please pair the Bluetooth headset first: $mac" && exit 1
btConnect || exit $?
setProfile off

# reconnect -> set profile
btDisConnect || exit $?
btConnect || exit $?
setProfile $profile

Esta resposta e o @freespace one me ajudaram na minha instalação do i3 #
Luis Lobo Borobia

A atualização mais recente contém a configuração do coletor padrão, mas não sei se é necessário.
jarno

2

Portanto, se você estiver usando o Debian, poderá fazer o seguinte: Recusou-se a mudar o perfil para a2dp_sink: Não conectado

Problema

O fone de ouvido Bluetooth está conectado, mas o ALSA / PulseAudio falha ao captar o dispositivo conectado ou não há nenhum dispositivo para escolher. Isso acontece porque o GDM captura o coletor A2DP no início da sessão, pois o GDM precisa do pulseaudio na sessão gdm para acessibilidade. Por exemplo, o leitor de tela exige isso.

Solução

Para impedir que o GDM capture o coletor A2DP no início da sessão, edite /var/lib/gdm3/.config/pulse/client.conf(ou crie-o, se não existir):

autospawn = no
daemon-binary = /bin/true

Depois disso, você precisa conceder acesso a esse arquivo ao usuário Debian-gdm:

chown Debian-gdm:Debian-gdm /var/lib/gdm3/.config/pulse/client.conf

Você também precisará desativar a inicialização do pulseaudio:

rm /var/lib/gdm3/.config/systemd/user/sockets.target.wants/pulseaudio.socket

Para conectar automaticamente o a2dp em alguns dispositivos, adicione isto a /etc/pulse/default.pa:

load-module module-switch-on-connect

Reinicie.


Obrigado senhor por não seguir a multidão de cultos de carga e realmente explicar o problema! Eu posso confirmar que isso realmente ajuda na expansão do Debian.
Marcin Owsiany 08/07/19

1

Tenho certeza de que as respostas anteriores realmente tentam resolver a causa raiz do problema. Eu, no entanto, não consegui fazer nenhum deles funcionar. Eu tive exatamente o mesmo problema que o OP, mas no Linux Mint 17/18. Eu escrevi este script para conectar o Bluetooth de maneira confiável e usando o a2dp.

Copie / cole para posteridade, mas o problema é que ele replica exatamente o que o OP (e eu) teria que fazer na interface do usuário.

O script de Dominik não funcionaria de maneira confiável para mim, porque tentaria apenas uma vez configurar tudo. Eu teria que executá-lo várias vezes para fazê-lo funcionar. Foi com isso que acabei, que funciona sempre.

#!/bin/bash

MAC=$1
CARD=$(echo "${MAC}" | sed -e 's/:/_/g')
CARD="bluez_card.${CARD}"

$(pactl list | grep -qi 'Active Profile: a2dp_sink')
a2dpUsed=$?

# this loops until a2dp is _actually used_ on the given MAC.
while [ ${a2dpUsed} -ne 0 ];
do
    #
    echo "Restarting bluetooth."
    rfkill unblock bluetooth
    sudo service bluetooth restart
    sudo hciconfig hci0 up

    # reconnect
    echo -e "power on\nconnect ${MAC}" | bluetoothctl

    #
    echo "Waiting for headset to be connected..."
    btConnected=1

    while [ ${btConnected} -gt 0 ];
    do

        sleep .1
        $(bluetoothctl <<< "info ${MAC}" | grep -qi "Connected: yes")
        btConnected=$?
    done

    #
    echo "Bluetooth connected, waiting for profiles to register"

    cardFound=1
    while [ ${cardFound} -ne 0 ];
    do
        $(pactl list | grep -qi "${CARD}")
        cardFound=$?
    done

    #
    echo "Setting bluetooth a2dp profile"
    pactl set-card-profile ${CARD} a2dp_sink
    $(pactl list | grep -qi 'Active Profile: a2dp_sink')
    a2dpUsed=$?
done

echo "a2dp is working."

1

Conforme documentado aqui , é porque o GDM captura o coletor A2DP no início da sessão, pois o GDM precisa do pulseaudio na sessão gdm para acessibilidade.
Tente adicionar isso a "/var/lib/gdm3/.config/pulse/default.pa" ou crie-o e reinicie:

#!/usr/bin/pulseaudio -nF
#

# load system wide configuration
.include /etc/pulse/default.pa

### unload driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
  unload-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
  unload-module module-bluetooth-discover
.endif

0

Eu estava tentando configurar meu Bluetooth e sempre recebia esse erro.

Eu descobri que o problema era o Skype. Se eu tiver o Skype em execução, não consigo definir o a2dp_sinkperfil.

Portanto, se você se deparar com esse problema, veja se possui o Skype em execução e desative-o.


0
systemctl restart bluetooth
  • Abra as configurações de som (acessíveis clicando no ícone do alto-falante na bandeja)
  • Tente alterar o perfil de saída para A2DP Sink.
  • Se isso não funcionar, altere o dispositivo para Alto-falantes ou outra coisa e depois ligue-o novamente.
  • Normalmente, acho que posso definir meu perfil de saída

0

Eu escolhi para resolvê-lo com uma regra udev, como eu sou o único usuário do sistema, por isso $USER, $XAUTHORITYe $DISPLAYsão bem conhecidos.

Talvez isso seja útil para quem deseja uma solução definida em um único arquivo, executando o Ubuntu 18.04.1 LTS.

O gancho é acionado através do inputsubsistema porque o alto-falante parece estar totalmente inicializado nesse estágio.

# file: /etc/udev/rules.d/99-jbl-go2.rules
# fix JBL GO2 with CSR bluetooth: switch to a2dp profile upon connect
# byteborg 20190110
SUBSYSTEMS=="input", ACTION=="add", ATTRS{name}=="70:99:1C:41:C6:EB", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority", RUN+="/bin/su alpha -c '/usr/bin/pacmd set-card-profile bluez_card.70_99_1C_41_C6_EB a2dp_sink'"

O Archlinux Wiki menciona os dispositivos Cambridge Silicon Radio que fornecem o perfil errado no connect ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Posso reconhecer esse comportamento com um alto-falante bluetooth "JBL GO 2", comportando-se como já mencionado. o a2dp parece estar disponível pouco tempo após a conexão - talvez um problema de tempo?


0

Isso corrigiu um problema no perfil do conjunto de placas para mim: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1181106/comments/15

Citar:

1) Modify the /etc/bluetooth/audio.conf
================================

[General]
Enable = Source,Sink,Headset,Gateway,Control,Media
Disable = Socket

HFP=false

[A2DP]
SBCSources=1
MPEG12Sources=0

2) Check for pulseaudio module :
==========================

$ pactl list | grep -i module-bluetooth

If you dont have :
     module-bluetooth-policy
     module-bluetooth-discover
     module-bluetooth-device

Just do :
$ sudo apt-get install pulseaudio-module-bluetooth
$ pulseaudio -k
$ pactl load-module module-bluetooth-device
$ pactl load-module module-switch-on-connect

3) Connect the bluetooth headset
===========================

Use blueman to pair, and connect audio sink
Use pavucontrol to change for A2DP (even if blueman said "audio profile off")

Please confirm that works for you too.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.