bluetoothd (BlueZ 5) จะไม่เชื่อมต่อกับอุปกรณ์ใด ๆ


9

แก้ไข แก้ไข: ดูด้านล่าง

ฉันคิดว่าฉัน 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รายชื่อผู้รับจดหมาย

จนถึงตอนนี้ฉันยังไม่พบวิธีเพิ่มโปรโตคอลนี้ในอะแดปเตอร์ของฉัน


คุณลอง bluetoothctl แล้วหรือยัง ตั้งตัวแทนที่เหมาะสมและนำไปเป็นตัวแทนเริ่มต้น นอกจากนี้ btmon อาจช่วยให้เข้าใจประเด็นของคุณได้มากขึ้น

ขอบคุณสำหรับการตอบสนอง ใช่. ด้วยการกำหนดค่าใหม่ (BlueZ 5 และ PA 5 ดูด้านล่าง) ฉันสามารถใช้ bluetoothctl
MrUser

คำตอบ:


8

สารละลาย:

หลังจากพบว่าโปรไฟล์ (a2dp) ไม่ได้เชื่อมต่อกันและเห็นว่าคนอื่นมีปัญหาเดียวกันฉันมองว่าโปรไฟล์นี้มีการใช้งานใน BlueZ5 หรือไม่ ฉันเดาว่าฉันไม่ได้อ่านคำแนะนำการย้ายอย่างใกล้ชิดเพราะมันอธิบายว่าa2dp ถูกย้ายออกจากกอง BlueZ และเข้าไปใน GStreamer ฉันไม่เคยได้ยิน GStreamer มาก่อน แต่ฉันก็เห็นจากโพสต์นี้ว่า PulseAudio และ JACK จะใช้โปรไฟล์นี้เช่นกัน ฉันลอง PulseAudio แล้ว แต่จะไม่โหลด UUID ที่เหมาะสมสำหรับอแด็ปเตอร์ ในที่สุดฉันก็พบโพสต์บนวิกิ ArchLinux ฉันต้องมาที่หน้านี้นับล้านครั้ง แต่อาจเป็นไปได้ว่าเมื่อฉันยังใช้ BlueZ4 อยู่

ที่สำคัญที่สุดคือ:

- ดาวน์โหลดซอร์สโค้ด PulseAudio 5 ใหม่ซึ่งรองรับ BlueZ5 และรวบรวม (ไม่ใช่รุ่นใหม่ล่าสุดในที่เก็บ apt)

- การคอมไพล์ใช้การพึ่งพาจำนวนมาก (JSON, libsndfile, libcap ฯลฯ )

- โปรดทราบว่าเส้นทางสำหรับ PA5 คือ / usr / local ไม่ใช่ / usr / (นี่เป็นสิ่งสำคัญเพราะฉันต้องใส่ไว้ใน $ LD_LIBRARY_PATH เพื่อให้ PA สามารถหา libpulsecore-5.0 เมื่อเริ่มต้น)

- ในฐานะที่เป็น ArchLinux wiki กล่าวว่าฆ่าเซิร์ฟเวอร์ pulseaudio ที่ทำงานเมื่อเริ่มต้นและเริ่มใหม่ ไม่โหลดโปรไฟล์เมื่อเริ่มต้น ตรวจสอบให้แน่ใจด้วยว่า daemon ตอบสนอง (ตั้งอยู่ใน /usr/local//etc/pulse/client.conf)

หลังจากนั้นคำสั่ง pactl ปกติจะทำงาน ฉันสามารถรับ a2dp BT source (เช่น iPod) เพื่อสตรีมไปที่ PA5 จากนั้นใช้โมดูล loopback สตรีมไปยัง a2dp BT sink!

ฉันไม่สามารถเรียกใช้กับ ALSA ได้ แต่ฉันอ่านบางแห่งที่ BlueZ5 อาจไม่สนับสนุนปลั๊กอิน ALSA pcm อีกต่อไป


2

กุญแจสำคัญของปัญหาข้างต้นคือวลีนี้: "เมื่อการค้นพบหยุดลงอุปกรณ์ที่ไม่ได้เชื่อมต่อหรือจับคู่จะถูกลบโดย BluetoothD อัตโนมัติภายในสามนาที"

โปรดอ่านหัวข้อการค้นพบอุปกรณ์จากhttp://www.bluez.org/bluez-5-api-introduction-and-porting-guide/

ฉันมีปัญหาที่คล้ายกัน แต่มันจับคู่และเชื่อมต่อกัน ในการจับคู่และเชื่อมต่ออุปกรณ์จะต้องมีการค้นพบภายใน 3 นาทีที่ผ่านมา ทั้งตัวแทนง่ายและ bluetoothctl ทำงานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.