解決しました。 編集済み:以下を参照してください。
私はこの問題に十分な時間インターネットを精査してきたと思います。何度も尋ねられましたが、解決策はありません。最終的にその低エネルギー機能を使用できるようにしたいので、BlueZ 5にアップグレードしました。ただし、現時点では、デバイスをペアにすることさえできません。これは最終的に組み込みLinuxシステム用になるため、GUIを使用することはできません。したがって、bluetoothctlはインタラクティブセッションを必要とするため、使用することもできないと思います。 (私はそれについて間違っているかもしれません。)だから、私はすべてがBASH、C、またはpythonのいずれかを介して行われることを望みます。また、自動化が必要なため、ペアリングと接続は、Linuxボックスからではなく、Bluetoothデバイスから開始する必要があります。最後に、すべてのデバイスでa2dpプロファイルを使用する必要があります。
多くのアプローチがあるように見えますが、一方がどこで終わり、もう一方がどこから始まるのか明確ではありません。
アプローチ1:
a)$ Sudo bluetoothd -d -n
#verboseモードでbluetoothdを実行します
b)$ hciconfig hci1 up
#デバイスの電源を入れます
$ hciconfig -a
#デバイスのプロパティを見る
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)デバイスからペアリングを試みます。
結果: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()
デバイスはと言いますPINまたはパスキーが正しくないため、Adapter-1とペアリングできませんでした。
上記のスター付きの回答に基づいて、エージェントがいない理由を調べました。エージェントとは何ですか?誰が知っているが、それは私のデバイスとbluetoothデーモンの仲介者だと推測した。
d)$ ../bluey-5.15/test/simple-agent
#これらのコマンドでSudoを使用してみました
または$ ../bluey-5.15/test/simple-agent hci1
これは、着信ペアリング要求を処理するpythonスクリプトです。成功すると、「信頼」と「接続」も試みます
出力:Agent registered
e)その後、デバイスからペアリングを再試行します。
シンプルエージェント出力:
RequestConfirmation (/org/bluez/hci1/dev_70_72_3C_62_49_7F, 110643)
Confirm passkey (yes/no): yes
BTデバイスでペアをヒットすると、ペアになったと表示されますが、シンプルエージェントがハングします。 BlueZ 4を使用しましたが、「New Device XX_XX_XX_XX_XX_XX_XX」のように表示されるはずです。
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()
これが何かをします。
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
Bluetoothctlも試しましたが、同じ結果になります。面白いことに、BlueZの一部のスクリプト(テストデバイスなど)は、一部のコマンドでBTデバイスを表示できますが、他のコマンドでは表示できません。たとえば、test-deviceはデバイスを「信頼」しますが、「削除」しようとすると、デバイスは存在しません。
アプローチ2:
Dbus-send --systemコマンドを直接使用したDBUS。デバイスをペアリングして接続できるようになるまで、これらのコマンドが役に立たないと思います。
アプローチ3:
これに関するすべての提案を試しました post 。 BlueZ 5には/etc/bluetooth/hcid.confはありません。作成する必要がありますか? rfcommコマンドは接続しますが、その後すぐに切断します。
$ 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
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()
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
助言がありますか?私は:
本当に明らかなことを忘れましたか?
ツールを誤って使用していますか?
構成ファイルの設定を忘れましたか?
編集:
Bluez simple-agentから有用なエラーが返されなかったため、独自のペアリングエージェントを作成しました。一度接続すると、ペアリングできましたが、接続できませんでした。 bluetoothdは私にこの新しいエラーを与えました:
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
この投稿 多分、私のローカルBluetoothアダプターは私のオーディオソースのa2dpプロファイルをサポートしていなかったと指摘しました。 (シンクのように振る舞わない)その後、BlueZ4からBlueZ5にアップグレードする多くの人々が同じ問題を経験していることがわかりました。また、問題は BlueZメーリングリストに投稿 でした。
これまでのところ、このプロトコルを自分のアダプターに追加する方法を見つけていません。
解決:
プロファイル(a2dp)が接続されていないことを発見し、他のユーザーにも同じ問題があることを確認した後、このプロファイルがBlueZ5にまだ実装されているかどうかを調べました。 a2dpがBlueZスタックからGStreamerに移動されたことを説明しているため、移植ガイドを十分に読んでいないと思います。 GStreamerのことを聞いたが、PulseAudioとJACKもこのプロファイルを実装することを この投稿 から見た。 PulseAudioを試しましたが、アダプターの適切なUUIDが読み込まれませんでした。そして、ついに ArchLinux wikiに投稿しました を見つけました。このページに何百回もアクセスしたに違いありませんが、おそらくBlueZ4をまだ使用していたときでしょう。
最も重要なこと:
-BlueZ5をサポートする新しいPulseAudio 5ソースコードをダウンロードし、コンパイルします。 (aptリポジトリの最新バージョンではありません。)
-コンパイルには多くの依存関係が必要でした(JSON、libsndfile、libcapなど)
-PA5のパスは/ usr /ではなく/ usr/localであることに注意してください(PAが起動時にlibpulsecore-5.0を見つけることができるように$ LD_LIBRARY_PATHに配置する必要があるため、これは重要です)
-ArchLinux wikiにあるように、起動時に実行されているpulseaudioサーバーを強制終了し、新しいサーバーを起動します。起動時にプロファイルをロードしません。また、デーモンが再起動することを確認してください。 (/usr/local//etc/Pulse/client.confに設定)
その後、通常のpactlコマンドが機能します。 a2dp BTソース(つまりiPod)を取得してPA5にストリーミングし、ループバックモジュールを使用してa2dp BTシンクにストリーミングできました!
ALSAで実行することはできませんでしたが、BlueZ5がALSA pcmプラグインをサポートしていない可能性があることをどこかで読みました。
上記の問題の鍵は次のフレーズです。「検出が停止すると、接続もペアリングもされていないデバイスは、bluetoothdによって3分以内に自動的に削除されます。」
http://www.bluez.org/bluez-5-api-introduction-andのDevice discoveryセクションをお読みください-porting-guide /
同様の問題がありましたが、ペアリングして接続しました。デバイスをペアリングして接続するには、最後の3分以内にデバイスが検出されている必要があります。 simple-agentとbluetoothctlの両方が正常に機能します。