bluetoothd (BlueZ 5) hiçbir cihaza bağlanmaz


9

ÇÖZÜLDÜ. Düzenlendi: aşağıya bakın.

Sanırım interneti bu konuda yeterince uzun süre temizledim. Birçok kez istendi, ancak çözümlerin hiçbiri benim için çalışmıyor. Sonunda düşük enerji özelliklerini kullanabilmek istediğim için BlueZ 5'e geçtim. Ancak şu anda, cihazlarımı eşleştiremiyorum bile. Bir GUI kullanamıyorum çünkü bu sonunda gömülü bir linux sistemi için olacak. Bu nedenle, bluetoothctl kullanamadığımı düşünüyorum, çünkü etkileşimli bir oturum gerektiriyor. (Bu konuda yanlış olabilirim.) Bu yüzden her şeyin bu sırada BASH, C veya python aracılığıyla olmasını istiyorum. Ayrıca, otomatikleştirilmesi gerektiğinden, eşleştirme ve bağlantı linux kutusundan değil, bluetooth cihazından başlatılmalıdır. Son olarak, tüm cihazların a2dp profilini kullanması gerekir.

Birçok yaklaşım var gibi görünüyor, ama birinin nerede bittiği ve diğerinin nerede başladığı konusunda net değilim:

YAKLAŞIM 1:

a) $ sudo bluetoothd -d -n # bluetooth ayrıntılı modda çalışır

b) $ hciconfig hci1 up# cihazı açar

$ hciconfig -a # cihaz özelliklerine bakın

    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) cihazdan eşleştirmeye çalışın.

Sonuç: BluetoothD'den:

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()

Cihaz yanlış PIN veya şifre nedeniyle Adaptör-1 ile eşleştirilemediğini söylüyor .

Yukarıdaki yıldızlı yanıtlara dayanarak, neden bir ajan olmadığına baktım. Temsilci nedir? Kim bilir, ama cihazım ve bluetooth arka plan programı arasındaki aracı olduğunu çıkardım.

d) $ ../bluey-5.15/test/simple-agent # Bu komutlarla sudo kullanmayı da denedim

veya $ ../bluey-5.15/test/simple-agent hci1

Bu, gelen eşleştirme isteklerini işleyen bir python betiğidir. Başarılı olursa, 'güvenmeye' ve 'bağlanmaya' çalışır

çıktı: Agent registered

e) sonra tekrar cihazdan eşleştirmeye çalışıyorum.

basit ajan çıktı:

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

BT cihazında çifti vurdum ve eşleştirilmiş olduğunu söylüyor, ancak basit ajan askıda kalıyor. BlueZ 4 kullandım ve "Yeni Cihaz XX_XX_XX_XX_XX_XX" gibi bir şey söylemesi gerektiğinden eminim

bluetoothd çıkışı:

** 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()

Bu bir şey yapar.

hcidump çıkışı:

$ 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 bile denedim, ancak aynı sonuçları var. Komik olan, BlueZ'den gelen bazı komut dosyalarının (test cihazı gibi) bazı komutlar için BT cihazını görebilmesidir, ancak diğerleri için değil. Örneğin, test cihazı cihaza 'güvenir', ancak 'kaldırmaya' çalıştığımda mevcut değil.

YAKLAŞIM 2:

DBUS doğrudan dbus-send --system komutlarını kullanarak. Cihazı eşleştirip bağlayana kadar bu komutların hiçbirinin bana iyi geleceğini düşünmüyorum.

YAKLAŞIM 3:

Bu yazıdaki tüm önerileri denedim . BlueZ 5'te hiçbir /etc/bluetooth/hcid.conf yoktur. Bir tane oluşturmam gerekir mi? Rfcomm komutu bağlanacak, ancak hemen ardından bağlantıyı kesecektir.

$ 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 çıkışı:

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 çıkışı:

$ 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

Herhangi bir öneri? Ben miyim:

  • Gerçekten bariz bir şeyi unutmak mı?

  • Araçları yanlış mı kullanıyorsunuz?

  • Bir yapılandırma dosyası ayarlamayı mı unuttunuz?

