17.2. Bluetooth

Bluetooth es una tecnología de radio que permite conectar distintos dispositivos, teléfonos móviles, PDAs, dispositivos periféricos o componentes del sistema como el teclado o el ratón y portátiles entre sí. El nombre tiene su origen en el rey danés Harold Blatand (en inglés “Harold Bluetooth”), que vivió en el siglo X en la región escandinava y logró unificar diversas fracciones enfrentadas. El logotipo de Bluetooth se basa en las runas de sus iniciales: “H” (semejante a una estrella) y “B”.

Bluetooth se diferencia de IrDA en algunos aspectos importantes: por una parte, los distintos dispositivos no deben “verse” necesariamente; por otra, varios dispositivos pueden agruparse y formar redes completas. No obstante, actualmente sólo pueden alcanzarse tasas de datos de hasta 720 Kbps como máximo (al menos en la versión actual 1.2). En teoría, con Bluetooth es posible establecer conexiones entre dispositivos separados por una pared. En la práctica, esto depende en gran medida de la pared y de la clase de dispositivo. Esta última determina el alcance máximo de la transmisión, que varía de diez a cien metros dependiendo de cuál de las tres clases se utilice.

17.2.1. Fundamentos

A continuación se describe a grandes rasgos el funcionamiento de Bluetooth, explicando temas como los requisitos de software, la interacción de Bluetooth con el sistema y el funcionamiento de los perfiles Bluetooth.

17.2.1.1. Software

Para poder utilizar Bluetooth es necesario contar con un adaptador Bluetooth (integrado en el dispositivo o bien como llave de hardware externa o dongle), controladores y la pila de protocolo para Bluetooth (“Bluetooth Protocol Stack”). El kernel de Linux contiene ya los controladores básicos para el uso de Bluetooth. En cuanto a la pila de protocolo se utiliza el sistema Bluez. Asimismo, los paquetes básicos bluez-libs y bluez-utils deben estar instalados para que las distintas aplicaciones funcionen con Bluetooth. Dichos paquetes proporcionan servicios o programas de servicio que el sistema necesita. Para algunos adaptadores (Broadcom, AVM BlueFritz!) se requiere además el paquete bluez-firmware. El paquete bluez-cups posibilita la impresión a través de conexiones Bluetooth.

17.2.1.2. Interacción general

Los sistemas Bluetooth están formados por cuatro capas interdependientes, cada una de las cuales cumple una función determinada:

Hardware

El adaptador y un controlador adecuado que garantiza el soporte en el kernel Linux.

Archivos de configuración

El control del sistema Bluetooth.

Daemons

Servicios que proporcionan diversas funciones y que están controlados a través de los archivos de configuración.

Aplicaciones

Programas que ponen al alcance del usuario las funciones proporcionadas por los daemons y que les permiten controlar dichas funciones.

Al conectar un adaptador Bluetooth, el controlador correspondiente se carga a través del sistema hotplug. Una vez que el controlador está cargado, se comprueba por medio de los archivos de configuración si Bluetooth debe iniciarse. En caso afirmativo, se determina qué servicios han de iniciarse y, en función de estos, se activan los daemons correspondientes. El sistema comprueba la existencia de adaptadores Bluetooth durante la instalación. Si se encuentra uno o varios, Bluetooth es activado. En caso contrario, el sistema Bluetooth se desactiva. Si se añade algún dispositivo Bluetooth con posterioridad, debe ser activado manualmente.

17.2.1.3. Perfiles

Los servicios en Bluetooth se definen por medio de perfiles. Así por ejemplo, en la versión estándar de Bluetooth existen perfiles para la transferencia de archivos (perfil “File Transfer”), la impresión (perfil “Basic Printing”) y las conexiones en red (perfil “Personal Area Network”).

Para que un dispositivo pueda utilizar un servicio de otro, ambos deben entender el mismo perfil. Desgraciadamente, ni la documentación ni la caja del dispositivo incluyen con frecuencia esta información. Otra dificultad añadida es que algunos fabricantes respetan escrupulosamente la definición de cada perfil y otros no. A pesar de ello, en la práctica los dispositivos consiguen “entenderse” por regla general.

