Bluetooth en Linux

Tabla de contenidos

La pila de protocolos BlueZ para Linux
Interconexión con dispositivos Bluetooth desde Linux
   Configuración del dispositivo Bluetooth local
   Configuración de opciones del interfaz HCI
   Detección de dispositivos Bluetooth con Hcitool
   Descubrimiento de servicios Bluetooth con Sdptool
   Conexión a un servicio de otro dispositivo

La pila de protocolos BlueZ para Linux


BlueZ es la pila de protocolos Bluetooth oficial para Linux. Inicialmente desarrollado por Qualcomm, ahora es un proyecto open source distribuido bajo licencia GPL (GNU General Public License). El núcleo de BlueZ forma parte del kernel oficial de Linux desde la versión 2.4.6.

La página oficial del proyecto BlueZ es http://www.bluez.org

El núcleo de BlueZ viene acompañado por un conjunto de herramientas que permiten ejecutar las funciones Bluetooth implementadas en la pila de protocolos desde una shell de comandos. Estas herramientas son las siguientes:

La mayoría de las herramientas mencionadas se encuentran instaladas por defecto en aquellas distribuciones Linux que incorporan el núcleo de BlueZ. Sin embargo, también es posible obtener las herramientas y librerías necesarias para el funcionamiento de BlueZ por medio de módulos del núcleo BlueZ. Estos módulos se encuentran disponibles para descarga en http://www.bluez.org/download.html y son los siguientes:

Así mismo, también es posible obtener estos módulos en forma de paquetes precompilados dependientes de cada distribución



Interconexión con dispositivos Bluetooth desde Linux


La pila de protocolos Bluetooth para Linux, BlueZ, permite conectar un PC con dispositivos Bluetooth remotos. Las diferentes herramientas que incluye BlueZ permiten detectar dispositivos Bluetooth cercanos, obtener información básica de los mismos y conectarse a los servicios que soportan.

Configuración del dispositivo Bluetooth local

El primer paso es conectar al PC el módulo Bluetooth que se va a emplear para la comunicación con otros dispositivos. Linux debería reconocer automáticamente el dispositivo sin necesidad de instalar drivers. No obstante, es posible que algún módulo Bluetooth requiera la instalación adicional de drivers en el sistema antes de utilizarlo. En tal caso, se debe consultar con el fabricante.

Así mismo, lo más habitual es que Linux monte automáticamente en el interfaz hci0 el módulo Bluetooth conectado, pero en algunas distribuciones puede no suceder. La verificación se realiza mediante la herramienta Hciconfig.




En caso de que el dispositivo Bluetooth no se haya montado automáticamente, será necesario montarlo manualmente con la herramienta Hciconfig.



Configuración de opciones del interfaz HCI

Antes de establecer comunicación con otro dispositivo Bluetooth, se debe configurar el fichero de opciones de HCI, localizado en /etc/bluetooth/hcid.conf.

Es recomendable utilizar la siguiente configuración para hcid.conf:

# HCId options
options {
      # Automatically initialize new devices
      autoinit yes;

      # Security Manager mode
      #   none - Security manager disabled
      #   auto - Use local PIN for incoming connections
      #   user - Always ask user for a PIN
      security auto;

      # Pairing mode
      #   none - Pairing disabled
      #   multi - Allow pairing with already paired devices
      #   once- Pair once and deny successive attempts
      pairing multi;

      # PIN helper
      pin_helper /usr/bin/bluepin;
}

# Default settings for HCI devices
device {
      # Local device name
      #   %d - device id
      #   %h - host name
      name "GospelFC5";

      # Local device class
      class 0x120104;

      # Inquiry and Page scan
      iscan enable; pscan enable;

      # Default link mode
      #   none- no specific policy
      #   accept - always accept incoming connections
      #   master - become master on incoming connections, 
      #            deny role switch on outgoing connections
      lm accept;

      # Default link policy
      #   none- no specific policy
      #   rswitch - allow role switch
      #   hold- allow hold mode
      #   sniff- allow sniff mode
      #   park- allow park mode
      lp rswitch,hold,sniff,park;

      # Authentication and Encryption (Security Mode 3)
      #   auth enable;
      #   encrypt enable;
}

Tras aplicar los cambios, se procede a la reinicializacion de los servicios Bluetooth.



Detección de dispositivos Bluetooth con Hcitool

La herramienta Hcitool permite enviar paquetes inquiry para detectar la existencia de dispositivos Bluetooth cercanos.




Así mismo, también es posible obtener cierta información sobre los dispositivos detectados, como su Class of Device/Service y su nombre de dispositivo.



Descubrimiento de servicios Bluetooth con Sdptool

La herramienta Sdptool permite identificar los perfiles disponibles en un dispositivo Bluetooth detectado, por ejemplo, un teléfono móvil.



Conexión a un servicio de otro dispositivo

Sdptool permite obtener una lista de perfiles soportados por un dispositivo Bluetooth remoto, que incluye información detalla sobre las características de cada perfil, incluyendo el canal asociado.

Con ayuda de la herramienta Rfcomm, es posible conectarse a un determinado servicio conociendo la dirección BD_ADDR y el canal destino. Como ejemplo, se describe la conexión al Perfil de Transferencia de Archivos (OBEX File Transfer) del teléfono móvil, cuyo canal correspondiente es el 10.




El intento de conexión inicia el procedimiento de autenticación. En el teléfono móvil aparecerá una notificación de emparejamiento de dispositivos Bluetooth, que requerirá la introducción de un código PIN. Tras la confirmación, aparecerá una ventana en el interfaz de Linux solicitando la introducción del mismo código PIN al usuario.

 


Si el código PIN coincide, los dispositivos quedan emparejados y se establece la conexión a nivel de enlace. Sin embargo, antes de poder acceder al servicio, hay que superar con éxito el procedimiento de autorización. En este caso, el dispositivo Bluetooth conectado al PC con Linux no estaba incluido en la lista de dispositivos de confianza del teléfono móvil, por lo que se hace necesario que el usuario del teléfono móvil confirme la autorización de acceso del dispositivo remoto al servicio OBEX File Transfer.




Tras la confirmación de la autorización, Linux puede acceder al servicio y establecer la conexión a nivel de aplicación.

© 2005 - 2011 Alberto Moreno Tablado