Düzenle:

Bluez basit aracı bana herhangi bir yararlı hata vermediğinden, kendi eşleştirme ajanımı yazdım. Bir kez yaptım, eşleştirebildim ama bağlanamadım. bluetoothd bana bu yeni hatayı verdi:

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

Bu yazı , belki de LOCAL bluetooth adaptörümün ses kaynağımın a2dp profilini desteklemediğine dikkat çekti. (Bir lavabo gibi davranmıyor) Sonra, aynı sorunun BlueZ4'ten BlueZ5'e yükseltme yapan birçok kişi tarafından yaşandığını gördüm. Sorun BlueZ posta listesine de gönderildi .

Şimdiye kadar, bu protokolü adaptörüme eklemenin bir yolunu bulamadım.


bluetoothctl denedin mi Doğru aracıyı ayarlayın ve varsayılan aracıya koyun. Ayrıca btmon, sorununuzla ilgili daha fazla bilgi edinmenize yardımcı olabilir

Yanıt verdiğiniz için teşekkürler. Evet. Yeni yapılandırma ile (BlueZ 5 ve PA 5, aşağıya bakın) bluetoothctl kullanabilirim.
MrUser

Yanıtlar:


8

Çözüm:

Profilin (a2dp) bağlı olmadığını ve başkalarının da aynı sorunu yaşadığını gördükten sonra, bu profilin henüz BlueZ5'te uygulanıp uygulanmadığını araştırdım. Sanırım taşıma kılavuzunu yeterince okumadım , çünkü a2dp'nin BlueZ yığınından ve GStreamer'a taşındığını açıklıyor . Ben Gstreamer duymamıştı, ama aynı zamanda gördüğümüz bu yazı PulseAudio ve Jack de bu profili uygulamak söyledi. PulseAudio'yu denedim, ancak adaptör için uygun UUID'leri yüklemez. Sonunda ArchLinux wiki'sinde bir yazı buldum . Bu sayfaya milyonlarca kez gelmiş olmalıydım, ama muhtemelen hala BlueZ4'ü kullanıyordum.

En önemlisi:

- BlueZ5 desteği olan yeni PulseAudio 5 kaynak kodunu indirin ve derleyin. (Apt depolarındaki en yeni sürüm değildir.)

derleme LOT bağımlılıkları aldı (JSON, libsndfile, libcap, vb.)

- PA5 yolunun / usr / local / usr / olmadığını unutmayın (Bu önemlidir, çünkü PA başlangıçta libpulsecore-5.0'ı bulabilmek için $ LD_LIBRARY_PATH içine koymalıydım)

ArchLinux wiki'nin dediği gibi, başlangıçta çalıştırılan pulseaudio sunucusunu öldürün ve yeni bir tane başlatın. Profilleri başlangıçta yüklemez. Ayrıca arka plan programının yeniden doğduğundan emin olun. (/Usr/local//etc/pulse/client.conf içinde ayarlayın)

Bundan sonra, normal pactl komutları çalışır. PA5'e akış için bir a2dp BT kaynağı (yani iPod) alabildim ve sonra geri döngü modülünü kullanarak bir a2dp BT lavabosuna akış gerçekleştirdim!

ALSA ile çalıştıramadım, ama BlueZ5'in artık ALSA pcm eklentilerini desteklemeyebileceği bir yerde okudum.


2

Yukarıdaki sorunun anahtarı şu ifadedir: "Keşif durduktan sonra, bağlı olmayan veya eşleştirilmeyen cihazlar bluetoothd tarafından üç dakika içinde otomatik olarak kaldırılır."

Lütfen http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/ adresinden Cihaz bulma bölümünü okuyun.

Benzer bir sorunum vardı, ancak eşleştirildi ve bağlandım. Bir cihazı eşleştirmek ve bağlamak için son 3 dakika içinde keşfedilmiş olması gerekir. Hem basit ajan hem de bluetoothctl iyi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.