En el texto siguiente, los dispositivos locales son aquellos conectados físicamente al ordenador. Los dispositivos a los que sólo puede accederse a través de conexiones inalámbricas se denominarán en adelante dispositivos remotos.

17.2.2. Configuración

A continuación se describe la configuración de Bluetooth. Entre los temas tratados cabe destacar los archivos de configuración relevantes, las herramientas de configuración necesarias y la posibilidad de configurar Bluetooth manualmente o con YaST.

17.2.2.1. Configuración de Bluetooth con YaST

El módulo Bluetooth de YaST (ver Figura 17.2, “YaST: configuración de Bluetooth”) le permite configurar el soporte Bluetooth. Tan pronto como hotplug detecta un adaptador Bluetooth en el sistema (por ejemplo durante el arranque o al conectarlo), Bluetooth se inicia con la configuración definida en este módulo.

Figura 17.2. YaST: configuración de Bluetooth

YaST: configuración de Bluetooth

En el primer paso de la configuración puede definir si los servicios Bluetooth han de iniciarse en el sistema. Si ya ha activado los servicios Bluetooth puede configurar dos cosas. En primer lugar el Nombre de dispositivo, que es el nombre mostrado por otros dispositivos cuando el ordenador es detectado. Para introducirlo puede utilizar dos comodines: %h, que sustituye al nombre de máquina (útil en los casos en los que este se asigne dinámicamente por DHCP) y %d, que sustituye al nombre de interfaz (de utilidad sólo si dispone de varios adaptadores Bluetooth en la máquina). Por ejemplo, si introduce en la casilla el nombre Laptop %h y DHCP asigna a la máquina el nombre unit123, otros dispositivos remotos mostrarán el equipo como Laptop unit123.

El segundo parámetro, Administrador de seguridad, afecta al comportamiento del sistema local cuando un dispositivo remoto intenta conectarse con el mismo. La diferencia radica en el uso del PIN. Existen varias posibilidades: permitir a cualquier dispositivo la conexión sin PIN o, en caso de que el PIN sea necesario, determinar cómo se elige. Puede introducir un PIN (guardado en un archivo de configuración) en la casilla de texto disponible a tal efecto. Cuando un dispositivo intente conectarse, utilizará primero este PIN. Si el mecanismo falla, se aplica la opción sin PIN. El nivel más alto de seguridad lo proporciona la tercera opción “Pedir siempre el PIN al usuario”. Esta le permite utilizar distintos PINS para dispositivos (remotos) diferentes.

Pulse el botón Configuración avanzada del daemon para acceder al diálogo de selección y configuración detallada de los servicios ofrecidos (o perfiles, como se denominan en Bluetooth). En el diálogo se muestra una lista de todos los servicios disponibles, los cuales puede activar o desactivar con los botones Activar o Desactivar. Pulsando Editar se activa una ventana emergente en la que es posible asignar distintos argumentos al servicio (daemon) seleccionado. Modifique las opciones predeterminadas sólo si conoce bien el servicio en cuestión. Después de configurar el daemon, salga de este diálogo con OK.

De vuelta en el diálogo principal, pulse el botón Opciones de seguridad para acceder al diálogo de seguridad. En él puede definir, entre otras, la configuración relacionada con la criptografía así como los métodos de autenticación y de sondeo. Una vez definida la configuración de seguridad, regresará al diálogo principal. Cuando salga de este diálogo con Finalizar, el sistema Bluetooth estará listo para el uso.

Desde el diálogo principal también es posible acceder a la ventana de Clases de dispositivos y servicios. Los dispositivos Bluetooth se dividen en varias “Clases de dispositivo”. En este diálogo puede escoger la que corresponda a su equipo como “equipo de sobremesa” o “portátil”. La clase de dispositivo no es muy importante a diferencia de la “Clase de servicio”, que también se define aquí. En ocasiones, los dispositivos Bluetooh remotos como los teléfonos móviles sólo permiten algunas funciones si en el sistema se ha detectado la clase de servicio adecuada. Este suele ser el caso de teléfonos móviles que esperan una clase llamada “Transferencia de objetos” antes de permitir la transferencia de archivos desde o hacia el ordenador. Aunque puede elegir varias clases, no se recomienda elegirlas todas “por si acaso”. La selección predeterminada resultará adecuada casi siempre.

