PulseAudio non riesce a impostare il profilo della scheda su "a2dp_sink". Come posso vedere i registri e capire cosa c'è che non va?


31

Al momento ho installato Ubuntu 16.04 e a2dp funzionava su una nuova installazione, che preferirei lasciare come ultima opzione. Quando l'associazione viene cancellata dalle impostazioni Bluetooth e viene nuovamente accoppiata a volte riesce a trovarsi sul profilo a2dp, ma se l'auricolare viene disconnesso e quindi ricollegato, i profili a2dp non funzionano più (anche se si dice che è su a2dp), funziona solo dopo il passaggio a HSP / HSF e quindi non riesco a impostarlo su a2dp.

Ho provato a fare:

 pacmd set-card-profile <index> a2dp_sink

ma viene visualizzato il seguente errore:

"Failed to set card profile to 'a2dp_sink'"

Sono abbastanza inesperto in Linux, quindi non so come ottenere i log o cosa cercare in essi, ma ho preso questo dalle schede di pacmd list:

Quando funziona:

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 non lo fa:

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 il modulo proprietario è:

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"

Ho già provato a modificare /etc/bluetooth/audio.conf e installare blueman ma non ha funzionato. Ho anche provato a reinstallare bluez e pulseaudio ma non è cambiato nulla.

Esiste un modo per sapere cosa c'è che non va e risolverlo?


potresti per favore spiegare da dove prendi queste informazioni? e cos'è l'indice? Grazie!
Ezequiel Moreno,

Risposte:


23

Sulla base della riga "profilo attivo: <off>" il profilo audio non è stato attivato.

Un programma facile da usare per cambiare il profilo è pavucontrol. Puoi installarlo con sudo apt install pavucontrol -y. Quindi eseguire pavucontrol dalla riga di comando o Alt + F2 se si è su Kubuntu e si accede a pavucontrol.

Seleziona la scheda di configurazione, quindi prova a modificare il profilo delle cuffie e verifica se si aggiorna. Sembra che ci sia un bug con bluetooth a2dp ancora in Linux e colpisce due delle mie installazioni 16.04. Se dice già A2DP cambiarlo in OFF, scollegare il dispositivo nell'applet Bluetooth, quindi ricollegarlo. Quindi, infine, procedi a ripristinare il profilo in A2DP e dovrebbe funzionare.

Puoi anche provare quanto segue sulla riga di comando e dovrebbe completare la maggior parte della scheda per te. Sostituisci il numero 2 con il numero indice attualmente per entrambi i comandi pacmd di seguito.

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

Per un modo più complicato ma automatizzato di fare la stessa cosa per spegnere e riaccendere il profilo e poi tornare a a2dp ma non disconnettere e connettere il 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 

Dovevo anche fare uno script funzionante ma sciatto per fare la stessa cosa, ma anche per scollegare e ricollegare le cuffie bluetooth. Afferra l'indice del profilo perché l'indice cambia ogni volta che il dispositivo viene disconnesso e ricollegato. Questo è codificato con l'ID del dispositivo per l'auricolare elencato sopra

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 i test ho finito con 5 secondi di sospensione invece di 3 perché il dispositivo non era ancora pronto per cambiare il profilo audio. I risultati possono variare di alcuni secondi +/- 5 secondi. Modifica per quanto riguarda un potenziale trabocchetto. Ho scoperto che a volte è necessario eseguire lo script più grande due volte prima che funzioni. Non sono sicuro se aumentare i tempi di sonno sarebbe di aiuto o meno poiché non l'ho provato. Ma l'ho usato su due macchine con la stessa marca di cuffie BT e sta facendo quello che dovrebbe per automatizzare il processo per far funzionare il suono sulle cuffie.

Alla fine il problema verrà corretto nel pacchetto bluetooth ma sembra continuare a tornare nelle nuove versioni di Ubuntu e in altre versioni di Linux. Ma spero comunque che ti aiuti


>> Come posso vedere i registri e capire cosa c'è che non va? << Sarebbe bello se tu potessi anche rispondere a questa domanda :)
kitingChris

