แก้ไข แก้ไข: ดูด้านล่าง
ฉันคิดว่าฉัน scoured อินเทอร์เน็ตนานพอสำหรับปัญหานี้ มีการถามหลายครั้ง แต่ไม่มีวิธีแก้ไขสำหรับฉัน ฉันอัพเกรดเป็น BlueZ 5 เพราะฉันต้องการใช้ความสามารถพลังงานต่ำในที่สุด แม้ว่าตอนนี้ฉันไม่สามารถจับคู่อุปกรณ์ของฉันได้ ฉันไม่สามารถใช้ GUI ได้เพราะนี่จะเป็นระบบลินุกซ์ในตัว ดังนั้นฉันคิดว่าฉันไม่สามารถใช้ bluetoothctl ได้เพราะต้องใช้เซสชันแบบโต้ตอบ (ฉันอาจจะผิดในเรื่องนั้น) ดังนั้นฉันต้องการให้ทุกอย่างผ่าน BASH, C หรือ python ตามลำดับ นอกจากนี้เนื่องจากต้องเป็นแบบอัตโนมัติการจับคู่และการเชื่อมต่อจึงต้องเริ่มจากอุปกรณ์บลูทู ธ ไม่ใช่จากกล่องลินุกซ์ สุดท้ายอุปกรณ์ทั้งหมดต้องใช้โปรไฟล์ a2dp
ดูเหมือนจะมีวิธีการมากมาย แต่ฉันไม่ชัดเจนว่าที่หนึ่งจบและอื่น ๆ เริ่มต้น:
วิธีที่ 1:
a) $ sudo bluetoothd -d -n
#runs bluetoothd ในโหมด verbose
b) $ hciconfig hci1 up
# เปิดอุปกรณ์บน
$ hciconfig -a
#see คุณสมบัติของอุปกรณ์
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()
อุปกรณ์แจ้งว่าไม่สามารถจับคู่กับ Adapter-1 ได้เนื่องจาก PIN หรือรหัสผ่านไม่ถูกต้อง
จากคำตอบที่ติดดาวฉันได้ดูว่าทำไมไม่มีตัวแทน ตัวแทนคืออะไร ใครจะรู้ แต่ฉันอนุมานว่ามันเป็นคนกลางระหว่างอุปกรณ์ของฉันและบลูทู ธ ภูต
d) $ ../bluey-5.15/test/simple-agent
# ฉันลองใช้ sudo ด้วยคำสั่งเหล่านี้
หรือ $ ../bluey-5.15/test/simple-agent hci1
นี่คือสคริปต์หลามที่จัดการคำขอจับคู่ที่เข้ามา หากประสบความสำเร็จจะพยายาม 'เชื่อใจ' และ 'เชื่อมต่อ'
เอาท์พุท: Agent registered
e) จากนั้นฉันลองอีกครั้งเพื่อจับคู่จากอุปกรณ์
เอเจนต์ง่าย ๆ เอาต์พุต:
RequestConfirmation (/org/bluez/hci1/dev_70_72_3C_62_49_7F, 110643)
Confirm passkey (yes/no): yes
ฉันกดปุ่มคู่บนอุปกรณ์ BT และมันบอกว่าจับคู่ แต่เอเจนต์ธรรมดาค้าง ฉันใช้ BlueZ 4 และฉันค่อนข้างแน่ใจว่ามันควรจะพูดอะไรบางอย่างเช่น "อุปกรณ์ใหม่ 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 สำหรับคำสั่งบางอย่าง แต่ไม่ใช่สคริปต์อื่น ๆ ตัวอย่างเช่นอุปกรณ์ทดสอบจะ 'เชื่อถือ' อุปกรณ์ แต่เมื่อฉันพยายาม 'ลบ' มันจะไม่มีอยู่
แนวทางที่ 2:
DBUS โดยตรงโดยใช้คำสั่ง dbus-send --system ฉันไม่คิดว่าคำสั่งใด ๆ เหล่านี้จะทำอะไรได้ดีจนกระทั่งฉันสามารถจับคู่และเชื่อมต่ออุปกรณ์ได้
วิธีที่ 3:
ฉันลองคำแนะนำทั้งหมดในโพสต์นี้ ไม่มี /etc/bluetooth/hcid.conf ใน BlueZ 5 ฉันจำเป็นต้องสร้างหรือไม่? คำสั่ง 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 ไม่ได้ให้ข้อผิดพลาดที่เป็นประโยชน์กับฉันเลยฉันจึงเขียนตัวแทนการจับคู่ของฉัน เมื่อฉันทำฉันก็สามารถจับคู่ แต่ไม่ได้เชื่อมต่อ 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
โพสต์นี้ชี้ให้เห็นว่าบางทีอะแดปเตอร์บลูทู ธ LOCAL ของฉันไม่สนับสนุนโปรไฟล์ a2dp ของแหล่งกำเนิดเสียงของฉัน (ไม่ทำตัวเหมือนอ่างล้างมือ) จากนั้นฉันก็เห็นว่าปัญหาเดียวกันนี้เกิดขึ้นจากหลาย ๆ คนยกระดับจาก BlueZ4 เป็น BlueZ5 ปัญหานี้ยังโพสต์ในรายชื่อผู้รับจดหมาย BlueZรายชื่อผู้รับจดหมาย
จนถึงตอนนี้ฉันยังไม่พบวิธีเพิ่มโปรโตคอลนี้ในอะแดปเตอร์ของฉัน