Si desea utilizar Bluetooth para establecer una red, active el PAND en el diálogo Configuración avanzada del daemon y utilice la opción Editar para definir el modo del daemon. Para que la conexión de red Bluetooth funcione, pand debe operar en el modo de escucha (listen) y el conector en el de búsqueda (modo search). El modo predeterminado es el de escucha. Si es necesario, ajuste el modo del pand local. Asimismo, utilice el módulo de YaST Tarjetas de red para configurar la interfaz bnepX (X representa el número de dispositivo en el sistema).

17.2.2.2. Configuración manual de Bluetooth

Los archivos de configuración para los distintos componentes del sistema Bluez se recogen en el directorio /etc/bluetooth. La única excepción la constituye el archivo utilizado para iniciar los componentes, /etc/sysconfig/bluetooth, el cual es procesado por el módulo de YaST.

Los archivos de configuración que se describen a continuación sólo pueden ser modificados por root. Actualmente no existe ninguna interfaz gráfica para configurar todos los parámetros. Los más importantes pueden definirse mediante el módulo Bluetooth de YaST que se describe en la Sección 17.2.2.1, “Configuración de Bluetooth con YaST”. Las demás opciones de configuración sólo son relevantes para usuarios experimentados con necesidades específicas. Para el resto, las opciones predeterminadas serán suficientes en la mayoría de los casos.

Un número de identificación personal (PIN) constituye la primera medida de protección frente a conexiones no deseadas. Los teléfonos móviles suelen preguntar este PIN en el primer contacto (o al configurar en el teléfono el contacto con el dispositivo). Para que dos dispositivos puedan comunicarse entre sí, ambos deben identificarse con el mismo PIN. Este se encuentra almacenado en el ordenador en el archivo /etc/bluetooth/pin.

[Important]Seguridad en las conexiones Bluetooth

El uso de PINs no garantiza que la conexión entre dos dispositivos esté libre de escuchas por parte de terceros. Tenga presente que tanto la autenticación como la codificación de conexiones Bluetooth están desactivadas en la configuración predeterminada. Al activar ambas opciones puede ocurrir que se produzcan problemas en la comunicación con algunos dispositivos Bluetooth.

En el archivo de configuración /etc/bluetooth/hcid.conf es posible modificar algunas opciones de configuración tales como nombres de dispositivos y modos de seguridad. Los valores predeterminados de las opciones de configuración resultarán adecuados en casi todas las ocasiones. El archivo incluye comentarios que describen los parámetros posibles en las distintas opciones. Aquí nos limitaremos a mencionar dos de ellas.

El archivo contiene dos secciones llamadas options y device. La primera incluye información de carácter general que es utilizada por hcid durante el inicio. La segunda contiene opciones de configuración para cada uno de los dispositivos Bluetooth locales.

Una de las principales opciones de configuración de la sección options es security auto;. Si se le ha asignado el valor auto, hcid intenta usar el PIN local para las conexiones entrantes. Si este proceso falla, usa el valor predeterminado Ninguno y establece la conexión de todos modos. Para mantener un cierto nivel de seguridad se recomienda cambiar el valor predeterminado a user para que en cada conexión se le pida al usuario el PIN.

En la sección device se puede especificar el nombre con el que el ordenador será mostrado en el otro extremo de la conexión. También se define la clase de dispositivo (sobremesa, portátil, servidor, etc.) y se activa o desactiva la autenticación y la codificación.

17.2.3. Componentes del sistema y herramientas

El uso de Bluetooth sólo es posible gracias a la combinación de varios servicios. Como mínimo es necesario que dos daemons se estén ejecutando en segundo plano: hcid (Host Controller Interface), el cual actúa de interfaz con el dispositivo Bluetooth y lo controla, y sdpd (Service Discovery Protocol), que informa a un dispositivo remoto de los servicios que ofrece el ordenador. Tanto hcid como sdpd pueden iniciarse — en caso de que no haya sucedido automáticamente al arrancar el sistema — con el comando rcbluetooth start, que debe ser ejecutado como usuario root.

