Kök olarak Bluetooth LE taraması?


13

Bluetooth LE aygıtları için tarama yapmak için hcitool görünüşte kök ayrıcalıkları gerektirir. Normal kullanıcılar için çıktı şu şekildedir:

$ hcitool lescan
Set scan parameters failed: Operation not permitted

Hitotol neden LE taraması için kök ayrıcalıklarına ihtiyaç duyar?

Bir şekilde kök olmayan bir LE taraması yapmak mümkün mü?

Yanıtlar:


21

Linux için Bluetooth protokol yığını iki özelliği kontrol eder. Yetenekler, bazı ayrıcalıkları yönetmek için henüz yaygın olmayan bir sistemdir. Bir PAM modülü veya genişletilmiş dosya öznitelikleri ile işlenebilirler. (bkz. http://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 )

 $> sudo apt-get install libcap2-bin

Linux yetenekleri manipülasyon araçlarını kurar.

 $> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`

yürütülebilir dosyadaki eksik yetenekleri setuid bitine benzer şekilde ayarlar.

 $> getcap !$
 getcap `which hcitool`
 /usr/bin/hcitool = cap_net_admin,cap_net_raw+eip

bu yüzden gitmek için iyi:

$>hcitool -i hci0 lescan
Set scan parameters failed: Input/output error

Evet, BT adaptörünüz BLE'yi desteklemiyor

$>hcitool -i hci1 lescan
LE Scan...

Bunu yapar, devam edin ve cihazınızdaki bir düğmeye basın.


1
Eksik yetenekleri gösteren dört teşekkürler. Ayrıca Raspbian Stretch çalışan bir Raspberry Pi üzerinde kök dışı kullanıcı olarak bluetoothctl kullanmama yardımcı oldu! ama benim durumumda /lib/systemd/system/bluetooth.service yeteneğini ekledim.
Stefan Wegener

7

Tamam, en azından kısmen, hcitool'un neden bir LE taraması için kök ayrıcalıkları gerektirdiğini, ancak normal bir tarama için neden olmadığını keşfettim . Kısmen, LE taramasını normal bir kullanıcı olarak çalıştırırken yetersiz ayrıcalıklar nedeniyle başarısız olan sistem çağrısını bulduğum anlamına gelir.

"İşleme izin verilmiyor" hatası, bir writev sistem çağrısı tarafından çağrılır ve aşağıdaki gibi çağrı yığını kilitlenir ( hci.c'de uygulanan tüm işlevler , bluez kaynak koduna bakın):

hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev

Normal tarama ("hcitool tarama"), kontrolöre herhangi bir istek göndermeye ihtiyaç duymaz, ancak aşağıdakileri çağırarak özel bir ioctl isteği kullanır :

ioctl(dd, HCIINQUIRY, (unsigned long) buf);

Bluetooth denetleyicisine yazma erişimi kısıtlı gibi görünüyor, ancak neden ve nasıl devre dışı bırakabilirim?


0

Bu yüklü değil, ama iyi yazılmış bir cihaz alt sistemi genellikle onunla ilişkili bir grup var. Gruba bir kullanıcı ekleyin ve aygıta erişebilirsiniz (örneğin, diskgrup ham sabit sürücü erişimine izin verir). Sadece yapacak ls -lyılında /devbu kontrol etmek. Durum böyle değilse ve cihaz rootgruba aitse udev, algılama sırasında donanım üzerinde adlandırma, izinler ve eylemleri düzenleyen kuralları ayarlayarak bunu değiştirebilirsiniz (nasıl yapılacağını sorma).

Bu, muhtemelen bu durumda ihtiyacınız olan doğrudan cihaza erişim için geçerlidir. Bluetooth'un normal işlevselliği genellikle kendi yapılandırması, grupları, izinleri vb. Dağıtım belgelerinizi kontrol edin, gruplar biraz değişebilir.

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.