Per usare la tua macchina Ubuntu come dispositivo Bluetooth a2dp, devi prima configurarla per registrarti come endpoint "a2dp sink".
Il pacchetto bluez in Ubuntu (10.04 e versioni successive) include un'utilità chiamata sdptool che può essere utilizzata per verificare se un dispositivo Bluetooth è configurato come sink a2dp o meno. Ecco l'output di sdptool eseguito sul mio auricolare Bluetooth (l'indirizzo viene preso dalla finestra di dialogo "Impostazioni Bluetooth" nel centro di controllo gnome):
$ sdptool search --bdaddr 00:18:16:3A:3B:D4 a2snk
Searching for a2snk on 00:18:16:3A:3B:D4 ...
Service RecHandle: 0x10002
Service Class ID List:
"Audio Sink" (0x110b)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 25
"AVDTP" (0x0019)
uint16: 0x102
Profile Descriptor List:
"Advanced Audio" (0x110d)
Version: 0x0102
$
ed ecco l'output quando eseguito contro la mia macchina Ubuntu locale:
$ sdptool search --bdaddr local a2snk
Searching for a2snk on FF:FF:FF:00:00:00 ...
$
Ciò dimostra che la macchina Ubuntu non sta pubblicizzando se stessa come un sink a2dp. Si sta pubblicizzando come fonte a2dp:
$ sdptool search --bdaddr local a2src
Searching for a2src on FF:FF:FF:00:00:00 ...
Service Name: Audio Source
Service RecHandle: 0x10003
Service Class ID List:
"Audio Source" (0x110a)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 25
"AVDTP" (0x0019)
uint16: 0x102
Profile Descriptor List:
"Advanced Audio" (0x110d)
Version: 0x0102
Ciò consente alla macchina Ubuntu di accoppiarsi correttamente con l'auricolare come sorgente audio, ma non consente di utilizzare la macchina Ubuntu come uscita (sink) per l'audio Bluetooth.
Se modifichi /etc/bluetooth/audio.conf
, puoi abilitare il supporto del sink a2dp aggiungendo questa riga sotto la [General]
sezione:
Enable=Source
Questo nome è entrambi controintuitivamente - poiché ciò che stiamo aggiungendo qui è il supporto del sink Bluetooth, non il supporto del sorgente - e in contraddizione con il commento in questo file che afferma che tutti i servizi implementati sono abilitati per impostazione predefinita. :(
Dopo aver apportato questa modifica, dovrai riavviare bluetoothd eseguendo sudo service bluetooth restart
.
Se hai già abbinato il tuo dispositivo Android e il tuo computer Ubuntu durante il tentativo di ottenere questo lavoro, dovrai eliminare l'associazione su entrambi i lati e ricollegarli per consentire ad Android di riconoscere Ubuntu come dispositivo audio disponibile.
Una volta fatto questo, il dispositivo Android dovrebbe apparire come dispositivo di input in PulseAudio. Se PulseAudio non rileva la nuova sorgente audio Bluetooth, potrebbe essere necessario installare e caricare il modulo Bluetooth, dalla riga di comando:
sudo apt-get install pulseaudio-module-bluetooth
pactl load-module module-bluetooth-discover
Quindi devi dire a PulseAudio di instradare questo ingresso audio all'uscita / al lavandino (come i tuoi altoparlanti o una cuffia Bluetooth) usando una connessione loopback (una linea retta da una sorgente a un lavandino).
Le versioni successive di PulseAudio potrebbero includere la politica del modulo bluetooth inclusa e potrebbe aver già impostato un dispositivo di loopback per te, ma questo non sembra essere il caso più comune.
Un modo semi-automatico per impostare la connessione loopback - se hai anche installato il programma GUI pavucontrol - è semplicemente caricare il modulo loopback e configurarlo usando pavucontrol, poiché PulseAudio ricorderà le impostazioni. Il caricamento del modulo viene eseguito dal comando utilizzando pactl:
pactl load-module module-loopback
Non temere se non senti ancora nulla o se ricevi strani effetti di feedback, dobbiamo dire al dispositivo appena creato da quale sorgente ricevere input e da quale sink inviare prima l'output.
Apri pavucontrol e apri la sua scheda Configurazione. Assicurati che il tuo dispositivo Bluetooth venga visualizzato qui (dopo aver eseguito l'associazione con blueman-manager o un altro strumento Bluetooth) e che il profilo sia impostato su A2DP. Passa alla scheda Dispositivi di input e assicurati che anche il tuo dispositivo venga visualizzato qui e non sia disattivato. Ora passa alla scheda Registrazione e fai in modo che la connessione di loopback appena creata utilizzi il tuo dispositivo come sorgente con la casella di selezione accanto al pulsante Disattiva. Passare alla scheda Riproduzione per selezionare il sink che la connessione di loopback dovrebbe usare allo stesso modo. Se il dispositivo di loopback non viene visualizzato nelle schede, assicurarsi che tutti gli stream siano visualizzati utilizzando la casella di selezione nella parte inferiore di ciascuna scheda.
Ora dovresti ascoltare l'audio dal tuo dispositivo, se è in riproduzione, negli altoparlanti o in qualsiasi sink di uscita selezionato. Quando il dispositivo viene disconnesso, il dispositivo di loopback tornerà a un sink e a una sorgente disponibili, il che potrebbe non essere desiderabile, quindi assicurati di disattivare il dispositivo di loopback fino a quando non è necessario. La connessione loopback ripristinerà lo stesso sink / source alla successiva connessione dello stesso dispositivo Bluetooth grazie al modulo - * - moduli di ripristino.
Se non funziona o se non hai installato pavucontrol, puoi invece impostare il loopback usando il seguente metodo:
pactl load-module module-loopback source_dont_move=yes source=$BTSOURCE sink=$SINK
(Sostituisci $BTSOURCE
con il nome della sorgente per il tuo dispositivo Bluetooth come visto da PulseAudio, ad esempio bluez_source.14_DA_E9_2A_D7_57
; e sostituisci $SINK
con il nome dell'uscita PulseAudio a cui desideri inviare il flusso audio, ad esempio:. alsa_output.pci-0000_00_1b.0.analog-stereo
Puoi tralasciare completamente l'argomento sink e farlo fallback in un lavandino attivo e cambiarlo successivamente tramite pavucontrol.)
- Puoi trovarlo
$SINK
con pactl list sinks
, è mostrato dopoName:
- Allo stesso modo puoi vedere il
$BTSOURCE
conpactl list sources
- L'
source_dont_move
argomento impedisce alla connessione di loopback di ricadere su un'altra sorgente audio quando il dispositivo Bluetooth è disconnesso. Viene invece rimosso e dovrai ripristinarlo la prossima volta.
Ecco come sarebbe un esempio (ricordati di sostituire il :
con _
nell'indirizzo Bluetooth!):
pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo
Se il caricamento del modulo fallback non riesce, provare a rimuovere l' source_dont_move=yes
argomento, è stato reso disponibile prima nella versione 1.0. Quindi fai attenzione a rimuovere questa connessione di loopback prima di eliminare questo audio o, ad esempio, se il microfono del tuo laptop è disattivato, potresti ricevere un feedback molto negativo. Per interrompere manualmente questa connessione di loopback al termine, eseguire:
pactl unload-module $(pactl list short modules | grep "loopback.*$BTSOURCE" | cut -f1)
Ancora una volta, sostituisci $BTSOURCE
con il nome della sorgente PulseAudio che si riferisce al tuo dispositivo Bluetooth. È inoltre possibile scaricare il modulo utilizzando l'id restituito dal comando load-module:
$ pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo
15
$ pactl unload-module 15
Riferimenti:
- Post di blog che delinea alcuni dettagli su come questo problema viene risolto in Ubuntu.