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_servicebluetooth 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é.

8
demandé sur Sidmeister 2015-10-13 22:26:20

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.

18
répondu Sidmeister 2016-05-10 17:51:26

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:

  1. Arrêter bluetooth premier

    $ / etc / init.d / bluetooth stop

  2. vérification de l'État

    $ / etc / init.d / statut bluetooth

  3. Exécuter bluetooth en mode de compatibilité(n'oubliez pas esperluette,autrement invite à ne pas tourner )

    $ /usr/libexec/bluetooth/bluetoothd --compat&

  4. démarrer bluetooth

    $ / etc / init.d / bluetooth start

  5. nouveau essayer de sdpbrowse

    $ sdptool parcourir local

les choses devraient marcher pour vous maintenant.

0
répondu Gaurav Kumar 2017-02-02 11:20:53

correction:

bluetooth.btcommon.BluetoothError: (2, 'Aucun fichier ou répertoire')

Vous avez besoin de:

  1. sudo nano /lib/systemd/system/bluetooth.service
  2. changement de:ExecStart=/usr/lib/bluetooth/bluetoothd
  3. À: ExecStart=/usr/lib/bluetooth/bluetoothd --compat
  4. sudo systemctl daemon-reload
0
répondu Pedro Lobito 2018-03-11 14:28:30