PulseAudio ne parvient pas à définir le profil de la carte sur «a2dp_sink». Comment puis-je voir les journaux et comprendre ce qui ne va pas?


31

J'ai actuellement installé Ubuntu 16.04 et a2dp utilisé pour travailler sur une nouvelle installation, que je préférerais laisser comme dernière option. Lorsque le couplage est effacé des paramètres Bluetooth et est couplé à nouveau, il parvient parfois à être sur le profil a2dp, mais si le casque est déconnecté puis reconnecté, les profils a2dp ne fonctionnent plus (bien qu'il soit dit sur a2dp), cela ne fonctionne que après être passé à HSP / HSF et je ne peux pas le définir sur a2dp.

J'ai essayé de faire:

 pacmd set-card-profile <index> a2dp_sink

mais l'erreur suivante apparaît:

"Failed to set card profile to 'a2dp_sink'"

Je suis assez inexpérimenté sous Linux, donc je ne sais pas comment obtenir des journaux ou quoi y chercher, mais je l'ai obtenu de pacmd list-cards:

Quand ça marche:

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:

Quand ce n'est pas le cas:

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:

Et le module propriétaire est:

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"

J'ai déjà essayé de modifier /etc/bluetooth/audio.conf et d'installer blueman mais cela n'a pas fonctionné. J'ai également essayé de réinstaller bluez et pulseaudio mais rien n'a changé.

Existe-t-il un moyen de savoir ce qui ne va pas et de le réparer?


pourriez-vous expliquer d'où vous tenez cette information? et qu'est-ce que l'index? Merci!
Ezequiel Moreno

Réponses:


23

Sur la base de la ligne "profil actif: <off>", le profil sonore ne s'est pas activé.

Pavucontrol est un programme facile à utiliser pour modifier le profil. Vous pouvez l'installer avec sudo apt install pavucontrol -y. Exécutez ensuite pavucontrol à partir de la ligne de commande ou Alt + F2 si vous êtes sur Kubuntu et entrez dans pavucontrol.

Sélectionnez l'onglet de configuration, puis essayez de changer le profil de vos écouteurs et voyez si cela se met à jour pour vous. Il semble y avoir un bug avec le bluetooth a2dp toujours sous linux et cela affecte deux de mes installations 16.04. S'il indique déjà A2DP, désactivez-le, déconnectez l'appareil dans l'applet Bluetooth, puis reconnectez-le. Ensuite, passez enfin à changer le profil en A2DP et cela devrait fonctionner.

Vous pouvez également essayer ce qui suit sur la ligne de commande et il devrait être terminé pour la plupart. Remplacez le numéro 2 par le numéro d'index actuellement pour les deux commandes pacmd ci-dessous.

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

Pour un moyen plus compliqué mais automatisé de faire la même chose pour désactiver le profil puis revenir à a2dp mais ne pas déconnecter et connecter le périphérique 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 

Je devais également faire un script fonctionnel mais bâclé pour faire la même chose mais aussi déconnecter et reconnecter les écouteurs bluetooth. Il récupère l'index de profil car l'index change chaque fois que le périphérique est déconnecté et reconnecté. Il est codé en dur avec l'ID de l'appareil pour le casque que vous avez indiqué ci-dessus

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

Pendant les tests, je me suis retrouvé avec les 5 secondes de sommeil au lieu de 3 car l'appareil n'était pas encore prêt à changer le profil audio. Vos résultats peuvent varier de quelques secondes +/- 5 secondes. Modifier concernant un écueil potentiel. J'ai trouvé qu'il était parfois nécessaire d'exécuter le plus gros script deux fois avant qu'il ne fonctionne. Je ne sais pas si l'augmentation du temps de sommeil aiderait ou non, car je n'ai pas testé cela. Mais je l'ai utilisé sur deux machines avec la même marque d'écouteurs BT et il fait ce qu'il est censé pour automatiser le processus pour que le son fonctionne sur les écouteurs.

Finalement, le problème sera corrigé dans le package bluetooth mais semble continuer à revenir dans les nouvelles versions d'Ubuntu ainsi que dans d'autres versions de Linux. Mais espérons que cela vous aide


>> Comment puis-je voir les journaux et comprendre ce qui ne va pas? << Ce serait bien si vous pouviez également répondre à cette question :)
kitingChris

