¿Cómo conectar el socket del servidor RFCOMM de pybluez en Debian?

Tengo estos fragmentos en python con framework pybluez:

from bluetooth import * server_sock=BluetoothSocket( RFCOMM ) server_sock.bind(("",PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" advertise_service( server_sock, "SampleServer", service_id = uuid # service_classes = [ uuid, SERIAL_PORT_CLASS ], # profiles = [ SERIAL_PORT_PROFILE ], # protocols = [ RFCOMM_UUID ] ) print "Waiting for connection on RFCOMM channel %d" % port client_sock, client_info = server_sock.accept() print "Accepted connection from ", client_info try: while True: data = client_sock.recv(1024) if len(data) == 0: break print "received [%s]" % data except IOError: pass print "disconnected" client_sock.close() server_sock.close() print "all done" 

y también tengo este otro fragmento de código en Android para conectar el socket del servidor rfcomm de pybluez:

 private static final UUID MY_UUID = UUID.fromString("94f39d29-7d6d-437d-973b-fba39e49d4ee"); .... BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(myServerMacAddress); .... BluetoothSocket tmp= device.createInsecureRfcommSocketToServiceRecord(MY_UUID); 

Mi problema es que el dispositivo Android no pudo conectarse al socket pybluez. Creo que la forma en que uso la conexión es incorrecta, y no sé cómo conectarme correctamente o anunciar mi socket de servidor

Ofrecí una recompensa, pero encontré la solución yo mismo. 🙂 Publicado en otra respuesta, pero esto también puede aplicarse a su problema. En ciertas versiones de Debian (Raspbian, etc.) y tal vez en otras distros. El server_sock.accept() por defecto simplemente se cuelga y nunca acepta una conexión, ¡incluso desde un dispositivo emparejado! En algunos casos, incluso estoy convencido de que el conector no está abierto en absoluto. Sin embargo, una solución a esto es realmente simple.

Actualice su archivo /etc/bluetooth/main.conf , agregue una línea o cambie el existente para que se vea así:

 DisablePlugins = pnat 

Luego reinicie el servicio de Bluetooth:

 sudo invoke –rc.d bluetooth restart 

Ahora puede haber sido arreglado.

¡Buena suerte!

Referencia: RFCOMM sin emparejamiento usando PyBluez en Debian?