PulseAudio no puede configurar el perfil de la tarjeta en 'a2dp_sink'. ¿Cómo puedo ver los registros y descubrir qué está mal?

31

Actualmente he instalado ubuntu 16.04 y a2dp solía funcionar en una instalación nueva, que preferiría dejar como última opción. Cuando el emparejamiento se borra de la configuración de bluetooth y se empareja de nuevo, a veces se las arregla para estar en el perfil de a2dp, pero si el auricular se desconecta y luego se vuelve a conectar, los perfiles de a2dp ya no funcionan (aunque dice que está en a2dp), solo funciona después de cambiar a HSP / HSF y luego no puedo configurarlo en a2dp.

He intentado hacer:

 pacmd set-card-profile <index> a2dp_sink

pero sale el siguiente error:

"Failed to set card profile to 'a2dp_sink'"

No tengo mucha experiencia en Linux, así que no sé cómo obtener registros o qué buscar en ellos, pero lo obtuve de las tarjetas de lista de pacmd:

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

Cuando no lo hace:

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:

Y el módulo propietario es:

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"

Ya he intentado modificar /etc/bluetooth/audio.conf e instalar blueman pero no funcionó. También intenté reinstalar bluez y pulseaudio pero nada cambió.

¿Hay alguna manera de saber qué está mal y solucionarlo?

Juan lopez
fuente
¿podría explicar de dónde obtiene esta información? y que es index? ¡Gracias!
Ezequiel Moreno
Consulte aquí askubuntu.com/a/817926/33292
pylover el

Respuestas:

23

Según la línea "perfil activo: <off>", el perfil de sonido no se activó.

Un programa que es fácil de usar para cambiar el perfil es pavucontrol. Puedes instalarlo con sudo apt install pavucontrol -y. Luego ejecute pavucontrol desde la línea de comando o Alt + F2 si está en Kubuntu y está ingresando a pavucontrol.

Seleccione la pestaña de configuración y luego intente cambiar el perfil de sus auriculares y vea si eso se actualiza por usted. Parece que hay un error con bluetooth a2dp todavía en Linux y afecta a dos de mis instalaciones 16.04. Si ya dice A2DP cámbielo a APAGADO, desconecte el dispositivo en el applet bluetooth, luego vuelva a conectarlo. Luego, finalmente, vuelva a cambiar el perfil a A2DP y debería funcionar.

También puede intentar lo siguiente en la línea de comando y debería completar la pestaña la mayor parte por usted. Reemplace el número 2 con el número de índice actualmente para los dos comandos de pacmd a continuación.

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 una forma más complicada pero automatizada de hacer lo mismo para apagar y volver el perfil a a2dp pero no desconectar y conectar el 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 

También tenía que hacer un script funcional pero descuidado para hacer lo mismo, pero también desconectar y volver a conectar los auriculares bluetooth. Toma el índice del perfil porque el índice cambia cada vez que el dispositivo se desconecta y se vuelve a conectar. Esto está codificado con la identificación del dispositivo para los auriculares que enumeró anteriormente

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 las pruebas terminé con los 5 segundos para dormir en lugar de 3 porque el dispositivo aún no estaba listo para cambiar el perfil de audio. Sus resultados pueden variar en unos segundos +/- 5 segundos. Edite con respecto a una posible trampa. Descubrí que ocasionalmente es necesario ejecutar el script más grande dos veces antes de que funcione. No estoy seguro de si ayudaría o no a aumentar los tiempos de sueño ya que no lo he probado. Pero lo he usado en dos máquinas con la misma marca de auriculares BT y está haciendo lo que se supone que debe hacer para automatizar el proceso para que el sonido funcione en los auriculares.

Finalmente, el problema se solucionará en el paquete bluetooth, pero parece que sigue apareciendo en las nuevas versiones de Ubuntu, así como en otras versiones de Linux. Pero de todos modos espero que eso te ayude

