52 votes

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

J'ai installé ubuntu 16.04 et a2dp fonctionnait sur une nouvelle installation, ce que je préfère laisser comme dernière option. Lorsque l'appairage est effacé des paramètres bluetooth et qu'il est à nouveau appairé, il parvient parfois à être sur le profil a2dp, mais si l'oreillette est déconnectée puis reconnectée, le profil a2dp ne fonctionne plus (bien qu'il indique qu'il est sur a2dp), il ne fonctionne qu'après avoir basculé sur HSP/HSF et je suis alors incapable de le régler sur a2dp.

J'ai essayé de le 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é en Linux et je ne sais donc pas comment obtenir les logs ou ce qu'il faut y chercher, mais j'ai obtenu ceci 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 de propriété 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é.

Y a-t-il un moyen de savoir ce qui ne va pas et d'y remédier ?

44voto

Jimubao Points 541

Afin de permettre à votre système d'être détecté en tant que récepteur A2DP (par exemple, pour écouter de la musique depuis votre téléphone via les haut-parleurs de votre ordinateur), ajoutez Enable=Source,Sink,Media,Socket sous [General] en /etc/bluetooth/audio.conf .

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

systemctl restart bluetooth

Connectez votre casque d'écoute

bluetoothctl
connect <MAC>

Vérifiez votre carte et définissez votre profil

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

32voto

Jamie S. Points 321

Sur la base de la ligne "profil actif : <off>", le profil sonore n'a pas été activé.

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

Sélectionnez l'onglet de configuration et essayez de changer le profil de vos écouteurs pour voir si cela vous convient. Il semble qu'il y ait encore un bug avec bluetooth a2dp dans linux et il affecte deux de mes installations 16.04. S'il est déjà indiqué A2DP, mettez-le sur OFF, déconnectez l'appareil dans l'applet bluetooth, puis reconnectez-le. Ensuite, procédez au changement du profil en A2DP et cela devrait fonctionner.

Vous pouvez également essayer de suivre la procédure suivante sur la ligne de commande, qui devrait vous permettre d'effectuer la plupart des opérations à l'aide d'un tabulateur. Remplacez le chiffre 2 par le numéro d'index actuel 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 une façon plus compliquée mais automatisée de faire la même chose pour faire passer le profil à off puis revenir à a2dp mais sans faire la déconnexion et la connexion de l'appareil 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 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 du profil car l'index change à chaque fois que l'appareil est déconnecté et reconnecté. Il est codé en dur avec l'identifiant de l'écouteur que vous avez listé 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

Lors des tests, j'ai fini par utiliser 5 secondes pour la mise en veille 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. Modification concernant un piège potentiel. J'ai constaté qu'il est parfois nécessaire d'exécuter le grand script deux fois avant qu'il ne fonctionne. Je ne sais pas si l'augmentation des temps de sommeil aiderait ou non car je ne l'ai pas testé. Mais je l'ai utilisé sur deux machines avec la même marque d'écouteurs BT et il fait ce qu'il est supposé faire pour automatiser le processus pour que le son fonctionne sur les écouteurs.

Le problème finira par être corrigé dans le paquetage Bluetooth, mais il semble revenir régulièrement dans les nouvelles versions d'Ubuntu ainsi que dans d'autres versions de Linux. Quoi qu'il en soit, j'espère que cela vous aidera.

14voto

Vince Bowdren Points 198

J'ai eu ce problème sur Ubuntu 16.04.1 LTS, et en appliquant la solution de contournement GDM trouvée dans https://wiki.debian.org/BluetoothUser/a2dp l'a résolu.

Plus précisément, créer/modifier /var/lib/gdm3/.config/pulse/client.conf à lire :

autospawn = no
daemon-binary = /bin/true

Dans ce cas

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 forcément nécessaire.

Après un redémarrage, je me suis connecté via le gestionnaire bluetooth et j'ai pu changer le profil audio en a2dp_sink .

5voto

lagerismi a posté un script ici sur launchpad sur la base de la réponse de Jamie S.

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

  • 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à allumé) :

  • Ajouter le script au démarrage/arrêt script dans le panneau de contrôle 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>' # From bluetoothctl info
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

4voto

takeseem Points 51

Sur Xubuntu 16.04.2
Utilisez blueman-manager :

  1. connecter -> désactiver le profil
  2. reconnect -> set profile a2dp
  3. Votre casque est maintenant en bon état !

Mon JBL bash script

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X