Bluetooth LE 장치 검색인간-기계 도구당연히 루트 액세스가 필요합니다. 일반 사용자의 경우 출력은 다음과 같습니다.
$ hcitool lescan
Set scan parameters failed: Operation not permitted
왜인간-기계 도구LE 스캐닝에는 루트 권한이 필요합니까?
루트가 아닌 사용자로 LE 검사를 수행할 수 있습니까?
답변1
Linux Bluetooth 스택은 두 가지 기능을 확인합니다. 기능은 특정 권한을 관리하기 위한 덜 일반적인 시스템입니다. 이는 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 스캔에는 루트 권한이 필요하지만 일반 스캔에는 루트 권한이 필요하지 않습니다. 부분적으로 이것은 일반 사용자로 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);
블루투스 컨트롤러에 대한 쓰기 접근이 제한되어 있는 것 같은데, 비활성화하는 이유와 방법은 무엇입니까?
답변3
저는 이것을 설치하지 않았지만 잘 작성된 장치 하위 시스템에는 일반적으로 이와 관련된 그룹이 있습니다. 그룹에 사용자를 추가하면 장치에 대한 액세스 권한이 부여됩니다(예: disk
해당 그룹은 원시 하드 드라이브 액세스를 허용합니다). 그냥 ls -l
들어가서 /dev
확인해 보세요. 그렇지 않고 장치가 root
그룹에 속해 있는 경우 감지 시 하드웨어에 대한 이름 지정, 권한 및 작업을 제어하는 규칙을 조정하여 이 설정을 변경할 수 있습니다 udev
(방법은 묻지 마세요).
이는 이 상황에서 필요할 수 있는 직접 장치 액세스에 적용됩니다. Bluetooth의 일반 기능은 일반적으로 자체 구성, 그룹, 권한 등을 갖춘 데몬에 의해 처리됩니다. 배포 문서를 확인하세요. 이러한 그룹은 약간 다를 수 있습니다.