RESOLU. Modifié: voir ci-dessous.
Je pense que j'ai parcouru Internet assez longtemps pour ce problème. Cela a été demandé plusieurs fois, mais aucune des solutions ne fonctionne pour moi. J'ai mis à niveau vers BlueZ 5 parce que je veux pouvoir utiliser ses capacités à faible énergie à terme. Pour l'instant, cependant, je ne peux même pas jumeler mes appareils. Je ne peux pas utiliser une interface graphique, car ce sera finalement pour un système Linux intégré. Par conséquent, je pense que je ne peux pas non plus utiliser bluetoothctl, car cela nécessite une session interactive. (Je peux me tromper à ce sujet.) Je veux donc que tout soit via BASH, C ou python, dans cet ordre. De plus, comme il doit être automatisé, le couplage et la connexion devront être initiés à partir du périphérique Bluetooth, pas à partir de la boîte Linux. Enfin, tous les appareils doivent utiliser le profil a2dp.
Il semble y avoir de nombreuses approches, mais je ne sais pas trop où l'une finit et où l'autre commence:
APPROCHE 1:
a) $ sudo bluetoothd -d -n
# exécute bluetoothd en mode verbeux
b) $ hciconfig hci1 up
# allume l'appareil
$ hciconfig -a
# voir les propriétés de l'appareil
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) essayez de vous coupler à partir de l'appareil.
Résultat: de 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()
L'appareil indique Impossible de se coupler avec l'adaptateur-1 en raison d'un code PIN ou d'un mot de passe incorrect.
Sur la base des réponses marquées ci-dessus, j'ai cherché pourquoi il n'y avait pas d'agent. Qu'est-ce qu'un agent? Qui sait, mais j'ai déduit qu'il s'agissait de l'intermédiaire entre mon appareil et le démon Bluetooth.
d) $ ../bluey-5.15/test/simple-agent
#J'ai aussi essayé d'utiliser sudo avec ces commandes
ou $ ../bluey-5.15/test/simple-agent hci1
Il s'agit d'un script python qui gère les demandes d'appariement entrantes. En cas de succès, il essaie également de «faire confiance» et de «se connecter»
production: Agent registered
e) puis j'essaye à nouveau de coupler à partir de l'appareil.
sortie d'agent simple:
RequestConfirmation (/org/bluez/hci1/dev_70_72_3C_62_49_7F, 110643)
Confirm passkey (yes/no): yes
J'ai frappé paire sur le périphérique BT et il est dit jumelé, mais l'agent simple se bloque. J'ai utilisé BlueZ 4 et je suis sûr qu'il est censé dire quelque chose comme "New Device XX_XX_XX_XX_XX_XX"
sortie 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()
Donc ça fait quelque chose.
sortie 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
J'ai même essayé bluetoothctl, mais il a les mêmes résultats. Le plus drôle, c'est que certains scripts de BlueZ (comme test-device) peuvent voir le périphérique BT pour certaines commandes, mais pas pour d'autres. Par exemple, test-device «fera confiance» à l'appareil, mais quand j'essaye de le «supprimer», il n'existe pas.
APPROCHE 2:
DBUS directement à l'aide des commandes dbus-send --system. Je pense qu'aucune de ces commandes ne me sera utile tant que je ne pourrai pas coupler et connecter l'appareil.
APPROCHE 3:
J'ai essayé toutes les suggestions sur ce post . Il n'y a pas /etc/bluetooth/hcid.conf dans BlueZ 5. Dois-je en créer un? La commande rfcomm se connectera, mais se déconnectera immédiatement après.
$ 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
sortie 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()
sortie 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
Aucune suggestion? Suis-je:
Oublier quelque chose de vraiment évident?
Vous n'utilisez pas correctement les outils?
Oublier de définir un fichier de configuration?
Éditer:
Étant donné que l'agent simple bluez ne me donnait aucune erreur utile, j'ai écrit mon propre agent d'association. Une fois que je l'ai fait, j'ai pu me jumeler mais pas me connecter. bluetoothd m'a donné cette nouvelle erreur:
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
Cet article a souligné que mon adaptateur Bluetooth local ne supportait peut-être pas le profil a2dp de ma source audio. (N'agissant pas comme un évier) Ensuite, j'ai vu que le même problème a été rencontré par de nombreuses personnes passant de BlueZ4 à BlueZ5. Le problème a également été publié sur la liste de diffusion BlueZ .
Jusqu'à présent, je n'ai pas trouvé de moyen d'ajouter ce protocole à mon adaptateur.
Réponses:
Solution:
Après avoir constaté que le profil (a2dp) n'était pas connecté et vu que d'autres avaient le même problème, j'ai cherché à savoir si ce profil était encore implémenté dans BlueZ5. Je suppose que je n'ai pas lu suffisamment le guide de portage, car il explique que a2dp a été déplacé hors de la pile BlueZ et dans GStreamer. Je n'avais jamais entendu parler de GStreamer, mais j'ai également vu dans ce post que PulseAudio et JACK implémenteraient également ce profil. J'ai essayé PulseAudio, mais il ne chargerait pas les UUID appropriés pour l'adaptateur. Puis j'ai finalement trouvé un article sur le wiki ArchLinux. Je dois avoir visité cette page un million de fois, mais c'était probablement lorsque j'utilisais encore BlueZ4.
Plus important encore:
-téléchargez le nouveau code source de PulseAudio 5, qui prend en charge BlueZ5, et compilez-le. (Ce n'est pas la dernière version des référentiels apt.)
-la compilation a pris BEAUCOUP de dépendances (JSON, libsndfile, libcap, etc.)
- gardez à l'esprit que le chemin pour PA5 est / usr / local pas / usr / (C'est important, car je devais le mettre dans $ LD_LIBRARY_PATH pour que PA puisse trouver libpulsecore-5.0 au démarrage)
-comme le wiki ArchLinux le dit, tuez le serveur pulseaudio qui est exécuté au démarrage et démarrez-en un nouveau. Il ne charge pas les profils au démarrage. Assurez-vous également que le démon réapparaît. (Défini dans /usr/local//etc/pulse/client.conf)
Après cela, les commandes pactl habituelles fonctionnent. J'ai pu obtenir une source BT A2DP (c'est-à-dire un iPod) à diffuser sur PA5, puis, en utilisant le module de bouclage, diffuser sur un récepteur BT A2DP!
Je n'ai pas réussi à le faire fonctionner avec ALSA, mais j'ai lu quelque part que BlueZ5 ne pouvait plus prendre en charge les plugins pcm ALSA.
la source
La clé du problème ci-dessus est cette phrase: "Une fois la découverte terminée, les appareils ni connectés ni jumelés seront automatiquement supprimés par bluetoothd dans les trois minutes."
Veuillez lire la section Découverte des appareils sur http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/
J'ai eu un problème similaire, mais je l'ai associé et connecté. Pour coupler et connecter un appareil, il doit avoir été découvert au cours des 3 dernières minutes. Simple-agent et bluetoothctl fonctionnent très bien.
la source