Impostare l'audio su cuffie bluetooth in pavucontrol gui funziona per me. Funziona meglio dello strumento audio Gnome.
QkiZ,

1
2 anni dopo e questa risposta era necessaria per me con la mia Sony WH-H900N.
Joakim Wimmerstedt,

(1 anno dopo) usando XFCE e blueman-manager, spesso devo farlo bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffprima di fare clic con il tasto destro nel menu Dispositivi mi permetterà di cambiare il profilo audio in A2DP. Occasionalmente devo anche uccidere un processo blueman-manager per bambini quando ci vuole troppo tempo per visualizzare il menu dei dispositivi.
ericP

Grazie per aver fornito questi comandi. Questa è l'unica soluzione che ha funzionato con Ubuntu 18.04 e Sony WH-1000xm2. L'ho scritto su questo argomento
egelev

19

Per consentire al sistema di essere rilevato come un sink A2DP (ad es. Per riprodurre musica dal telefono tramite gli altoparlanti del computer), aggiungere Enable=Source,Sink,Media,Socketsotto [General]in /etc/bluetooth/audio.conf.

Dopo averlo fatto, riavvia il demone bluetooth

systemctl restart bluetooth

Collega il tuo dispositivo cuffie

bluetoothctl
connect <MAC>

Controlla la tua carta e imposta il profilo

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

1
Usando ubuntu 16.04 /etc/bluetooth/audio.conf non esiste, dove devo invece scrivere questa riga?
thebeancounter,

Questo mi ha risolto il problema su Debian Sid, grazie!
Xerz,

@thebeancounter aggiungi il file se non esiste
Jimubao

occasionalmente se hai perso la connessione con il lavandino A2DP, prova a "spegnere" in bluetoothctl e poi "systemctl restart bluetooth" e successivamente in bluetoothctl "power on" e ricollega il tuo dispositivo
Jimubao

1
Ha lavorato su ARch / Manjaro! Tuttavia, il file è ora disponibile /etc/bluetooth/main.confper la versione recente
MCMZL

13

Ho avuto questo problema su Ubuntu 16.04.1 LTS e risolto l'applicazione del lavoro GDM trovato in https://wiki.debian.org/BluetoothUser/a2dp .

In particolare, crea / modifica /var/lib/gdm3/.config/pulse/client.confper leggere:

autospawn = no
daemon-binary = /bin/true

Poi

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

Ho anche aggiunto a /etc/pulse/default.pa

load-module module-switch-on-connect

Anche se questo potrebbe non essere strettamente necessario.

Dopo un riavvio, mi sono collegato tramite il gestore bluetooth è stato in grado di cambiare correttamente il profilo audio a2dp_sink.


Ho avuto il problema che bluez-firmware non era disponibile durante il primo passaggio del collegamento, quindi non è stato possibile trovare l'utente gdm. Inoltre, la cartella gdm3 non esisteva, quindi è stato necessario creare l'intero percorso.
parole per lo stesso

Ho fatto la seconda soluzione da quel link da Debian, funziona come un incantesimo!
Amfasis,

5

lagerismi ha pubblicato una sceneggiatura qui su launchpad sulla base della risposta di Jamie S.

  • Cambia l'indirizzo MAC dei dispositivi nella variabile all'interno dello script! (può essere trovato con bluetoothctl-> Dispositivo)

  • Rendi eseguibile lo script chmod a-x bluetooth_headphone_reactivation.sh

