bluetoothd (BlueZ 5) non si collega a nessun dispositivo


9

RISOLTO. Modificato: vedi sotto.

Penso di aver setacciato Internet abbastanza a lungo per questo problema. È stato chiesto molte volte, ma nessuna delle soluzioni funziona per me. Ho eseguito l'aggiornamento a BlueZ 5 perché alla fine voglio poter utilizzare le sue capacità a basso consumo energetico. In questo momento, però, non riesco nemmeno a far accoppiare i miei dispositivi. Non riesco a usare una GUI perché alla fine sarà per un sistema Linux incorporato. Pertanto, penso di non poter usare bluetoothctl, perché richiede una sessione interattiva. (Potrei sbagliarmi su questo.) Quindi voglio che tutto sia attraverso BASH, C o Python, in questo ordine. Inoltre, poiché deve essere automatizzato, l'associazione e la connessione dovranno essere avviate dal dispositivo Bluetooth, non dalla scatola di Linux. Infine, tutti i dispositivi devono utilizzare il profilo a2dp.

Sembra che ci siano molti approcci, ma non sono chiaro dove finisca l'uno e inizi l'altro:

APPROCCIO 1:

a) $ sudo bluetoothd -d -n #runs bluetoothd in modalità dettagliata

b) $ hciconfig hci1 up# accende il dispositivo

$ hciconfig -a #vedi le proprietà del dispositivo

    Type: BR/EDR  Bus: USB
    BD Address: 00:02:72:C5:D8:E0  ACL MTU: 1021:8  SCO MTU: 64:1
    UP RUNNING PSCAN ISCAN 
    RX bytes:32875 acl:761 sco:0 events:1037 errors:0
    TX bytes:20178 acl:780 sco:0 commands:329 errors:0
    Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
    Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
    Link policy: RSWITCH SNIFF 
    Link mode: SLAVE ACCEPT 
    Name: 'Adapter-1'
    Class: 0x00010c
    Service Classes: Unspecified
    Device Class: Computer, Laptop
    HCI Version: 4.0 (0x6)  Revision: 0x1000
    LMP Version: 4.0 (0x6)  Subversion: 0x220e
    Manufacturer: Broadcom Corporation (15)

c) provare ad accoppiare dal dispositivo.

Risultato: da bluetoothd:

bluetoothd[5359]: src/adapter.c:connected_callback() hci1 device 70:72:3C:62:49:7F connected eir_len 15
bluetoothd[5359]: src/adapter.c:user_confirm_request_callback() hci1 70:72:3C:62:49:7F confirm_hint 1
bluetoothd[5359]: src/device.c:new_auth() Requesting agent authentication for 70:72:3C:62:49:7F
** bluetoothd[5359]: No agent available for request type 2
** bluetoothd[5359]: device_confirm_passkey: Operation not permitted 
bluetoothd[5359]: src/adapter.c:btd_adapter_confirm_reply() hci1 addr 70:72:3C:62:49:7F success 0
bluetoothd[5359]: src/adapter.c:bonding_attempt_complete() hci1 bdaddr 70:72:3C:62:49:7F type 0 status 0x5
bluetoothd[5359]: src/device.c:device_bonding_complete() bonding (nil) status 0x05
bluetoothd[5359]: src/device.c:device_bonding_failed() status 5
bluetoothd[5359]: src/adapter.c:resume_discovery() 
bluetoothd[5359]: src/adapter.c:dev_disconnected() Device 70:72:3C:62:49:7F disconnected, reason 3
bluetoothd[5359]: src/adapter.c:adapter_remove_connection() 
bluetoothd[5359]: src/adapter.c:bonding_attempt_complete() hci1 bdaddr 70:72:3C:62:49:7F type 0 status 0xe
bluetoothd[5359]: src/device.c:device_bonding_complete() bonding (nil) status 0x0e
bluetoothd[5359]: src/device.c:device_bonding_failed() status 14
bluetoothd[5359]: src/adapter.c:resume_discovery()

Il dispositivo dice Impossibile accoppiare con Adapter-1 a causa di un PIN o passkey errati.

Sulla base delle risposte speciali sopra riportate, ho esaminato il motivo per cui non esisteva un agente. Che cos'è un agente? Chissà, ma ho dedotto che era l'intermediario tra il mio dispositivo e il demone bluetooth.

d) $ ../bluey-5.15/test/simple-agent # Ho anche provato a usare sudo con questi comandi

