TERPECAHKAN. Diedit: lihat di bawah.
Saya pikir saya sudah menjelajahi internet cukup lama untuk masalah ini. Sudah berkali-kali ditanyakan, tetapi tidak ada solusi yang bekerja untuk saya. Saya meningkatkan ke BlueZ 5 karena saya ingin dapat menggunakan kemampuan energi rendah pada akhirnya. Namun sekarang, saya tidak bisa mendapatkan perangkat saya dipasangkan. Saya tidak dapat menggunakan GUI karena ini pada akhirnya akan untuk sistem linux yang tertanam. Oleh karena itu, saya pikir saya juga tidak dapat menggunakan bluetoothctl, karena memerlukan sesi interaktif. (Saya mungkin salah tentang itu.) Jadi saya ingin semuanya melalui BASH, C, atau python, dalam urutan itu. Selain itu, karena harus otomatis, pemasangan dan koneksi harus dimulai dari perangkat bluetooth, bukan dari kotak linux. Terakhir, semua perangkat perlu menggunakan profil a2dp.
Tampaknya ada banyak pendekatan, tetapi saya tidak jelas di mana yang satu berakhir dan yang lainnya dimulai:
PENDEKATAN 1:
a) # $ sudo bluetoothd -d -n
menjalankan bluetoothd dalam mode verbose
b) # $ hciconfig hci1 up
menghidupkan perangkat
$ hciconfig -a
# lihat properti perangkat
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) mencoba memasangkan dari perangkat.
Hasil: dari 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()
Perangkat mengatakan Tidak dapat memasangkan dengan Adapter-1 karena PIN atau passkey yang salah.
Berdasarkan tanggapan yang dibintangi di atas, saya melihat mengapa tidak ada agen. Apa itu agen? Siapa tahu, tetapi saya menyimpulkan bahwa itu adalah perantara antara perangkat saya dan daemon bluetooth.
d) $ ../bluey-5.15/test/simple-agent
#Aku juga mencoba menggunakan sudo dengan perintah-perintah ini
atau $ ../bluey-5.15/test/simple-agent hci1
Ini adalah skrip python yang menangani permintaan pemasangan masuk. Jika berhasil, itu juga mencoba untuk 'percaya' dan 'terhubung'
keluaran: Agent registered
e) maka saya coba lagi untuk memasangkan dari perangkat.
output agen sederhana:
RequestConfirmation (/org/bluez/hci1/dev_70_72_3C_62_49_7F, 110643)
Confirm passkey (yes/no): yes
Saya menekan pasangan pada perangkat BT dan dikatakan berpasangan, tetapi agen sederhana hang. Saya telah menggunakan BlueZ 4, dan saya cukup yakin itu seharusnya mengatakan sesuatu seperti "Perangkat Baru XX_XX_XX_XX_XX_XX"
output 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()
Jadi ini melakukan sesuatu.
output 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
Saya bahkan mencoba bluetoothctl, tetapi hasilnya sama. Lucunya beberapa skrip dari BlueZ (seperti test-device) dapat melihat perangkat BT untuk beberapa perintah, tetapi tidak yang lain. Misalnya, perangkat uji akan 'mempercayai' perangkat tersebut, tetapi ketika saya mencoba untuk 'menghapusnya', itu tidak ada.
PENDEKATAN 2:
DBUS langsung menggunakan perintah dbus-send --system. Saya tidak berpikir salah satu dari perintah ini akan berguna bagi saya sampai saya dapat memasangkan dan menghubungkan perangkat.
PENDEKATAN 3:
Saya mencoba semua saran di posting ini . Tidak ada /etc/bluetooth/hcid.conf di BlueZ 5. Apakah saya perlu membuatnya? Perintah rfcomm akan terhubung, tetapi kemudian putuskan setelahnya.
$ 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
output 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()
output 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
Ada saran? Apakah saya:
Lupa sesuatu yang sangat jelas?
Menggunakan alat secara salah?
Lupa mengatur file konfigurasi?
Edit:
Karena agen bluez sederhana tidak memberi saya kesalahan yang berguna, saya menulis agen pasangan saya sendiri. Setelah saya melakukannya, saya bisa memasangkan tetapi tidak terhubung. bluetoothd memberi saya kesalahan baru ini:
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
Posting ini menunjukkan bahwa mungkin adaptor Bluetooth LOCAL saya tidak mendukung profil a2dp dari sumber audio saya. (Tidak bertingkah seperti wastafel) Lalu saya melihat bahwa masalah yang sama telah dialami oleh banyak orang yang meningkatkan dari BlueZ4 ke BlueZ5. Masalah ini juga telah diposting di milis BlueZ .
Sejauh ini, saya belum menemukan cara untuk menambahkan protokol ini ke adaptor saya.
Jawaban:
Larutan:
Setelah menemukan bahwa profil (a2dp) tidak terhubung dan melihat bahwa orang lain memiliki masalah yang sama, saya melihat apakah profil ini sudah diterapkan di BlueZ5. Saya kira saya tidak membaca panduan porting cukup dekat, karena itu menjelaskan bahwa a2dp dipindahkan dari tumpukan BlueZ dan ke GStreamer. Saya belum pernah mendengar tentang GStreamer, tetapi saya juga melihat dari pos ini bahwa PulseAudio dan JACK akan mengimplementasikan profil ini juga. Saya mencoba PulseAudio, tetapi tidak mau memuat UUID yang tepat untuk adaptor. Kemudian saya akhirnya menemukan posting di wiki ArchLinux. Saya pasti telah mengunjungi halaman ini sejuta kali, tapi mungkin ketika saya masih menggunakan BlueZ4.
Yang paling penting:
-download kode sumber PulseAudio 5 baru, yang memiliki dukungan untuk BlueZ5, dan kompilasi. (Ini bukan versi terbaru di repositori apt.)
-compiling mengambil BANYAK dependensi (JSON, libsndfile, libcap, dll)
-jaga agar jalur PA5 adalah / usr / local bukan / usr / (Ini penting, karena saya harus memasukkannya ke dalam $ LD_LIBRARY_PATH sehingga PA bisa menemukan libpulsecore-5.0 saat startup)
-sebagai kata wiki ArchLinux, bunuh server pulseaudio yang dijalankan saat startup dan mulai yang baru. Itu tidak memuat profil saat startup. Pastikan juga bahwa daemon respawn. (Setel di /usr/local//etc/pulse/client.conf)
Setelah itu, perintah pactl yang biasa berfungsi. Saya bisa mendapatkan sumber a2dp BT (yaitu iPod) untuk streaming ke PA5, dan kemudian, menggunakan modul loopback, streaming ke wastafel a2dp BT!
Saya tidak dapat menjalankannya dengan ALSA, tetapi saya membaca di suatu tempat bahwa BlueZ5 mungkin tidak mendukung plugin ALSA pcm lagi.
sumber
Kunci dari masalah di atas adalah ungkapan ini: "Setelah penemuan berhenti, perangkat yang tidak terhubung atau dipasangkan akan dihapus secara otomatis oleh bluetoothd dalam waktu tiga menit."
Silakan baca bagian Penemuan perangkat dari http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/
Saya memiliki masalah serupa, tetapi memasangnya dan terhubung. Untuk memasangkan dan menghubungkan perangkat, itu pasti sudah ditemukan dalam 3 menit terakhir. Agen sederhana dan bluetoothctl berfungsi dengan baik.
sumber