Der Bluetooth-Protokollstapel für Linux überprüft zwei Funktionen. Funktionen sind ein noch nicht alltägliches System zur Verwaltung einiger Berechtigungen. Sie können von einem PAM-Modul oder über erweiterte Dateiattribute verarbeitet werden. (siehe http://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 )
$> sudo apt-get install libcap2-bin
Installiert Werkzeuge zur Manipulation von Linux-Funktionen.
$> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
Setzt die fehlenden Fähigkeiten der ausführbaren Datei wie das setuid-Bit.
$> getcap !$
getcap `which hcitool`
/usr/bin/hcitool = cap_net_admin,cap_net_raw+eip
Wir können also loslegen:
$>hcitool -i hci0 lescan
Set scan parameters failed: Input/output error
Ja, Ihr BT-Adapter unterstützt BLE nicht
$>hcitool -i hci1 lescan
LE Scan...
Dies ist der Fall, fahren Sie fort und drücken Sie eine Taste auf Ihrem Gerät.
Ok, zumindest habe ich teilweise herausgefunden, warum hcitool Root-Rechte für einen LE-Scan benötigt, aber nicht für einen normalen Scan. Teilweise bedeutet dies, dass ich den Systemaufruf gefunden habe, der aufgrund unzureichender Berechtigungen fehlschlägt, wenn der LE-Scan als normaler Benutzer ausgeführt wird.
Der Fehler "Operation not allowed " wird durch einen writev- Systemaufruf generiert , wobei der Aufrufstapel wie folgt gesperrt wird (alle in hci.c implementierten Funktionen , siehe den bluez-Quellcode):
Der normale Scan ("hcitool scan") muss anscheinend keine Anforderungen an den Controller senden, sondern verwendet eine dedizierte ioctl- Anforderung, die Folgendes aufruft:
Es scheint, dass der Schreibzugriff auf den Bluetooth-Controller eingeschränkt ist, aber warum und wie kann ich das deaktivieren?
quelle
Ich habe dies nicht installiert, aber einem gut geschriebenen Gerätesubsystem ist normalerweise eine Gruppe zugeordnet. Fügen Sie der Gruppe einen Benutzer hinzu, und Sie können auf das Gerät zugreifen (beispielsweise
disk
ermöglicht die Gruppe den Zugriff auf unformatierte Festplatten). Tun Sie einfachls -l
in/dev
das zu überprüfen. Wenn dies nicht der Fall ist und das Gerät zurroot
Gruppe gehört, können Sie dies ändern, indem Sie dieudev
Regeln anpassen, die die Benennung, Berechtigungen und Aktionen der erkannten Hardware regeln (fragen Sie mich nicht, wie).Dies gilt für den direkten Gerätezugriff, den Sie in diesem Fall wahrscheinlich benötigen. Die normale Funktionalität von Bluetooth wird normalerweise über einen Daemon mit eigener Konfiguration, eigenen Gruppen, Berechtigungen usw. abgewickelt. Überprüfen Sie Ihre Distributionsdokumentation, die Gruppen können leicht variieren.
quelle