o $ ../bluey-5.15/test/simple-agent hci1

Questo è uno script Python che gestisce le richieste di accoppiamento in arrivo. In caso di successo, prova anche a "fidarsi" e "connettersi"

produzione: Agent registered

e) quindi riprovo ad accoppiare dal dispositivo.

output dell'agente semplice:

RequestConfirmation (/org/bluez/hci1/dev_70_72_3C_62_49_7F, 110643)
Confirm passkey (yes/no): yes 

Ho colpito la coppia sul dispositivo BT e si dice accoppiato, ma l'agente semplice si blocca. Ho usato BlueZ 4 e sono abbastanza sicuro che dovrebbe dire qualcosa del tipo "Nuovo dispositivo XX_XX_XX_XX_XX_XX"

uscita bluetoothd:

** bluetoothd[5359]: src/agent.c:set_default_agent() Default agent set to :1.126 /test/agent
bluetoothd[5359]: src/adapter.c:connected_callback() hci1 device 70:72:3C:62:49:7F connected eir_len 15
bluetoothd[5359]: src/adapter.c:user_confirm_request_callback() hci1 70:72:3C:62:49:7F confirm_hint 0
bluetoothd[5359]: src/device.c:new_auth() Requesting agent authentication for 70:72:3C:62:49:7F
bluetoothd[5359]: src/agent.c:agent_ref() 0xa59290: ref=2
bluetoothd[5359]: src/agent.c:agent_request_confirmation() Calling Agent.RequestConfirmation: name=:1.126, path=/test/agent, passkey=110643
bluetoothd[5359]: src/agent.c:agent_ref() 0xa59290: ref=3
bluetoothd[5359]: src/adapter.c:btd_adapter_confirm_reply() hci1 addr 70:72:3C:62:49:7F success 1
bluetoothd[5359]: src/agent.c:agent_unref() 0xa59290: ref=2
bluetoothd[5359]: src/agent.c:agent_unref() 0xa59290: ref=1
bluetoothd[5359]: src/adapter.c:new_link_key_callback() hci1 new key for 70:72:3C:62:49:7F type 5 pin_len 0
bluetoothd[5359]: src/device.c:device_set_bonded() 
bluetoothd[5359]: src/device.c:device_bonding_complete() bonding (nil) status 0x00
bluetoothd[5359]: src/adapter.c:resume_discovery() 
bluetoothd[5359]: src/adapter.c:dev_disconnected() Device 70:72:3C:62:49:7F disconnected, reason 3
bluetoothd[5359]: src/adapter.c:adapter_remove_connection() 
bluetoothd[5359]: src/adapter.c:bonding_attempt_complete() hci1 bdaddr 70:72:3C:62:49:7F type 0 status 0xe
bluetoothd[5359]: src/device.c:device_bonding_complete() bonding (nil) status 0x0e
bluetoothd[5359]: src/device.c:device_bonding_failed() status 14
bluetoothd[5359]: src/adapter.c:resume_discovery()

Quindi questo fa qualcosa.

uscita hcidump:

$ hcidump -i hci1

HCI sniffer - Bluetooth packet analyzer ver 5.15
device: hci1 snap_len: 1500 filter: 0xffffffffffffffff
> HCI Event: Connect Request (0x04) plen 10
    bdaddr 70:72:3C:62:49:7F class 0x5a020c type ACL
> HCI Event: Command Status (0x0f) plen 4
    Accept Connection Request (0x01|0x0009) status 0x00 ncmd 1
> HCI Event: Connect Complete (0x03) plen 11
    status 0x00 handle 11 bdaddr 70:72:3C:62:49:7F type ACL encrypt 0x00
> HCI Event: Command Status (0x0f) plen 4
    Read Remote Supported Features (0x01|0x001b) status 0x00 ncmd 1
> HCI Event: Read Remote Supported Features (0x0b) plen 11
    status 0x00 handle 11
    Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
> HCI Event: Command Status (0x0f) plen 4
    Read Remote Extended Features (0x01|0x001c) status 0x00 ncmd 1
> HCI Event: Command Complete (0x0e) plen 10
    IO Capability Request Reply (0x01|0x002b) ncmd 1
    status 0x00 bdaddr 70:72:3C:62:49:7F
