Bluetooth LEデバイス検索人間 - 機械ツール当然ルートアクセスが必要です。一般ユーザーの場合、出力は次のようになります。
$ hcitool lescan
Set scan parameters failed: Operation not permitted
なぜ人間 - 機械ツールLEスキャンにはroot権限が必要ですか?
root以外のユーザーでLEスキャンを実行できますか?
答え1
Linux Bluetoothスタックは2つの機能をチェックします。機能は、特定の権限を管理するためのあまり一般的ではないシステムです。これは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...
動作します。デバイスのボタンを押し続けます。
答え2
まあ、少なくとも私はその理由を部分的に見つけました。人間 - 機械ツールLEスキャンにはroot権限が必要ですが、通常のスキャンにはroot権限は必要ありません。部分的には、通常のユーザーとしてLEスキャンを実行したときに、権限の不足のために失敗したシステムコールが見つかったことを意味しました。
「操作は許可されていません」エラーは、次のために発生します。vを書くシステムコール、コールスタックは次のようにロックされます(すべての関数はhci.c、bluezのソースコードを参照):
hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev
通常のスキャン(「hcitoolスキャン」)では、明らかにコントローラに要求を送信する必要はありませんが、専用スキャンを使用します。I/W制御リクエスト、電話:
ioctl(dd, HCIINQUIRY, (unsigned long) buf);
Bluetoothコントローラへの書き込みアクセスが制限されているようですが、無効にする理由と方法は何ですか?
答え3
私はこれをインストールしていませんが、よく書かれたデバイスサブシステムには通常、これに関連するグループがあります。グループにユーザーを追加すると、デバイスへのアクセスが許可されます(たとえば、disk
そのグループは生のハードドライブへのアクセスを許可します)。ただls -l
入って/dev
確認してみてください。そうでなく、デバイスがroot
グループに属している場合は、検出時にハードウェアの命名、権限、および操作を制御する規則を調整することでこの設定を変更できますudev
(方法は尋ねないでください)。
これは、この状況で必要な可能性がある直接デバイスアクセスに適用されます。 Bluetoothの一般的な機能は通常、独自の設定、グループ、権限などを持つデーモンによって処理されます。配布文書を確認してください。これらのグループは若干異なる場合があります。