Définir le son sur les écouteurs Bluetooth dans pavucontrol gui fonctionne pour moi. Fonctionne mieux que l'outil de son Gnome.
QkiZ

1
2 ans plus tard et cette réponse était nécessaire pour moi avec mon Sony WH-H900N.
Joakim Wimmerstedt

(1 an plus tard) en utilisant XFCE et blueman-manager, je dois souvent bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffavant de cliquer avec le bouton droit dans le menu Périphériques me permettra de basculer le profil audio sur A2DP. Je dois aussi occasionnellement tuer un processus de blueman-manager enfant lorsqu'il prend trop de temps pour faire apparaître le menu des appareils.
ericP

Merci d'avoir fourni ces commandes. C'est la seule solution de contournement qui fonctionnait avec mon Ubuntu 18.04 et Sony WH-1000xm2. Je l'ai écrit sur cet essentiel: gist.github.com/egelev/2e6b57d5a8ba62cf6df6fff2878c3fd4
egelev

19

Afin de permettre à votre système à détecter comme un puits A2DP (par exemple pour jouer de la musique à partir de votre téléphone via vos haut - parleurs), ajouter Enable=Source,Sink,Media,Socketsous [General]dans /etc/bluetooth/audio.conf.

Après cela, redémarrez le démon Bluetooth

systemctl restart bluetooth

Connectez votre casque

bluetoothctl
connect <MAC>

Vérifiez votre carte et définissez votre profil

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

1
L'utilisation d'ubuntu 16.04 /etc/bluetooth/audio.conf n'existe pas, où dois-je écrire cette ligne à la place?
thebeancounter

Cela m'a corrigé sur Debian Sid, merci!
Xerz

@thebeancounter ajouter le fichier s'il n'existe pas
Jimubao

de temps en temps si vous avez perdu la connexion avec le récepteur A2DP, essayez "power off" dans bluetoothctl puis "systemctl restart bluetooth" et après cela dans bluetoothctl "power on" et reconnectez votre appareil
Jimubao

1
A travaillé sur ARch / Manjaro! Pourtant, le fichier est maintenant localisé à /etc/bluetooth/main.confla version récente
MCMZL

13

J'ai eu ce problème sur Ubuntu 16.04.1 LTS, et l'application du travail GDM trouvé dans https://wiki.debian.org/BluetoothUser/a2dp l'a résolu.

Plus précisément, créez / modifiez /var/lib/gdm3/.config/pulse/client.confpour lire:

autospawn = no
daemon-binary = /bin/true

ensuite

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

J'ai également ajouté à /etc/pulse/default.pa

load-module module-switch-on-connect

Bien que cela ne soit pas strictement nécessaire.

Après un redémarrage, je me suis connecté via le gestionnaire Bluetooth pour réussir à basculer le profil audio sur a2dp_sink.


J'ai eu le problème que le firmware bluez n'était pas disponible lors de la première étape du lien, alors l'utilisateur gdm est introuvable. De plus, le dossier gdm3 n'existait pas, il fallait donc créer tout ce chemin.
wordsforhewise

J'ai fait la deuxième solution de contournement à partir de ce lien depuis Debian, fonctionne comme un charme!
Amfasis

5

lagerismi a posté un script ici sur Launchpad basé sur la réponse de Jamie S.

  • Changez l'adresse MAC des appareils dans la variable à l'intérieur du script! (peut être trouvé avec bluetoothctl-> Appareil)

  • Rendre le script exécutable chmod a-x bluetooth_headphone_reactivation.sh

Pour une exécution automatique au démarrage (ne fonctionne que si le casque est déjà allumé):

  • Ajoutez le script aux scripts de démarrage / arrêt dans le panneau de configuration de KDE

Pour une exécution manuelle rapide:

  • Ajoutez une entrée au démarreur d'application (vous pouvez également définir un raccourci clavier comme "CTRL + ALT + H" et / ou épingler ce démarreur à la barre de fenêtre)

Le 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

Vous devez utiliser -eavec echo.
jarno

3

Sur Xubuntu 16.04.2
Utilisez blueman-manager:

  1. connecter -> désactiver le profil
  2. reconnecter -> définir le profil a2dp
  3. maintenant votre casque est ok!

Mon 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