> HCI Event: Read Remote Extended Features (0x23) plen 13
    status 0x00 handle 11 page 1 max 1
    Features: 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> HCI Event: Command Status (0x0f) plen 4
    Remote Name Request (0x01|0x0019) status 0x00 ncmd 1
> HCI Event: Remote Name Req Complete (0x07) plen 255
    status 0x00 bdaddr 70:72:3C:62:49:7F name 'Prism II'
> HCI Event: Command Complete (0x0e) plen 10
    User Confirmation Request Reply (0x01|0x002c) ncmd 1
    status 0x00 bdaddr 70:72:3C:62:49:7F
> HCI Event: Disconn Complete (0x05) plen 4
    status 0x00 handle 11 reason 0x13
    Reason: Remote User Terminated Connection

Ho anche provato bluetoothctl, ma ha gli stessi risultati. La cosa divertente è che alcuni script di BlueZ (come il dispositivo di test) possono vedere il dispositivo BT per alcuni comandi, ma non altri. Ad esempio, test-device "si fiderà" del dispositivo, ma quando provo a "rimuoverlo", non esiste.

APPROCCIO 2:

DBUS utilizzando direttamente i comandi dbus-send --system. Non credo che nessuno di questi comandi mi farà bene finché non potrò accoppiare e collegare il dispositivo.

APPROCCIO 3:

Ho provato tutti i suggerimenti su questo post . Non c'è /etc/bluetooth/hcid.conf in BlueZ 5. Devo crearne uno? Il comando rfcomm si connetterà, ma poi si disconnetterà subito dopo.

$ sudo rfcomm connect /dev/rfcomm0 70:72:3C:62:49:7F 1
Connected /dev/rfcomm0 to 70:72:3C:62:49:7F on channel 1
Press CTRL-C for hangup
Disconnected

uscita bluetoothd:

bluetoothd[5359]: src/adapter.c:connected_callback() hci1 device 70:72:3C:62:49:7F connected eir_len 10
bluetoothd[5359]: src/adapter.c:dev_disconnected() Device 70:72:3C:62:49:7F disconnected, reason 3
bluetoothd[5359]: src/adapter.c:adapter_remove_connection() 
bluetoothd[5359]: src/adapter.c:bonding_attempt_complete() hci1 bdaddr 70:72:3C:62:49:7F type 0 status 0xe
bluetoothd[5359]: src/device.c:device_bonding_complete() bonding (nil) status 0x0e
bluetoothd[5359]: src/device.c:device_bonding_failed() status 14
bluetoothd[5359]: src/adapter.c:resume_discovery()

uscita hcidump:

$ hcidump -i hci1
HCI sniffer - Bluetooth packet analyzer ver 5.15
device: hci1 snap_len: 1500 filter: 0xffffffffffffffff
> HCI Event: Command Status (0x0f) plen 4
    Create Connection (0x01|0x0005) status 0x00 ncmd 1
> HCI Event: Connect Complete (0x03) plen 11
    status 0x00 handle 11 bdaddr 70:72:3C:62:49:7F type ACL encrypt 0x00
> HCI Event: Command Status (0x0f) plen 4
    Read Remote Supported Features (0x01|0x001b) status 0x00 ncmd 1
> HCI Event: Read Remote Supported Features (0x0b) plen 11
    status 0x00 handle 11
    Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
> HCI Event: Command Status (0x0f) plen 4
    Read Remote Extended Features (0x01|0x001c) status 0x00 ncmd 1
> HCI Event: Read Remote Extended Features (0x23) plen 13
    status 0x00 handle 11 page 1 max 1
    Features: 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> HCI Event: Command Status (0x0f) plen 4
    Remote Name Request (0x01|0x0019) status 0x00 ncmd 1
> HCI Event: Remote Name Req Complete (0x07) plen 255
    status 0x00 bdaddr 70:72:3C:62:49:7F name 'Prism II'
> HCI Event: Command Status (0x0f) plen 4
    Authentication Requested (0x01|0x0011) status 0x00 ncmd 1
> HCI Event: Command Complete (0x0e) plen 10
    Link Key Request Reply (0x01|0x000b) ncmd 1
    status 0x00 bdaddr 70:72:3C:62:49:7F
> HCI Event: Auth Complete (0x06) plen 3
    status 0x00 handle 11
> HCI Event: Command Status (0x0f) plen 4
    Set Connection Encryption (0x01|0x0013) status 0x00 ncmd 1
> HCI Event: Encrypt Change (0x08) plen 4
    status 0x00 handle 11 encrypt 0x01