Jamie S.
fuente
>> ¿Cómo puedo ver los registros y averiguar qué está mal? << Sería genial si también pudieras responder esta pregunta :)
kitingChris
Establecer sonido para auriculares bluetooth en pavucontrol gui me funciona. Funciona mejor que la herramienta de sonido Gnome.
QkiZ
1
2 años después y esta respuesta fue necesaria para mí con mi Sony WH-H900N.
Joakim Wimmerstedt
(1 año después) usando XFCE y blueman-manager, frecuentemente tengo que hacerlo bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffantes de hacer clic derecho en el menú Dispositivos me permitirá cambiar el perfil de audio a A2DP. También ocasionalmente tengo que matar un proceso de blueman-manager infantil cuando se tarda demasiado en abrir el menú de dispositivos.
ericP
Gracias por proporcionar estos comandos. Esta es la única solución que funcionó con mi Ubuntu 18.04 y Sony WH-1000xm2. Lo he escrito en esta esencia: gist.github.com/egelev/2e6b57d5a8ba62cf6df6fff2878c3fd4
egelev
19

Con el fin de permitir que su sistema detectado como un disipador de A2DP (por ejemplo, para reproducir música desde su teléfono a través de los altavoces del ordenador), añadir Enable=Source,Sink,Media,Socketdebajo [General]de /etc/bluetooth/audio.conf.

Después de hacer esto, reinicia el bluetooth daemon

systemctl restart bluetooth

Conecte su dispositivo de auriculares

bluetoothctl
connect <MAC>

Verifique su tarjeta y establezca el perfil

pacmd list-cards
pacmd set-card-profile <index> <profile>
Jimubao
fuente
1
Usar ubuntu 16.04 /etc/bluetooth/audio.conf no se elimina, ¿dónde debería escribir esta línea?
thebeancounter
Esto me lo arregló en Debian Sid, ¡gracias!
Xerz
@thebeancounter agregue el archivo si no existe
Jimubao
ocasionalmente, si perdió la conexión con el receptor A2DP, intente "apagar" en bluetoothctl y luego "systemctl reiniciar bluetooth" y luego en bluetoothctl "encender" y conectar su dispositivo nuevamente
Jimubao
1
Trabajó en ARch / Manjaro! Sin embargo, el archivo ahora se encuentra en /etc/bluetooth/main.confla versión más reciente
MCMZL
13

Tuve este problema en Ubuntu 16.04.1 LTS, y la aplicación de la solución GDM que se encuentra en https://wiki.debian.org/BluetoothUser/a2dp lo resolvió.

Específicamente, crear / editar /var/lib/gdm3/.config/pulse/client.confpara leer:

autospawn = no
daemon-binary = /bin/true

Luego

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

También agregué a /etc/pulse/default.pa

load-module module-switch-on-connect

Aunque esto podría no ser estrictamente necesario.

Después de un reinicio, me conecté a través del administrador de Bluetooth y pude cambiar con éxito el perfil de audio a2dp_sink.

espacio libre
fuente
Tuve el problema de que bluez-firmware no estaba disponible durante el primer paso en el enlace, luego no se puede encontrar el usuario gdm. Además, la carpeta gdm3 no existía, por lo que tuve que crear esa ruta completa.
wordsforthewise
Hice la segunda solución desde ese enlace desde Debian, ¡funciona de maravilla!
Enfasis
5

lagerismi publicó un script aquí en launchpad basado en la respuesta de Jamie S.

  • ¡Cambie la dirección MAC de los dispositivos en la variable dentro del script! (se puede encontrar con bluetoothctl-> Dispositivo)

  • Hacer el script ejecutable chmod a-x bluetooth_headphone_reactivation.sh

Para la ejecución automática al inicio (solo funciona si el auricular ya está encendido):

  • Agregue el script a los scripts de inicio / apagado en el panel de control de KDE

Para una ejecución manual rápida:

  • Agregue una entrada al inicio de la aplicación (también puede establecer un atajo de teclado como "CTRL + ALT + H" y / o anclar este inicio a la barra de la ventana)

La secuencia de comandos:

#!/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
Dominik Steinberger
fuente
Deberías usar -econ echo.
jarno
3

En Xubuntu 16.04.2
Use blueman-manager:

  1. conectar -> establecer perfil desactivado
  2. volver a conectar -> establecer perfil a2dp
  3. ahora tu auricular está bien!

Mi script de JBL bash