Cette réponse et @freespace m'ont aidé dans ma configuration d'i3
Luis Lobo Borobia

La dernière mise à jour contient la configuration du récepteur par défaut, mais je ne sais pas si c'est nécessaire.
jarno

2

Donc, si vous utilisez Debian, vous pouvez faire ce qui suit: Refus de basculer le profil vers a2dp_sink: Non connecté

Problème

Le casque Bluetooth est connecté, mais ALSA / PulseAudio ne parvient pas à prendre l'appareil connecté ou il n'y a pas d'appareil à prendre. Cela se produit car GDM capture le récepteur A2DP au début de la session, car GDM a besoin de pulseaudio dans la session gdm pour l'accessibilité. Par exemple, le lecteur d'écran l'exige.

Solution

Afin d'empêcher GDM de capturer le récepteur A2DP au démarrage de la session, modifiez-le /var/lib/gdm3/.config/pulse/client.conf(ou créez-le, s'il n'existe pas):

autospawn = no
daemon-binary = /bin/true

Après cela, vous devez accorder l'accès à ce fichier à l'utilisateur Debian-gdm:

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

Vous devrez également désactiver le démarrage de pulseaudio:

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

Afin de connecter automatiquement a2dp pour certains appareils, ajoutez ceci à /etc/pulse/default.pa:

load-module module-switch-on-connect

Redémarrer.


Merci monsieur de ne pas avoir suivi la foule culte du cargo et d'expliquer le problème! Je peux confirmer que cela aide réellement à étirer Debian.
Marcin Owsiany

1

Je suis sûr que les réponses précédentes tentent réellement de résoudre la cause première du problème. Cependant, je n'ai pas réussi à faire travailler l'un d'entre eux. J'ai eu exactement le même problème que OP, mais sur Linux Mint 17/18. J'ai écrit ce script pour me connecter de manière fiable au bluetooth et utiliser a2dp.

Copier / coller pour la postérité, mais le gros du problème est qu'il reproduit exactement ce que l'OP (et moi) devrait faire dans l'interface utilisateur.

Le script de Dominik ne fonctionnerait pas de manière fiable pour moi, car il n'essaierait qu'une seule fois de tout configurer. Je devrais l'exécuter plusieurs fois pour le faire fonctionner. C'est ce avec quoi je me suis retrouvé, qui fonctionne à chaque fois.

#!/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

Comme indiqué ici , c'est parce que GDM capture le récepteur A2DP au démarrage de la session, car GDM a besoin de pulseaudio dans la session gdm pour l'accessibilité.
Essayez d'ajouter ceci à "/var/lib/gdm3/.config/pulse/default.pa", ou créez-le, puis redémarrez:

#!/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

J'essayais de configurer mon Bluetooth et j'ai toujours eu cette erreur.

J'ai trouvé que le problème était Skype. Si j'ai Skype en cours d'exécution, je ne peux pas définir de a2dp_sinkprofil.

Donc, si vous rencontrez ce problème, voyez si vous avez Skype en cours d'exécution et désactivez-le.


0
systemctl restart bluetooth
  • Ouvrez les paramètres sonores (accessibles en cliquant sur l'icône du haut-parleur dans le bac)
  • Essayez de changer le profil de sortie en récepteur A2DP.
  • Si cela ne fonctionne pas, changez votre appareil en haut-parleurs ou autre chose, puis rallumez-le.
  • Je trouve généralement que je peux ensuite définir mon profil de sortie

0

J'ai choisi de le résoudre avec une règle udev, car je suis le seul utilisateur du système, donc $USER, $XAUTHORITYet je suis $DISPLAYbien connu.

Peut-être que cela est utile pour quelqu'un qui veut une solution définie dans un seul fichier, fonctionnant sur Ubuntu 18.04.1 LTS.

Le crochet est déclenché via le inputsous - système car le haut-parleur semble être complètement initialisé à ce stade.

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

Le Wiki Archlinux mentionne les appareils Cambridge Silicon Radio fournissant le mauvais profil lors de la connexion ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Je peux reconnaître ce comportement avec un haut-parleur Bluetooth "JBL GO 2", se comportant mal comme déjà mentionné. a2dp semble être disponible peu de temps après la connexion - peut-être un problème de timing?


0

Cela a résolu un problème de profil de carte pour moi: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1181106/comments/15

Citation:

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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.