> HCI Event: Command Status (0x0f) plen 4
    Exit Sniff Mode (0x02|0x0004) status 0x0c ncmd 1
    Error: Command Disallowed
> HCI Event: Disconn Complete (0x05) plen 4
    status 0x00 handle 11 reason 0x13
    Reason: Remote User Terminated Connection

Eventuali suggerimenti? Sono:

  • Dimenticare qualcosa di veramente ovvio?

  • Usi gli strumenti in modo errato?

  • Dimenticato di impostare un file di configurazione?

Modificare:

Dato che il semplice agente bluez non mi stava dando alcun errore utile, ho scritto il mio agente di associazione. Una volta fatto, sono stato in grado di associare ma non connettermi. bluetoothd mi ha dato questo nuovo errore:

bluetoothd[3078]: profiles/audio/a2dp.c:a2dp_source_connect() path /org/bluez/hci0/dev_70_72_3C_62_49_7F
bluetoothd[3078]: a2dp-source profile connect failed for 70:72:3C:62:49:7F: Protocol not available

Questo post ha sottolineato che forse il mio adattatore bluetooth LOCAL non supportava il profilo a2dp della mia sorgente audio. (Non si comporta come un lavandino) Poi ho visto che lo stesso problema è stato riscontrato da molte persone che passano da BlueZ4 a BlueZ5. Il problema è stato anche pubblicato sulla mailing list di BlueZ .

Finora non ho trovato il modo di aggiungere questo protocollo al mio adattatore.


hai provato bluetoothctl? Imposta l'agente giusto e mettilo in default-agent. Inoltre, btmon potrebbe aiutarti a ottenere maggiori informazioni sul problema

Grazie per aver risposto. Sì. Con la nuova configurazione (BlueZ 5 e PA 5, vedi sotto) posso usare bluetoothctl.
MrUser,

Risposte:


8

Soluzione:

Dopo aver scoperto che il profilo (a2dp) non era collegato e visto che altri avevano lo stesso problema, ho esaminato se questo profilo era ancora implementato in BlueZ5. Immagino di non aver letto abbastanza attentamente la guida al porting, perché spiega che a2dp è stato spostato dallo stack BlueZ in GStreamer. Non avevo mai sentito parlare di GStreamer, ma da questo post ho anche visto che PulseAudio e JACK avrebbero implementato anche questo profilo. Ho provato PulseAudio, ma non avrebbe caricato gli UUID corretti per l'adattatore. Poi ho finalmente trovato un post sul wiki di ArchLinux. Devo essere stato su questa pagina un milione di volte, ma probabilmente era quando stavo ancora usando BlueZ4.

Più importante:

-scaricare il nuovo codice sorgente PulseAudio 5, che supporta BlueZ5, e compilarlo. (Non è la versione più recente nei repository apt.)

la compilazione ha richiesto MOLTE dipendenze (JSON, libsndfile, libcap, ecc.)

-Tieni presente che il percorso per PA5 è / usr / local non / usr / (questo è importante, perché dovevo metterlo in $ LD_LIBRARY_PATH in modo che PA potesse trovare libpulsecore-5.0 all'avvio)

-come dice il wiki di ArchLinux, uccidere il server pulseaudio che viene eseguito all'avvio e avviarne uno nuovo. Non carica i profili all'avvio. Assicurati anche che il demone ricompaia. (Impostato in /usr/local//etc/pulse/client.conf)

Dopodiché, i soliti comandi pactl funzionano. Sono stato in grado di ottenere una sorgente BT a2dp (cioè iPod) per lo streaming su PA5 e quindi, utilizzando il modulo loopback, lo streaming su un sink BT a2dp!

Non sono riuscito a farlo funzionare con ALSA, ma ho letto da qualche parte che BlueZ5 potrebbe non supportare più i plugin pcm di ALSA.


2

La chiave del problema di cui sopra è questa frase: "Una volta che la scoperta si interrompe, i dispositivi né connessi né accoppiati verranno automaticamente rimossi da bluetoothd entro tre minuti."

Si prega di leggere la sezione di scoperta del dispositivo da http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/

Ho avuto un problema simile, ma l'ho abbinato e collegato. Per associare e connettere un dispositivo, è necessario che sia stato scoperto negli ultimi 3 minuti. Sia l'agente semplice che il bluetoothctl funzionano bene.

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.