Not-Root-User
藍牙 LE 以非 root 身份掃描?
要對藍牙 LE 設備執行掃描,hcitool顯然需要 root 權限。對於普通使用者,輸出如下:
$ hcitool lescan Set scan parameters failed: Operation not permitted
為什麼hcitool需要 root 權限才能進行 LE 掃描?
是否有可能以非 root 身份執行 LE 掃描?
Linux 的藍牙協議棧檢查兩個功能。功能是管理某些特權的尚未通用的系統。它們可以由 PAM 模組或通過擴展文件屬性處理。(見https://elixir.bootlin.com/linux/v5.8.10/source/net/bluetooth/hci_sock.c#L1307)
$> sudo apt-get install libcap2-bin
安裝 linux 功能操作工具。
$> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
在執行檔上設置缺少的功能,就像 setuid 位一樣。
$> getcap !$ getcap `which hcitool` /usr/bin/hcitool = cap_net_admin,cap_net_raw+eip
所以我們很高興:
$>hcitool -i hci0 lescan Set scan parameters failed: Input/output error
是的,您的 BT 適配器不支持 BLE
$>hcitool -i hci1 lescan LE Scan...
這個可以,繼續並按下設備上的按鈕。