#!/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
Taeem
fuente
Esta respuesta y @freespace one me ayudaron en mi configuración de i3
Luis Lobo Borobia
La última actualización contiene la configuración del sumidero predeterminado, pero no sé si es necesario.
jarno
2

Entonces, si está utilizando Debian, puede hacer lo siguiente: Se niega a cambiar el perfil a a2dp_sink: no conectado

Problema

Los auriculares Bluetooth están conectados, pero ALSA / PulseAudio no puede recoger el dispositivo conectado o no hay ningún dispositivo para elegir. Esto sucede porque GDM captura el sumidero A2DP al inicio de la sesión, ya que GDM necesita pulseaudio en la sesión de gdm para poder acceder. Por ejemplo, el lector de pantalla lo requiere.

Solución

Para evitar que GDM capture el receptor A2DP al inicio de la sesión, edítelo /var/lib/gdm3/.config/pulse/client.conf(o créelo, si no existe):

autospawn = no
daemon-binary = /bin/true

Después de eso, debe otorgar acceso a este archivo al usuario de Debian-gdm:

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

También deberá deshabilitar el inicio de pulseaudio:

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

Para conectar automáticamente a2dp para algunos dispositivos, agregue esto a /etc/pulse/default.pa:

load-module module-switch-on-connect

Reiniciar.

Je Suis Alrick
fuente
¡Gracias señor por no seguir a la multitud de culto de carga y realmente explicar el problema! Puedo confirmar que esto realmente ayuda en el estiramiento de Debian.
Marcin Owsiany
1

Estoy seguro de que las respuestas anteriores en realidad tratan de abordar la causa raíz del problema. Yo, sin embargo, no pude hacer que ninguno de ellos trabajara. Tuve exactamente el mismo problema que OP, pero en Linux Mint 17/18. Escribí este script para conectar de manera confiable Bluetooth y usar a2dp.

Copiar / pegar para la posteridad, pero lo peor del asunto es que replica exactamente lo que el OP (y yo) tendría que hacer en la interfaz de usuario.

El guión de Dominik no funcionaría de manera confiable para mí, porque solo intentaría una vez configurar todo. Tendría que ejecutarlo varias veces para que funcione. Esto es con lo que terminé, que funciona cada 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."
Knetic
fuente
1

Como se documenta aquí , se debe a que GDM captura el sumidero A2DP al inicio de la sesión, ya que GDM necesita pulseaudio en la sesión de gdm para poder acceder.
Intente agregar esto a "/var/lib/gdm3/.config/pulse/default.pa", o créelo, luego 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
Mohamed Amine
fuente
0

Intenté configurar mi Bluetooth y siempre recibí este error.

Encontré que el problema era Skype. Si tengo Skype en ejecución, no puedo configurar el a2dp_sinkperfil.

Entonces, si se encuentra con este problema, vea si tiene Skype ejecutándose y apáguelo.

Rafael Vascos
fuente
0
systemctl restart bluetooth
  • Abra la configuración de sonido (accesible haciendo clic en el icono del altavoz en la bandeja)
  • Intente y cambie el Perfil de salida a A2DP Sink.
  • Si eso no funciona, cambie su dispositivo a Altavoces u otra cosa y luego vuelva a encenderlo.
  • Por lo general, encuentro que puedo configurar mi perfil de salida
Arturo
fuente
0

Elegí a solucionarlo con una regla udev, ya que soy el único usuario del sistema, por lo que $USER, $XAUTHORITYy $DISPLAYson bien conocidos.

Quizás esto sea útil para alguien que quiera una solución definida en un solo archivo, que se ejecute en Ubuntu 18.04.1 LTS.

El gancho se activa a través del inputsubsistema porque el altavoz parece estar completamente inicializado en esta etapa.

# 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'"

Archlinux Wiki menciona dispositivos Cambridge Silicon Radio que proporcionan un perfil incorrecto en connect ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Puedo reconocer este comportamiento con un altavoz bluetooth "JBL GO 2", que se comporta mal como ya se mencionó. a2dp parece estar disponible poco tiempo después de la conexión, ¿quizás un problema de tiempo?

byteborg
fuente
0

Esto solucionó un problema de set-card-profile para mí: 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.
xdevs23
fuente