A continuación se describen las principales herramientas shell que pueden utilizarse para trabajar con Bluetooth. Aunque ya existen diversos componentes gráficos para manejar Bluetooth, se recomienda echar un vistazo a estos programas.

Algunos comandos sólo pueden ejecutarse como usuario root, como por ejemplo l2ping dirección_dispositivo, con el que se puede probar la conexión a un dispositivo remoto.

17.2.3.1. hcitool

Por medio de hcitool es posible averiguar si se han encontrado dispositivos locales y/o remotos. El comando hcitool dev muestra el propio dispositivo. Para cada dispositivo encontrado localmente se muestra una línea con la siguiente estructura: nombre_interfaz dirección_dispositivo.

Para detectar dispositivos remotos puede utilizarse el comando hcitool inq. La salida de este comando muestra tres valores por cada dispositivo encontrado: la dirección y la clase de dispositivo y una diferencia horaria. El valor más importante es la dirección de dispositivo, que es usada por otros comandos para identificar el dispositivo destino. La diferencia horaria es sólo interesante desde el punto de vista técnico. En cuanto a la clase de dispositivo, en ella se recoge el tipo de dispositivo y de servicio en forma de valor hexadecimal.

Con hcitool name dirección_dispositivo se puede averiguar el nombre de un dispositivo remoto. Si se trata por ejemplo de otro ordenador, la clase y nombre de dispositivo mostrados deben coincidir con la información recogida en el archivo /etc/bluetooth/hcid.conf de este ordenador. Las direcciones de dispositivos locales generan un mensaje de error.

17.2.3.2. hciconfig

/usr/sbin/hciconfig proporciona información adicional sobre el dispositivo local. Al ejecutar hciconfig sin argumentos se muestran datos del dispositivo como su nombre (hciX), la dirección física de dispositivo (un número de 12 cifras con el formato 00:12:34:56:78) e información sobre la cantidad de datos transmitidos.

hciconfig hci0 name muestra el nombre con el que el ordenador responde a solicitudes de dispositivos remotos. hciconfig no sólo sirve para ver la configuración del dispositivo local sino también para modificarla. Por ejemplo, el comando hciconfig hci0 name TEST cambia el nombre a TEST.

17.2.3.3. sdptool

El programa sdptool proporciona información sobre los servicios ofrecidos por un dispositivo determinado. El comando sdptool browse dirección_dispositivo muestra todos los servicios de un dispositivo, mientras que sdptool search abreviatura_servicio permite buscar un servicio concreto. Este comando pregunta a todos los dispositivos disponibles por el servicio deseado. Si este es ofrecido por alguno de los dispositivos, el programa proporciona al usuario el nombre completo del servicio ofrecido por el dispositivo junto con una breve descripción del mismo. Al ejecutar sdptool sin ningún parámetro se muestra una lista de todas las abreviaturas de servicios posibles.

17.2.4. Aplicaciones gráficas

Al introducir la URL bluetooth:/, Konqueror muestra los dispositivos Bluetooth locales y remotos. Pulsando dos veces con el ratón sobre un dispositivo aparece una lista con los servicios ofrecidos por el mismo. Cuando se mueve el ratón sobre uno de los servicios, se muestra en la ventana de estado de la parte inferior del navegador el perfil utilizado para dicho servicio. Al pulsar sobre un servicio se abre una ventana en la que puede elegir diversas acciones: guardar, utilizar el servicio (para ello debe iniciarse una aplicación) o cancelar la acción. Aquí también puede definir que la ventana no vuelva a mostrarse y que siempre se ejecute la acción seleccionada. Tenga en cuenta que algunos servicios (todavía) no están soportados y que para otros puede ser necesario añadir algunos paquetes.

17.2.5. Ejemplos

