bluetoothd (BlueZ 5) sẽ không kết nối với bất kỳ thiết bị nào


9

GIẢI QUYẾT. Chỉnh sửa: xem bên dưới.

Tôi nghĩ rằng tôi đã truy quét internet đủ lâu cho vấn đề này. Nó đã được hỏi nhiều lần, nhưng không có giải pháp nào phù hợp với tôi. Tôi đã nâng cấp lên BlueZ 5 vì cuối cùng tôi muốn có thể sử dụng khả năng năng lượng thấp của nó. Ngay bây giờ, mặc dù, tôi thậm chí không thể ghép nối các thiết bị của mình. Tôi không thể sử dụng GUI vì điều này cuối cùng sẽ dành cho một hệ thống linux được nhúng. Do đó, tôi nghĩ rằng tôi cũng không thể sử dụng bluetoothctl, vì nó yêu cầu một phiên tương tác. (Tôi có thể sai về điều đó.) Vì vậy, tôi muốn mọi thứ phải thông qua BASH, C hoặc python, theo thứ tự đó. Ngoài ra, vì cần được tự động hóa, việc ghép nối và kết nối sẽ phải được bắt đầu từ thiết bị bluetooth, không phải từ hộp linux. Cuối cùng, tất cả các thiết bị cần sử dụng cấu hình a2dp.

Dường như có nhiều cách tiếp cận, nhưng tôi không rõ nơi nào một kết thúc và cái khác bắt đầu:

TIẾP CẬN 1:

a) $ sudo bluetoothd -d -n #sls bluetoothd ở chế độ dài dòng

b) $ hciconfig hci1 upbật thiết bị trên

$ hciconfig -a #see thuộc tính thiết bị

    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) cố gắng ghép nối từ thiết bị.

Kết quả: từ 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()

Thiết bị cho biết Không thể ghép nối với Adaptor-1 do mã PIN hoặc mật mã không chính xác.

Dựa trên các câu trả lời được gắn dấu sao ở trên, tôi đã xem xét lý do tại sao không có một tác nhân. Đại lý là gì? Ai biết được, nhưng tôi đã suy luận rằng đó là người trung gian giữa thiết bị của tôi và daemon bluetooth.

d) $ ../bluey-5.15/test/simple-agent # Tôi cũng đã thử sử dụng sudo với các lệnh này

hoặc là $ ../bluey-5.15/test/simple-agent hci1

Đây là một kịch bản python xử lý các yêu cầu ghép nối đến. Nếu thành công, nó cũng cố gắng 'tin tưởng' và 'kết nối'

đầu ra: Agent registered

e) sau đó tôi thử lại để ghép nối từ thiết bị.

đầu ra tác nhân đơn giản:

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

Tôi nhấn cặp trên thiết bị BT và nó nói là đã ghép nối, nhưng tác nhân đơn giản bị treo. Tôi đã sử dụng BlueZ 4 và tôi khá chắc chắn rằng nó phải nói một cái gì đó như "Thiết bị mới XX_XX_XX_XX_XX_XX"

đầu ra 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()

Vì vậy, điều này làm một cái gì đó.

đầu ra 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

Tôi thậm chí đã thử bluetoothctl, nhưng nó có kết quả tương tự. Điều buồn cười là một số tập lệnh từ BlueZ (như thiết bị thử nghiệm) có thể thấy thiết bị BT cho một số lệnh, nhưng không phải là các tập lệnh khác. Chẳng hạn, thiết bị thử nghiệm sẽ 'tin tưởng' thiết bị, nhưng khi tôi cố gắng 'loại bỏ' thiết bị, nó không tồn tại.

TIẾP CẬN 2:

DBUS trực tiếp sử dụng các lệnh dbus-send --system. Tôi không nghĩ bất kỳ lệnh nào trong số này sẽ giúp tôi làm tốt cho đến khi tôi có thể ghép nối và kết nối thiết bị.

TIẾP CẬN 3:

Tôi đã thử tất cả các đề xuất về bài viết này . Không có /etc/bluetooth/hcid.conf trong BlueZ 5. Tôi có cần tạo một cái không? Lệnh rfcomm sẽ kết nối, nhưng sau đó ngắt kết nối ngay sau đó.

$ 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

đầu ra 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()

đầu ra 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

Bất kỳ đề xuất? Tôi là:

  • Quên một cái gì đó thực sự rõ ràng?

  • Sử dụng dụng cụ không đúng?

  • Quên thiết lập một tập tin cấu hình?

