A pilha de protocolos Bluetooth para Linux verifica dois recursos. Os recursos ainda não são um sistema comum para gerenciar alguns privilégios. Eles podem ser manipulados por um módulo PAM ou por meio de atributos de arquivo estendidos. (consulte http://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 )
$> sudo apt-get install libcap2-bin
instala ferramentas de manipulação de recursos do linux.
$> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
define os recursos ausentes no executável como o bit setuid.
$> getcap !$
getcap `which hcitool`
/usr/bin/hcitool = cap_net_admin,cap_net_raw+eip
então estamos prontos para ir:
$>hcitool -i hci0 lescan
Set scan parameters failed: Input/output error
Sim, seu adaptador BT não suporta BLE
$>hcitool -i hci1 lescan
LE Scan...
Este faz, continue e pressione um botão no seu dispositivo.
Ok, pelo menos eu descobri parcialmente por que o hcitool requer privilégios de root para uma verificação LE, mas não para uma verificação normal. Parcialmente significa que localizei a chamada do sistema que falhou devido a privilégios insuficientes ao executar a verificação LE como um usuário normal.
O erro "Operação não permitida" é gerado por uma chamada do sistema writev , com a pilha de chamadas bloqueada da seguinte forma (todas as funções implementadas no hci.c , consulte o código-fonte bluez ):
A varredura normal ("varredura hcitool") aparentemente não precisa enviar nenhuma solicitação ao controlador, mas usa uma solicitação ioctl dedicada , chamando:
Parece que o acesso de gravação ao controlador bluetooth é restrito, mas por que e como posso desativar isso?
fonte
Eu não tenho isso instalado, mas um subsistema de dispositivo bem escrito geralmente tem um grupo associado a ele. Adicione um usuário ao grupo e você poderá acessar o dispositivo (por exemplo, o
disk
grupo permite acesso bruto ao disco rígido). Basta fazerls -l
em/dev
verificar isso. Se esse não for o caso e o dispositivo pertencer aoroot
grupo, você poderá alterar isso ajustando asudev
regras que governam a nomeação, permissões e ações no hardware na detecção (não me pergunte como).Isso vale para o acesso direto ao dispositivo que você provavelmente precisa neste caso. A funcionalidade normal do bluetooth geralmente é tratada através de um daemon com sua própria configuração, grupos, permissões e assim por diante. Verifique sua documentação de distribuição, os grupos podem variar um pouco.
fonte