web-dev-qa-db-fra.com

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?

J'ai actuellement installé Ubuntu 16.04 et a2dp fonctionnaient sur une nouvelle installation, ce que je préférerais laisser comme dernière option. Lorsque le couplage est effacé des paramètres Bluetooth et est de nouveau couplé, 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), il ne fonctionne plus. après avoir basculé sur HSP/HSF, je ne parviens 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 ne connais pas beaucoup Linux, donc je ne sais pas comment obtenir des journaux ni quoi y chercher, mais je l’ai obtenue 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é.

Est-il possible de savoir ce qui ne va pas et de le réparer?

24
Juan Lopez

Basé sur la ligne "profil actif: <off>", le profil sonore n’a pas été activé.

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

Sélectionnez l'onglet de configuration, puis essayez de modifier le profil de votre casque et voyez si cela se met à jour pour vous. Il semble y avoir un bug avec Bluetooth A2DP toujours sous Linux et cela affecte deux de mes installations 16.04. Si A2DP indique déjà le désactiver, déconnectez le périphérique dans l'applet Bluetooth, puis reconnectez-le. Enfin, modifiez le profil en A2DP et cela devrait fonctionner.

Vous pouvez également essayer ce qui suit sur la ligne de commande et vous devriez la compléter pour vous. Remplacez le numéro 2 par le numéro d'index des 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 une manière plus compliquée mais automatisée de faire la même chose pour cycler 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 aussi faire un script qui marche mais qui manque pour faire la même chose, mais aussi pour déconnecter et reconnecter les écouteurs Bluetooth. Il saisit l'index du profil car il change chaque fois que le périphérique est déconnecté et reconnecté. Ceci est codé en dur avec l’identifiant de périphérique du casque que vous avez énuméré 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 5 secondes pour dormir au lieu de 3 parce que l'appareil n'était pas encore prêt à changer le profil audio. Vos résultats peuvent varier de quelques secondes +/- 5 secondes. Modifier en ce qui concerne un piège potentiel. J'ai constaté qu'il est parfois nécessaire d'exécuter le script plus important deux fois avant que cela ne fonctionne. Je ne sais pas si augmenter les temps de sommeil aiderait ou non, car je n'ai pas testé cela. Mais je l'ai utilisé sur deux ordinateurs avec la même marque d'écouteurs BT et il fait ce qu'il est supposé d'automatiser pour que le son fonctionne correctement.

Finalement, le problème sera corrigé dans le package bluetooth mais semble revenir régulièrement dans les nouvelles versions d'Ubuntu ainsi que dans d'autres versions de Linux. Mais de toute façon, espérons que cela vous aide

21
Jamie S.

Pour permettre à votre système d'être détecté en tant que récepteur A2DP (par exemple, pour lire de la musique à partir de votre téléphone via les haut-parleurs de votre ordinateur), ajoutez Enable=Source,Sink,Media,Socket sous [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>
13
Jimubao

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/éditez /var/lib/gdm3/.config/Pulse/client.conf comme suit:

autospawn = no
daemon-binary = /bin/true

Ensuite

Sudo chown gdm:gdm /var/lib/gdm3/.config/Pulse/client.conf

J'ai aussi ajouté à /etc/Pulse/default.pa

load-module module-switch-on-connect

Bien que cela puisse ne pas être strictement nécessaire.

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

13
freespace

lagerismi posté un script ici sur le tableau de bord basé sur la réponse de Jamie S.

  • Changez l'adresse MAC du périphérique dans la variable à l'intérieur du script! (peut être trouvé avec bluetoothctl -> Device)

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

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

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

Pour une exécution manuelle rapide:

  • Ajouter une entrée dans l'application-starter (vous pouvez également définir un raccourci clavier comme "CTRL + ALT + H" et/ou épingler cette icône dans la barre de fenêtre)

Le scénario:

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

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 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
3
takeseem

Comme indiqué dans ici , C’est parce que GDM capture le récepteur A2DP au début de la session, car GDM a besoin de pulseaudio dans la session gdm pour plus d’accessibilité.
Essayez d’ajouter ceci dans "/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
1
Mohamed Amine

Donc, si vous utilisez Debian, vous pouvez faire ce qui suit: Refusé de passer du profil à a2dp_sink: Non connecté

Problème

Le casque Bluetooth est connecté, mais ALSA/PulseAudio ne parvient pas à saisir le périphérique connecté ou n’a pas de périphérique à sélectionner. Cela est dû au fait que GDM capture le récepteur A2DP au début de la session, car GDM a besoin de pulseaudio dans la session gdm pour être accessible. Par exemple, le lecteur d'écran le requiert.

Solution

Afin d'empêcher GDM de capturer le récepteur A2DP au début de la session, éditez /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 périphériques, ajoutez ceci à /etc/Pulse/default.pa:

load-module module-switch-on-connect

Redémarrez.

1
Je Suis Alrick

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

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

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

0
Rafael Basquens
systemctl restart bluetooth
  • Paramètres de son ouverts (accessibles en cliquant sur l'icône du haut-parleur dans la barre d'état)
  • 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
Arthur

Je suis sûr que les réponses précédentes essayent réellement de s'attaquer à la cause première du problème. Cependant, je n’ai pu en faire travailler aucun d’eux. J'ai eu exactement le même problème que OP, mais sous Linux Mint 17/18. J'ai écrit ce script pour obtenir de manière fiable la connexion Bluetooth et l’utilisation de a2dp.

Copier/coller pour la postérité, mais le plus gros du problème est qu’il reproduit exactement ce que le PO (et moi-même) aurait à faire dans l’UI.

Le script de Dominik ne fonctionnerait pas de manière fiable pour moi, car il essaierait une seule fois de tout configurer. Je devrais l'exécuter plusieurs fois pour que cela fonctionne. C'est ce que j'ai fini avec, ça marche à 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."
0
Knetic

J'ai choisi de le résoudre avec une règle udev, car je suis le seul utilisateur du système, donc $USER, $XAUTHORITY et $DISPLAY sont bien connus.

Ceci est peut-être utile pour quelqu'un qui veut une solution définie dans un seul fichier, fonctionnant sous Ubuntu 18.04.1 LTS.

Le raccordement est déclenché via le sous-système input 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 que les appareils Cambridge Silicon Radio fournissent 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", qui se comporte mal comme déjà mentionné. A2DP semble être disponible peu de temps après la connexion - peut-être un problème de synchronisation?

0
byteborg