O PulseAudio não define o perfil do cartão como 'a2dp_sink'. Como posso ver os logs e descobrir o que está errado?

20

Eu já instalei o ubuntu 16.04 e o a2dp costumava trabalhar em instalações novas, o que eu prefiro deixar como última opção. Quando o emparelhamento é apagado das configurações bluetooth e é emparelhado novamente, às vezes, ele consegue estar no perfil a2dp, mas se o headset for desconectado e reconectado, os perfis a2dp não funcionam mais (apesar de estar no a2dp), ele só funciona depois de mudar para HSP / HSF e, em seguida, não consigo configurá-lo em a2dp.

Eu tentei fazer:

 pacmd set-card-profile <index> a2dp_sink

mas o seguinte erro é exibido:

"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 recebi isso de pacmd list-cards:

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 acontece:

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?

    
por Juan Lopez 30.04.2016 / 03:19

10 respostas

17

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

Um programa que é fácil de usar para alterar o perfil é o pavucontrol. Você pode instalá-lo com sudo apt install pavucontrol -y . Em seguida, execute pavucontrol a partir da linha de comandos ou Alt + F2 se você estiver no Kubuntu e entrar no 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 bluetooth a2dp ainda no linux e afeta duas das minhas instalações 16.04. Se já diz A2DP alterá-lo para OFF, desconecte o dispositivo no miniaplicativo bluetooth e reconecte-o. Então, finalmente, prossiga para mudar o perfil de volta para A2DP e isso deve funcionar.

Você também pode tentar o seguinte na linha de comando e a guia deve completar a maior parte para você. Substitua o número 2 com o número de índice atualmente para os 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 o mesmo para desativar o perfil e voltar ao a2dp, mas não desconectar e conectar 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 fazer um script funcionando, mas desleixado, para fazer a mesma coisa, mas também desconectar e reconectar os fones de ouvido bluetooth. Ele captura o índice do perfil porque o índice muda sempre que o dispositivo é desconectado e reconectado. Isso é codificado com o 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, acabei com os 5 segundos para o sono, em vez de 3, porque o dispositivo não estava pronto para alterar o perfil de áudio ainda. Seus resultados podem variar em alguns segundos +/- 5 segundos. Edite sobre uma armadilha em potencial. Eu descobri que ocasionalmente é necessário executar o script maior duas vezes antes de funcionar. Eu não tenho certeza se aumentar os tempos de sono ajudaria ou não, como eu não testei isso. Mas eu usei-o em duas máquinas com a mesma marca de fones de ouvido BT e está fazendo o que é necessário para automatizar o processo para que o som funcione 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 por você

    
por Jamie S. 16.05.2016 / 22:10
11

Eu tive esse problema no Ubuntu 16.04.1 LTS, e aplicando o trabalho do GDM encontrado no link resolveu.

Especificamente, crie / edite /var/lib/gdm3/.config/pulse/client.conf para 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 a reinicialização, eu conectei via gerenciador bluetooth foi capaz de mudar com sucesso o perfil de áudio para a2dp_sink .

    
por freespace 07.02.2017 / 16:26
11

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

Depois de fazer isso, reinicie o daemon do 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>
    
por Jimubao 18.10.2017 / 23:17
4

lagerismi postou um script aqui no launchpad baseado em a resposta por Jamie S.

  • Altere o endereço MAC dos dispositivos na variável dentro do script! (pode ser encontrado com bluetoothctl - > Device)

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

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

  • Adicione o script aos scripts de inicialização / desligamento no painel de controle do KDE

Para execução manual rápida:

  • Adicione uma entrada ao aplicativo inicial (você também pode definir um atalho de teclado 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
    
por Dominik Steinberger 05.03.2017 / 12:13
2

no Xubuntu 16.04.2
Use blueman-manager:

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

Meu script bash da 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
    
por takeseem 05.05.2017 / 11:29
1

Então, se você estiver usando Debian você pode 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 não consegue captar o dispositivo conectado ou não há dispositivo para escolher. Isso acontece porque o GDM captura o coletor A2DP no início da sessão, pois o GDM precisa pulseaudio na sessão do gdm para acessibilidade. Por exemplo, o leitor de tela exige isso.

Solução

Para evitar 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 ele não existir):

autospawn = no
daemon-binary = /bin/true

Depois disso, você tem que conceder acesso a este arquivo para o 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 para alguns dispositivos, adicione isso a /etc/pulse/default.pa :

load-module module-switch-on-connect

Reinicie.

    
por Je Suis Alrick 30.05.2018 / 19:30
0

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

Descobri que o problema era o Skype. Se eu tiver o Skype em execução, não consigo definir a2dp_sink profile.

Então, se você encontrar esse problema, veja se o Skype está sendo executado e desligue-o.

    
por Rafael Basquens 19.10.2017 / 18:07
0

Tenho certeza de que as respostas anteriores realmente tentam abordar a causa raiz do problema. Eu, no entanto, não consegui fazer com que nenhum deles funcionasse. Eu tive exatamente o mesmo problema que o OP, mas no Linux Mint 17/18. Eu escrevi este script para conectar o bluetooth e usar a2dp com segurança.

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

O script de Dominik não funcionaria de forma confiável para mim, porque ele só tentaria uma vez configurar tudo. Eu teria que executá-lo várias vezes para fazê-lo funcionar. Isso é o que eu acabei, isso funciona toda vez.

#!/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."
    
por Knetic 07.04.2018 / 19:09
0
systemctl restart bluetooth
  • Abra as configurações de som (acessíveis clicando no ícone do alto-falante na bandeja)
  • Experimente e altere o perfil de saída para o coletor A2DP.
  • Se isso não funcionar, altere seu dispositivo para Alto-falantes ou qualquer outra coisa e, em seguida, mude novamente.
  • Eu geralmente acho que posso definir meu perfil de saída
por Arthur 12.04.2018 / 15:01
-1

Como documentado em aqui , é porque o GDM captura A2DP no início da sessão, pois o GDM precisa pulseaudio no gdm sessão de acessibilidade.
Tente adicionar isto a "/var/lib/gdm3/.config/pulse/default.pa", ou crie-o, depois reinicie:

! / usr / bin / pulseaudio -nF

#

configuração ampla do sistema de carga

.include /etc/pulse/default.pa

descarrega módulos de driver para hardware Bluetooth

.ifexists module-bluetooth-policy.so   descarregar módulo módulo-bluetooth-policy .endif

.ifexists module-bluetooth-discover.so   Descarregar módulo-bluetooth-discover .endif

    
por Mohamed Amine 17.02.2018 / 20:25