Code Python pour Bluetooth lance une erreur après que j'ai dû réinitialiser l'adaptateur
j'ai essayé la programmation bluetooth en python. Il fonctionnait bien jusqu'à hier. Ce matin, il y a eu une panne de courant et, pour une raison quelconque, le module bluetooth a été désactivé et il n'a pas pu être activé. Alors, j'ai fait un sudo hciconfig hci0 reset
et puis de l'allumer. À partir de là, les programmes les plus simples échouent. Prendre celui-ci par exemple. Il est coincé à advertise_service
bluetooth
module et envoie l'erreur suivante( FYI: virtualenv n'était pas un problème ici. Le python à l'échelle du système fait aussi la même chose).
Traceback (most recent call last):
File "bt.py", line 17, in <module>
advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ])
File "/home/machinename/.virtualenvs/py27/local/lib/python2.7/site-packages/bluetooth/bluez.py", line 242, in advertise_service
raise BluetoothError (str (e))
bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')
parfois j'ai eu une erreur différente quand j'ai compilé et réinstallé Bluez
pilote:
Traceback (most recent call last):
File "build/bdist.linux-x86_64/egg/bluetooth/bluez.py", line 268, in advertise_service
bluetooth.btcommon.BluetoothError: error no advertisable device.
mais tout cela a fonctionné comme un charme avant dans cette machine; en fait tout le programme fonctionne très bien avec mon autre machine ubuntu (14.04 LTS) pendant que j'écris ceci. J'ai vérifié le code source, et j'ai trouvé un _bluetooth.so
fichier-qui est un code compilé, donc je ne savais plus quoi faire.
tout pointeur sera très apprécié.
3 réponses
cette erreur est due à des problèmes d'incompatibilité avec BlueZ 5 et SDP avec bluetoothd
Correctif pour 15.10 et BlueZ 5
assurez-vous de courir sdptool browse local
donne l'erreur suivante:
Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory
il s'avère Que le coupable est bluetoothd
, le démon Bluetooth. Utiliser SDP avec bluetoothd
nécessite des fonctionnalités obsolètes pour une raison stupide, donc pour corriger cela, le démon doit être démarré en mode compatibilité avec bluetoothd -C
(ou bluetooth --compat
).
Trouver l'emplacement de bluetooth.service
par:
systemctl status bluetooth.service
puis éditer bluetooth.service
et cherchez
ExecStart=/usr/libexec/bluetooth/bluetoothd
Append --compat
à la fin de cette ligne, enregistrer, puis exécutez
service bluetooth start
si tout va bien, vous devriez être capable de lancer avec succès
sudo sdptool browse local
enfin, réinitialisez l'adaptateur:
sudo hciconfig -a hci0 reset
les Choses fonctionnent bien maintenant
ancienne réponse
Juste à laisser les gens savent, je croire la dernière BlueZ
la construction a été en quelque sorte brisée dans mon système. J'ai téléchargé, compilé et installé le 5.35 version, et rien ne fonctionnait. J'ai composé en bas d' 5.34, toujours la même. J'ai aussi remarqué que l'adaptateur bluetooth descendait automatiquement 3-4 minutes après l'avoir activé en utilisant,
sudo hciconfig hci0 up # hci0 is the bt adapter
j'ai utilisé un dongle bluetooth usb pour tester. Il n'est pas tombé automatiquement comme l'adaptateur intégré, mais les problèmes persister. Ensuite, j'ai utilisé apt-get
réinstaller bluez
,
apt-get install --reinstall bluez
et tout d'un coup tout est redevenu normal.
encore une fois, comme sidmeister l'a mentionné, Assurez-vous que la commande sdptool browse local affiche l'erreur suivante:
échec de la connexion au serveur SDP sur FF:FF:FF:00:00:00:
Aucun fichier ou répertoire
mais, pour ceux qui utilisent initd system manager, il est difficile de trouver une solution si vous voulez exécuter sdp_rfcomm_server/client
le modèle et le terminal continueront à afficher la même erreur encore et encore.
Donc, pour init.d
suivez ces étapes:
Arrêter bluetooth premier
$ / etc / init.d / bluetooth stop
vérification de l'État
$ / etc / init.d / statut bluetooth
Exécuter bluetooth en mode de compatibilité(n'oubliez pas esperluette,autrement invite à ne pas tourner )
$ /usr/libexec/bluetooth/bluetoothd --compat&
démarrer bluetooth
$ / etc / init.d / bluetooth start
nouveau essayer de sdpbrowse
$ sdptool parcourir local
les choses devraient marcher pour vous maintenant.
correction:
bluetooth.btcommon.BluetoothError: (2, 'Aucun fichier ou répertoire')
Vous avez besoin de:
sudo nano /lib/systemd/system/bluetooth.service
- changement de:
ExecStart=/usr/lib/bluetooth/bluetoothd
- À:
ExecStart=/usr/lib/bluetooth/bluetoothd --compat
sudo systemctl daemon-reload