답변:
Linux 용 Bluetooth 프로토콜 스택은 두 가지 기능을 확인합니다. 기능은 일부 권한을 관리하기위한 일반적인 시스템이 아닙니다. PAM 모듈 또는 확장 파일 속성을 통해 처리 할 수 있습니다. ( http://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 참조 )
$> sudo apt-get install libcap2-bin
리눅스 기능 조작 도구를 설치합니다.
$> 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...
이 작업은 계속 진행하고 기기의 버튼을 누릅니다.
적어도 hcitool 이 LE 스캔에 루트 권한이 필요하지만 일반 스캔에는 루트 권한이 필요한 이유를 부분적으로 발견했습니다 . 부분적으로는 LE 스캔을 일반 사용자로 실행할 때 권한이 충분하지 않아 실패한 시스템 호출을 찾았 음을 의미합니다.
"작업이 허용되지 않음"오류는 다음과 같이 호출 스택 잠금과 함께 writev 시스템 호출에 의해 생성됩니다 ( hci.c에 구현 된 모든 기능 은 bluez 소스 코드 참조).
hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev
일반 스캔 ( "hcitool scan")은 컨트롤러에 요청을 보낼 필요는 없지만 다음을 호출 하는 전용 ioctl 요청을 사용합니다 .
ioctl(dd, HCIINQUIRY, (unsigned long) buf);
블루투스 컨트롤러에 대한 쓰기 액세스가 제한되어 있지만 왜 어떻게 비활성화 할 수 있습니까?
나는 이것을 설치하지 않았지만, 잘 작성된 장치 서브 시스템에는 일반적으로 연관된 그룹이 있습니다. 그룹에 사용자를 추가하면 장치에 액세스 할 수 있습니다 (예 : disk
그룹은 원시 하드 드라이브 액세스를 허용 함). 그냥 할 ls -l
에서 /dev
이를 확인 할 수 있습니다. 그렇지 않은 경우 장치가 root
그룹에 속하는 경우 udev
탐지시 하드웨어의 이름 지정, 권한 및 작업을 제어 하는 규칙을 조정하여이를 변경할 수 있습니다 (방법을 묻지 마십시오).
이것은 아마도이 경우 필요할 수있는 직접적인 장치 액세스를 위해 진행됩니다. 블루투스의 일반적인 기능은 일반적으로 자체 구성, 그룹, 권한 등을 가진 데몬을 통해 처리됩니다. 배포 문서를 확인하십시오. 그룹은 약간 다를 수 있습니다.