La pila de protocolos Bluetooth para Linux verifica dos capacidades. Las capacidades son un sistema aún no común para administrar algunos privilegios. Podrían ser manejados por un módulo PAM o mediante atributos de archivo extendidos. (ver http://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 )
$> sudo apt-get install libcap2-bin
instala herramientas de manipulación de capacidades de Linux.
$> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
establece las capacidades faltantes en el ejecutable como el bit setuid.
$> getcap !$
getcap `which hcitool`
/usr/bin/hcitool = cap_net_admin,cap_net_raw+eip
así que estamos bien para ir:
$>hcitool -i hci0 lescan
Set scan parameters failed: Input/output error
Sí, su adaptador BT no es compatible con BLE
$>hcitool -i hci1 lescan
LE Scan...
Este sí, continúa y presiona un botón en tu dispositivo.
Ok, al menos descubrí parcialmente por qué hcitool requiere privilegios de root para un escaneo LE pero no para un escaneo normal. Parcialmente significa que localicé la llamada del sistema que falla debido a privilegios insuficientes al ejecutar el escaneo LE como un usuario normal.
El error "Operación no permitida" es generado por una llamada al sistema writev , con la pila de llamadas bloqueada de la siguiente manera (todas las funciones implementadas en hci.c , vea el código fuente de bluez):
El escaneo normal ("escaneo hcitool") aparentemente no necesita enviar ninguna solicitud al controlador, pero usa una solicitud ioctl dedicada , llamando:
Parece que el acceso de escritura al controlador bluetooth está restringido, pero ¿por qué y cómo puedo desactivarlo?
fuente
No tengo esto instalado, pero un subsistema de dispositivo bien escrito generalmente tiene un grupo asociado. Agregue un usuario al grupo y podrá acceder al dispositivo (por ejemplo, el
disk
grupo permite el acceso al disco duro sin formato). Sólo hacerls -l
en/dev
comprobar esto. Si ese no es el caso y el dispositivo pertenece alroot
grupo, puede cambiar esto ajustando lasudev
reglas que rigen los nombres, los permisos y las acciones en el hardware en el momento de la detección (no me pregunte cómo).Esto se aplica al acceso directo al dispositivo que probablemente necesite en este caso. La funcionalidad normal de bluetooth generalmente se maneja a través de un demonio con su propia configuración, grupos, permisos, etc. Consulte su documentación de distribución, los grupos pueden variar ligeramente.
fuente