Biên tập:

Vì tác nhân đơn giản bluez không gây ra cho tôi bất kỳ lỗi hữu ích nào, tôi đã viết tác nhân ghép nối của riêng tôi. Khi tôi đã làm, tôi có thể ghép nối nhưng không kết nối. bluetoothd đã cho tôi lỗi mới này:

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

Bài đăng này chỉ ra rằng có thể bộ điều hợp bluetooth ĐỊA PHƯƠNG của tôi không hỗ trợ cấu hình a2dp của nguồn âm thanh của tôi. (Không hoạt động như một cái bồn rửa) Sau đó tôi thấy rằng vấn đề tương tự đã được trải nghiệm bởi nhiều người nâng cấp từ BlueZ4 lên BlueZ5. Vấn đề cũng đã được đăng trên danh sách gửi thư của BlueZ .

Cho đến nay, tôi vẫn chưa tìm được cách thêm giao thức này vào bộ điều hợp của mình.


bạn đã thử bluetoothctl chưa? Đặt đúng tác nhân và đặt nó vào tác nhân mặc định. Ngoài ra btmon có thể giúp nhận được nhiều thông tin chi tiết hơn về vấn đề của bạn

Cảm ơn bạn đã trả lời. Đúng. Với cấu hình mới (BlueZ 5 và PA 5, xem bên dưới) tôi có thể sử dụng bluetoothctl.
MrUser

Câu trả lời:


8

Giải pháp:

Sau khi thấy rằng hồ sơ (a2dp) không được kết nối và thấy rằng những người khác có cùng một vấn đề, tôi đã xem xét liệu hồ sơ này đã được triển khai trong BlueZ5 chưa. Tôi đoán rằng tôi đã không đọc hướng dẫn chuyển động đủ chặt chẽ, bởi vì nó giải thích rằng a2dp đã được chuyển ra khỏi ngăn xếp BlueZ và vào GStreamer. Tôi chưa bao giờ nghe nói về GStreamer, nhưng tôi cũng thấy từ bài đăng này rằng PulseAudio và JACK cũng sẽ thực hiện hồ sơ này. Tôi đã thử PulseAudio, nhưng nó sẽ không tải UUID thích hợp cho bộ điều hợp. Sau đó tôi cuối cùng đã tìm thấy một bài đăng trên wiki ArchLinux. Tôi đã phải đến trang này một triệu lần, nhưng có lẽ là khi tôi vẫn đang sử dụng BlueZ4.

Quan trọng nhất:

-Tải xuống mã nguồn PulseAudio 5 mới, có hỗ trợ cho BlueZ5 và biên dịch nó. (Đây không phải là phiên bản mới nhất trong kho apt.)

-compiling mất rất nhiều phụ thuộc (JSON, libsndfile, libcap, v.v.)

-lưu ý rằng đường dẫn cho PA5 là / usr / local not / usr / (Điều này rất quan trọng, vì tôi phải đặt nó trong $ LD_LIBRARY_PATH để PA có thể tìm thấy libpulsecore-5.0 khi khởi động)

- như wiki ArchLinux nói, hãy tiêu diệt máy chủ pulseaudio đang chạy khi khởi động và bắt đầu một máy chủ mới. Nó không tải các hồ sơ khi khởi động. Cũng đảm bảo rằng daemon hồi sinh. (Đặt trong /usr/local//etc/pulse/client.conf)

Sau đó, các lệnh pactl thông thường hoạt động. Tôi đã có thể lấy nguồn a2dp BT (tức là iPod) để truyền phát đến PA5, và sau đó, bằng cách sử dụng mô-đun loopback, truyền phát đến một bồn rửa BT a2dp!

Tôi không thể chạy nó với ALSA, nhưng tôi đọc được ở đâu đó rằng BlueZ5 có thể không hỗ trợ các plugin ALSA pcm nữa.


2

Điểm mấu chốt của vấn đề trên là cụm từ này: "Khi phát hiện dừng lại, các thiết bị không được kết nối hoặc ghép nối sẽ tự động bị xóa bởi bluetoothd trong vòng ba phút."

Vui lòng đọc phần Khám phá thiết bị từ http://www.bluez.org/bluez-5-api-int sinhtion-and-porting-guide /

Tôi đã có vấn đề tương tự, nhưng nó đã được ghép nối và kết nối. Để ghép nối và kết nối một thiết bị, nó phải được phát hiện trong vòng 3 phút cuối. Cả hai tác nhân đơn giản và bluetoothctl đều hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.