A continuación se presentan dos ejemplos típicos de posibles escenarios Bluetooth. El primero ilustra una conexión Bluetooth entre dos ordenadores y el segundo entre un ordenador y un teléfono móvil.

17.2.5.1. Conexión de red entre dos ordenadores C1 y C2

En el primer ejemplo se va a establecer una conexión de red entre dos ordenadores C1 y C2. Las direcciones de dispositivo Bluetooth de estos ordenadores son baddr1 y baddr2. Estas direcciones pueden averiguarse en ambos ordenadores con la ayuda del comando hcitool dev como se ha descrito arriba. Al final del proceso, los ordenadores han de poder verse con la dirección IP 192.168.1.3 (C1) y 192.168.1.4 (C2).

La conexión Bluetooth se establece por medio del programa pand (personal area networking). Los siguientes comandos deben ser ejecutados por root. La siguiente descripción se concentra en las acciones específicas de Bluetooth y no ofrece una explicación detallada del comando de red ip.

Introduzca el comando pand -s para iniciar pand en C1. A continuación puede establecer una conexión en C2 introduciendo el comando pand -c baddr1. Si ejecuta el comando ip link show en una de las máquinas para ver la lista de interfaces de red disponibles, obtendrá una entrada como la siguiente:

 bnep0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 
link/ether 00:12:34:56:89:90 brd ff:ff:ff:ff:ff:ff

En lugar de 00:12:34:56:89:90 aparecerá la dirección local del dispositivo baddr1 o bien baddr2. Ahora es necesario asignar una dirección IP a esta interfaz y seguidamente activarla. Para ello se ejecutan por ejemplo los siguientes comandos en C1:

ip addr add 192.168.1.3/24 dev bnep0
ip link set bnep0 up

o de forma análoga en C2

ip addr add 192.168.1.4/24 dev bnep0
ip link set bnep0 up

Ya es posible acceder a C1 desde C2 con la dirección IP 192.168.1.3. El comando ssh 192.168.1.4 le permite acceder a C2 desde C1 (siempre que sshd esté ejecutándose en C2, como es el caso en la configuración estándar de SUSE LINUX). El comando ssh 192.168.1.4 también puede ejecutarse como usuario “normal”.

17.2.5.2. Transmisión de datos desde un teléfono móvil al ordenador

En el segundo ejemplo, vamos a transmitir una imagen creada con un teléfono móvil con cámara a un ordenador sin incurrir en gastos adicionales como sería por ejemplo el envío de un mensaje multimedia. Tenga en cuenta que cada teléfono móvil dispone de una estructura de menús diferente, pero el proceso será parecido en casi todos ellos. En caso necesario, consulte las instrucciones del teléfono. A continuación se describe la transmisión de una fotografía desde un teléfono Sony Ericsson a un ordenador portátil. Para ello es necesario que el servicio Obex-Push esté disponible en el ordenador y que el ordenador permita el acceso del teléfono móvil. En el primer paso se activará el servicio en el portátil. Esto se realiza con el daemon opd incluido en el paquete bluez-utils. Para iniciar este daemon, ejecute el comando:

opd --mode OBEX --channel 10 --daemonize --path /tmp --sdp 

En este comando merece la pena destacar dos parámetros: el parámetro --sdp registra el servicio en sdpd y --path /tmp comunica al programa dónde debe almacenar los datos recibidos (en este caso en /tmp). Aquí también es posible introducir otras rutas. Para ello sólo necesita permiso de escritura en el directorio especificado.

A continuación, el teléfono debe “conocer” al ordenador. Con este fin, busque en el teléfono el menú Conexiones y seleccione la entrada Bluetooth. Si es necesario, pulse Activar antes de escoger el punto Dispositivos propios. Seleccione Nuevo dispositivo y espere a que el teléfono encuentre el portátil. Cuando se encuentra un dispositivo, este se muestra con su nombre en la pantalla del móvil. Seleccione el dispositivo que corresponda al portátil. A continuación se le preguntará por el PIN (aquí debe introducir el PIN que aparece en /etc/bluetooth/pin). Una vez introducido el PIN correcto, el teléfono y el portátil se “conocen” y pueden intercambiar datos. Salga del menú y pase al menú de fotografías. Seleccione la imagen que desea transmitir y pulse la tecla Más. Pulsando Enviar en el menú que aparece a continuación, podrá elegir la forma de envío: seleccione Bluetooth. Ahora debería poder definir el portátil como dispositivo destino. Tras efectuar esta selección, la fotografía es transmitida al portátil y guardada en el directorio especificado al ejecutar opd. Este procedimiento también puede emplearse para trasmitir otro tipo de datos, como por ejemplo un archivo de música.

