title: RFCOMM without pairing using PyBluez on Debian?
body: <p>I am trying to create an RFCOMM server process with Python that can be used without the need for pairing. Initially, I grabbed the two example scripts from the PyBluez documentation:</p>
  
  <p>Server:</p>
  
  <pre><code># file: rfcomm-server.py
  
  # auth: Albert Huang &lt;albert@csail.mit.edu&gt;
  # desc: simple demonstration of a server application that uses RFCOMM sockets
  #
  # $Id: rfcomm-server.py 518 2007-08-10 07:20:07Z albert $
  
  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 = [ OBEX_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"
  </code></pre>
  
  <p>Client:</p>
  
  <pre><code># file: rfcomm-client.py
  # auth: Albert Huang &lt;albert@csail.mit.edu&gt;
  # desc: simple demonstration of a client application that uses RFCOMM sockets
  #       intended for use with rfcomm-server
  #
  # $Id: rfcomm-client.py 424 2006-08-24 03:35:54Z albert $
  
  from bluetooth import *
  import sys
  
  addr = None
  
  if len(sys.argv) &lt; 2:
      print "no device specified.  Searching all nearby bluetooth devices for"
      print "the SampleServer service"
  else:
      addr = sys.argv[1]
      print "Searching for SampleServer on %s" % addr
  
  # search for the SampleServer service
  uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
  service_matches = find_service( uuid = uuid, address = addr )
  
  if len(service_matches) == 0:
      print "couldn't find the SampleServer service =("
      sys.exit(0)
  
  first_match = service_matches[0]
  port = first_match["port"]
  name = first_match["name"]
  host = first_match["host"]
  
  print "connecting to \"%s\" on %s" % (name, host)
  
  # Create the client socket
  sock=BluetoothSocket( RFCOMM )
  sock.connect((host, port))
  
  print "connected.  type stuff"
  while True:
      data = raw_input()
      if len(data) == 0: break
      sock.send(data)
  
  sock.close()
  </code></pre>
  
  <p>When I ran the server script on Windows everything worked just how I had hoped - no pairing was necessary. At this stage everything was looking very promising.</p>
  
  <p>However, I need the server process to run under Debian Squeeze. When I test on Debian the client connection is refused. In the syslog there are messages from bluetoothd for a failed link key request and PIN request.</p>
  
  <p>Version information:</p>
  
  <ul>
  <li>PyBluez 0.18</li>
  <li>Python 2.6</li>
  <li>Bluez 4.66</li>
  <li>Bluetooth v2.0 hardware on both ends of the connection</li>
  </ul>
  
  <p><a href="http://permalink.gmane.org/gmane.linux.bluez.kernel/13828" rel="noreferrer">This discussion</a> seems to suggest that if I can adjust the security level on the server socket then pairing will be disabled and everything will just work as expected. It is not apparent to me how to do this with PyBluez though, or even if it is possible.</p>
  
  <p>I have experimented with calls to setsockopt() using various BT_SECURITY* constants, as well as grabbing the last PyBluez and calling setl2capsecurity() but have not been able to make any progress.</p>
  
  <p>Is this going to be achievable with PyBluez?</p>