Per l'esecuzione automatica all'avvio (funziona solo se l'auricolare è già acceso):

  • Aggiungi lo script agli script di avvio / arresto nel pannello di controllo di KDE

Per una rapida esecuzione manuale:

  • Aggiungi una voce all'avvio dell'applicazione (puoi anche impostare una scorciatoia da tastiera come "CTRL + ALT + H" e / o aggiungere questo avviatore alla barra della finestra)

Il copione:

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

Dovresti usare -econ echo.
jarno

3

Su Xubuntu 16.04.2
Usa blueman-manager:

  1. connetti -> disattiva il profilo
  2. riconnetti -> imposta profilo a2dp
  3. ora l'auricolare è ok!

Il mio 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

Questa risposta e @freespace uno mi hanno aiutato nella mia configurazione i3
Luis Lobo Borobia

L'ultimo aggiornamento contiene l'impostazione del sink predefinito, ma non lo so, se è necessario.
jarno,

2

Quindi, se stai usando Debian puoi fare quanto segue: Rifiutato di cambiare profilo in a2dp_sink: Non connesso

Problema

L'auricolare Bluetooth è collegato, ma ALSA / PulseAudio non riesce a prelevare il dispositivo collegato o non è necessario selezionare alcun dispositivo. Ciò accade perché GDM acquisisce il sink A2DP all'avvio della sessione, poiché GDM necessita di pulseaudio nella sessione gdm per l'accessibilità. Ad esempio, lo screen reader lo richiede.

Soluzione

Per impedire a GDM di acquisire il sink A2DP all'avvio della sessione, modificalo /var/lib/gdm3/.config/pulse/client.conf(o crealo, se non esiste):

autospawn = no
daemon-binary = /bin/true

Dopodiché devi concedere l'accesso a questo file all'utente Debian-gdm:

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

Dovrai anche disabilitare l'avvio di pulseaudio:

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

Per connettere automaticamente a2dp per alcuni dispositivi, aggiungi questo a /etc/pulse/default.pa:

load-module module-switch-on-connect

Reboot.


Grazie signore per non aver seguito la folla cult-cargo e aver effettivamente spiegato il problema! Posso confermare che questo aiuta davvero nel tratto Debian.
Marcin Owsiany,

1

Sono sicuro che le risposte precedenti in realtà provano ad affrontare la causa principale del problema. Tuttavia, non sono riuscito a far funzionare nessuno di loro. Ho avuto lo stesso identico problema di OP, ma su Linux Mint 17/18. Ho scritto questo script per connettere in modo affidabile il bluetooth e usare a2dp.

Copia / incolla per i posteri, ma il peso della questione è che replica esattamente ciò che l'OP (e io) dovrebbe fare nell'interfaccia utente.

La sceneggiatura di Dominik non funzionerebbe in modo affidabile per me, perché proverebbe solo una volta a impostare tutto. Dovrei eseguirlo più volte per farlo funzionare. Questo è quello che ho finito, che funziona ogni volta.

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

Come documentato qui , è perché GDM acquisisce il sink A2DP all'avvio della sessione, poiché GDM ha bisogno di pulseaudio nella sessione gdm per l'accessibilità.
Prova ad aggiungere questo a "/var/lib/gdm3/.config/pulse/default.pa" o crealo, quindi riavvia:

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

Stavo cercando di configurare il mio Bluetooth e ho sempre avuto questo errore.

Ho scoperto che il problema era Skype. Se ho Skype in esecuzione, non riesco a impostare il a2dp_sinkprofilo.

Quindi, se riscontri questo problema, vedi se hai Skype attivo e disattivalo.


0
systemctl restart bluetooth
  • Apri le impostazioni audio (accessibile facendo clic sull'icona dell'altoparlante nella barra delle applicazioni)
  • Prova a cambiare il profilo di output in Lavandino A2DP.
  • Se il problema persiste, cambia il tuo dispositivo in Altoparlanti o qualcos'altro e poi ripristinalo.
  • Di solito trovo che posso quindi impostare il mio profilo di destinazione

0

Ho scelto di risolverlo con una regola udev, in quanto sono l'unico utente del sistema, quindi $USER, $XAUTHORITYe $DISPLAYsono ben noti.

Forse questo è utile per qualcuno che desidera una soluzione definita in un singolo file, in esecuzione su Ubuntu 18.04.1 LTS.

L'hook viene attivato tramite il inputsottosistema perché l'altoparlante sembra essere completamente inizializzato in questa fase.

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

Il Wiki di Archlinux menziona i dispositivi Cambridge Silicon Radio che forniscono il profilo errato su connect ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Posso riconoscere questo comportamento con un altoparlante bluetooth "JBL GO 2", che si comporta male come già menzionato. a2dp sembra essere disponibile poco dopo la connessione - forse un problema di temporizzazione?


0

Questo risolto un problema con il profilo del set-card per me: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1181106/comments/15

Citazione:

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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.