17.2.6. Posibles problemas y sus soluciones

En caso de problemas de conexión se recomienda comprobar los siguientes puntos. No obstante, tenga siempre presente que el problema puede residir en cualquiera de los extremos de la conexión o, en el peor de los casos, en ambos. Si es posible, reconstruya el problema con un dispositivo Bluetooth distinto para excluir así fallos en el dispositivo:

¿Aparece el dispositivo local en la salida de hcitool dev?

Si el dispositivo local no aparece en la salida de este comando, es posible que hcid no se haya iniciado o que el dispositivo no sea detectado como dispositivo Bluetooth. Esto puede obedecer a distintas causas, como que el dispositivo esté estropeado o falte el controlador adecuado. En el caso de portátiles con Bluetooth incorporado suele haber un interruptor para dispositivos operados por radio como WLAN y Bluetooth. Consulte en la documentación del fabricante si el portátil dispone de un interruptor de este tipo. Reinicie el sistema Bluetooth con rcbluetooth restart y examine el archivo /var/log/messages para ver si hay mensajes de error.

¿Necesita el adaptador Bluetooth un archivo Firmware?

En este caso instale bluez-bluefw y reinicie el sistema Bluetooth con rcbluetooth restart.

¿Aparecen en la salida de hcitool inq otros dispositivos?

En este caso vuelva a probar de nuevo; puede que hubiera algún problema con la conexión la primera vez. La banda de frecuencia de Bluetooth es utilizada también por otros dispositivos.

¿Coinciden los PINs?

Compruebe si el PIN en /etc/bluetooth/pin y el PIN del dispositivo destino coinciden.

¿El otro dispositivo puede “ver” su ordenador?

Intente iniciar la conexión desde otro dispositivo y compruebe si el nuevo dispositivo “ve” al ordenador.

¿Es posible establecer una conexión de red (ejemplo 1)?

Si el primer ejemplo (conexión de red) no funciona puede deberse a distintas causas. Por ejemplo, puede ser que uno de los dos ordenadores no entienda el protocolo ssh. Pruebe a ejecutar el comando ping 192.168.1.3 o ping 192.168.1.4. En caso de obtener respuesta, compruebe si sshd está activo. Otra posible causa es que ya disponga de otras direcciones que entren en conflicto con las direcciones utilizadas en el ejemplo 192.168.1.X. Repita el proceso con otras direcciones, como por ejemplo 10.123.1.2 y 10.123.1.3.

¿Aparece el portátil como dispositivo destino (ejemplo 2)? ¿Detecta el teléfono móvil el servicio Obex-Push en el portátil?

Vaya al menú Dispositivos propios, seleccione el dispositivo correspondiente y consulte la Lista de servicios. Si en ella no aparece Obex-Push (aún después de actualizar la lista), la causa del problema es opd en el portátil. ¿Se ha iniciado opd? ¿Tiene permiso de escritura en el directorio especificado?

¿Funciona el segundo ejemplo también a la inversa?

Si ha instalado el paquete obexftp, la transmisión de datos funciona en algunos teléfonos con el comando obexftp -b dirección_dispositivo -B 10 -p nombre_imagen. Se han probado distintos modelos de las marcas Siemens y Sony Ericsson y funcionan. Vea a este respecto la documentación del paquete en /usr/share/doc/packages/obexftp.

17.2.7. Información adicional

Puede encontrar una amplia lista de documentación relacionada con el funcionamiento y la configuración de Bluetooth en: http://www.holtmann.org/linux/bluetooth/. Otras fuentes de información útiles:


SUSE LINUX Manual de administración 9.3