Bluetooth en Linux
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:
- Bluepin: Gestión de suministro del PIN para emparejamiento con otros dispositivos.
- Hciattach: Configuración de dispositivos serial UART (Universal Asynchronous Receiver/Transmitter) como interfaces HCI Bluetooth.
- Hciconfig: Configuración de dispositivos Bluetooth locales.
- Hcid: Demonio interfaz HCI.
- Hcidump: Sniffer local de tráfico HCI que entra y sale por el dispositivo Bluetooth instalado en el sistema.
- Hcitool: Gestión del enlace con otros dispositivos Bluetooth, detección de dispositivos remotos, resolución de nombres, identificación de clases, etc.
- L2ping: Envío de solicitudes echo request (pings) a nivel L2CAP.
- Pand: Gestión de conexiones PAN (Personal Area Network)
- Rfcomm: Gestión de conexiones RFCOMM
- Sdpd: Demonio del protocolo de descubrimiento de servicios SDP. Se encarga de proporcionar acceso a los servicios Bluetooth locales.
- Sdptool: Gestión de SDP (Service Discovery Protocol), descubrimiento de servicios Bluetooth en dispositivos remotos.
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:
- bluez-libs-x.x.tar.gz (Librerías básicas Bluetooth)
- bluez-libs-devel-x.x.tar.gz (Librerías de desarrollo Bluetooth)
- bluez-utils-x.x.tar.gz (Herramientas Bluetooth)
- bluez-firmware-x.x.tar.gz (Actualización de firmware)
- bluez-hcidump-x.x.tar.gz (Sniffer local de tráfico HCI)
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.
