Добре, принаймні я частково виявив, чому hcitool вимагає кореневих привілеїв для сканування LE, але не для звичайного сканування. Частково означає, що я розмістив системний виклик, який виходить з ладу через недостатню кількість привілеїв при запуску сканування LE як звичайний користувач.
Помилка "Операція не дозволена" породжується системним викликом writev , блокуючи стек виклику наступним чином (усі функції, реалізовані в hci.c , див. Вихідний код bluez):
hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev
Звичайне сканування ("сканування на hcitool"), мабуть, не потребує надсилання запитів до контролера, але використовує спеціальний запит ioctl , викликаючи:
ioctl(dd, HCIINQUIRY, (unsigned long) buf);
Здається, що доступ для запису до контролера Bluetooth обмежений, але чому і як це можна деактивувати?