34.2. Bluetooth

Bluetooth es una tecnología inalámbrica que permite conectar varios dispositivos, como teléfonos móviles, PDA, dispositivos periféricos o componentes del sistema, como el teclado o el ratón. El nombre tiene su origen en el rey danés Harold Bluetooth, que logró unir varias facciones enfrentadas de la región escandinava. El logotipo de Bluetooth se basa en las runas de sus iniciales “H” (parecido a una estrella) y “B.

Bluetooth se diferencia de IrDA en algunos aspectos importantes: por una parte, los dispositivos no necesitan “verse” el uno al otro directamente y, por otra, varios dispositivos pueden agruparse y formar redes completas. No obstante, la transferencia máxima de datos es de 720 Kbps (en la versión actual, que es la 1.2). En teoría, con Bluetooth se pueden establecer conexiones entre dispositivos separados por una pared. En la práctica, sin embargo, esto depende del tipo de pared y de la clase de dispositivos. Existen tres clases de dispositivos con alcances de transmisión de entre 10 y 100 metros.

34.2.1. Fundamentos

En las siguientes secciones se describen los principios básicos del funcionamiento de Bluetooth. Conozca qué requisitos de software se deben cumplir, cómo interactúa Bluetooth con su sistema y cómo configura Bluetooth el trabajo mediante perfiles.

34.2.1.1. Software

Para poder utilizar Bluetooth es necesario contar con un adaptador Bluetooth (integrado en el dispositivo o bien un dispositivo externo), controladores y el stack de protocolo para Bluetooth. El núcleo de Linux contiene ya los controladores básicos para usar Bluetooth. En cuanto al stack de protocolo, se utiliza el sistema Bluez. Para asegurarse de que las aplicaciones funcionan con Bluetooth, es necesario instalar los paquetes básicos bluez-libs y bluez-utils. Dichos paquetes proporcionan servicios y utilidades que el sistema necesita. Además, para algunos adaptadores como Broadcom o AVM BlueFritz!, se requiere también el paquete bluez-firmware. El paquete bluez-cups permite imprimir a través de conexiones Bluetooth. Si tiene que depurar problemas relacionados con las conexiones Bluetooth, instale el paquete bluez-hcidump.

34.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 la compatibilidad con el núcleo de Linux.

Archivos de configuración

Se utilizan para controlar el 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 deben iniciarse y, dependiendo de estos datos, se activan los daemons correspondientes. Los adaptadores de Bluetooth se prueban en la instalación. Si se encuentran uno o varios, Bluetooth se activa. De lo contrario, el sistema Bluetooth se desactiva. Los dispositivos Bluetooth que se añadan posteriormente deberán habilitarse de forma manual.

34.2.1.3. Perfiles

Los servicios en Bluetooth se definen por medio de perfiles como, por ejemplo, el perfil de transferencia de archivos, el perfil de impresión básica y el perfil de red de área personal. Para que un dispositivo pueda utilizar un servicio de otro, ambos deben entender el mismo perfil. Desafortunadamente, ni el manual ni la caja del dispositivo suelen incluir esta información. Otro problema es que algunos fabricantes respetan escrupulosamente la definición de los perfiles individuales, pero otros no. A pesar de todo esto, las comunicaciones entre los dispositivos suelen funcionar sin problema.

En el siguiente texto, los dispositivos locales son los que están conectados físicamente al equipo. Los demás dispositivos que sólo pueden acceder mediante conexiones inalámbricas reciben el nombre de "dispositivos remotos".

34.2.2. Configuración

En esta sección se presenta la configuración de Bluetooth. Conozca qué archivos de configuración participan, qué herramientas se necesitan y cómo se configura Bluetooth con YaST o de forma manual.

34.2.2.1. Configuración de Bluetooth con YaST

El módulo Bluetooth de YaST (que se muestra en la Figura 34.2, “Configuración de Bluetooth con YaST”) le permite configurar la compatibilidad de Bluetooth con su sistema. En el momento en que HotPlug detecta un adaptador Bluetooth en el sistema (por ejemplo, durante el arranque o cuando se conecta un adaptador), Bluetooth se inicia automáticamente con los ajustes establecidos en este módulo.

Figura 34.2. Configuración de Bluetooth con YaST

Configuración de Bluetooth con YaST

En el primer paso de la configuración, debe determinar si los servicios Bluetooth tienen que iniciarse en el sistema. Si ha habilitado los servicios de Bluetooth, hay dos cosas que se pueden configurar. En primer lugar, el Nombre del dispositivo. Éste es el nombre que muestran otros dispositivos cuando se detecta su equipo. Hay dos marcadores de posición disponibles: %h hace referencia al nombre de host del sistema (es útil, por ejemplo, si se usa una asignación dinámica mediante DHCP) y %d, que inserta el número de interfaz (es útil sólo si dispone de más de un adaptador Bluetooth en el equipo). Por ejemplo, si escribe Portátil %h en el campo y DHCP asigna el nombre unit123 al equipo, los demás dispositivos remotos verán su equipo con el nombre Portátil unit123.

El parámetro Administrador de seguridad está relacionado con el comportamiento del sistema local cuando un dispositivo remoto intenta conectarse. La diferencia radica en la gestión que se hace del número PIN. Se puede establecer que cualquier dispositivo pueda conectarse sin usar un PIN o se puede determinar cómo se elige el PIN correcto en caso de que se necesite uno. Puede especificar un PIN (almacenado en un archivo de configuración) en el campo de entrada pertinente. Si un dispositivo intenta conectarse, usará en primer lugar este PIN. Si falla, intentará conectarse sin PIN. Para obtener la mayor seguridad, se aconseja elegir Pedir siempre el PIN al usuario. Esta opción permite usar diferentes PIN para los distintos dispositivos remotos.

Haga clic en Configuración avanzada del daemon para acceder al cuadro de diálogo con objeto de seleccionar y configurar los servicios disponibles (llamados perfiles en Bluetooth). Se muestra una lista de todos los servicios disponibles, los cuales puede activar o desactivar con los botones de activación o desactivación. Haga clic en Editar para abrir un cuadro de diálogo en el que podrá especificar argumentos adicionales para el servicio seleccionado (daemon). No haga ningún cambio, a menos que esté familiarizado con el servicio. Después de configurar el daemon, salga de este cuadro de diálogo haciendo clic en Aceptar.

En el cuadro de diálogo principal, haga clic en Opciones de seguridad para acceder al cuadro de diálogo de seguridad con objeto de especificar las opciones de cifrado, autenticación y exploración. A continuación, salga del cuadro de diálogo de seguridad para volver al principal. Cuando cierre el cuadro de diálogo principal con la opción Finalizar, el sistema Bluetooth estará listo para su uso.

Desde el cuadro de diálogo principal, puede acceder también al cuadro de diálogo Clases de dispositivos y servicios. Los dispositivos Bluetooth se agrupan en distintas clases de dispositivos. En este cuadro de diálogo, elija la clase adecuada para su equipo como, por ejemplo, Escritorio o Portátil. La clase de dispositivo no es muy relevante, a diferencia de las clases de servicios, que también se configuran aquí. En ocasiones, los dispositivos Bluetooth remotos como, por ejemplo, los teléfonos móviles, sólo permiten ciertas funciones si pueden detectar la clase de servicios adecuada establecida en el sistema. Suele ser el caso de los teléfonos móviles que esperan una clase llamada Transferencia de objetos antes de permitir la transferencia de archivos con el equipo. Puede elegir varias clases, aunque no es eficaz seleccionarlas todas sólo “por si acaso”. La selección por defecto suele ser adecuada en la mayoría de los casos.

Para usar Bluetooth para configurar una red, active PAND en el cuadro de diálogo Configuración avanzada del daemon y defina el modo del daemon con Editar. Para que la conexión de red Bluetooth funcione, pand debe operar en el modo de escucha y el par en el modo de búsqueda. El modo por defecto es el de escucha. Si es necesario, ajuste el modo del pand local. Además, configure le interfaz bnepX (X hace referencia al número de dispositivo en el sistema) en el módulo Tarjeta de red de YaST.

34.2.2.2. Configuración manual de Bluetooth

Los archivos de configuración para los distintos componentes del sistema Bluez se encuentran en el directorio /etc/bluetooth. La única excepción es el archivo /etc/sysconfig/bluetooth para iniciar los componentes, y que se modifica mediante el módulo YaST.

Los archivos de configuración que se describen a continuación sólo puede modificarlos el usuario Root. Actualmente no hay ninguna interfaz gráfica que permita cambiar todos los ajustes, aunque los más importantes se pueden definir usando el módulo Bluetooth de YaST, que se describe en Sección 34.2.2.1, “Configuración de Bluetooth con YaST”. Los demás ajustes sólo deben modificarlos los usuarios experimentados en circunstancias especiales. No obstante, los ajustes por defecto suelen ser adecuados.

Un número PIN proporciona una protección básica frente a conexiones no deseadas. Los teléfonos móviles suelen pedir este número PIN cuando establecen el primer contacto (o al configurar un contacto de dispositivo en el teléfono). Para que dos dispositivos puedan comunicarse entre sí, ambos deben identificarse con el mismo PIN. En el equipo, el número PIN se encuentra en el archivo /etc/bluetooth/pin.

[Important]Seguridad en las conexiones Bluetooth

El uso de números PIN no garantiza que la transmisión entre dos dispositivos sea totalmente segura. Tenga en cuenta que tanto la autenticación como el cifrado de las conexiones Bluetooth están desactivados por defecto. La activación de la autenticación y del cifrado puede provocar problemas de comunicación con algunos dispositivos Bluetooth.

En el archivo de configuración /etc/bluetooth/hcid.conf se pueden modificar varios ajustes, tales como los nombres de dispositivos y el modo de seguridad. No obstante, los ajustes por defecto suelen ser adecuados. El archivo incluye comentarios que describen las opciones de los distintos ajustes.

En el archivo se incluyen dos secciones, una de ellas dedicada a las opciones y otra a los dispositivos. La primera contiene información general que usa hcid para el inicio. La segunda sección incluye ajustes para cada dispositivo Bluetooth local.

Uno de los ajustes más importantes de la sección de opciones es security auto; (Seguridad automática). Si se configura en auto (Automática), hcid intentará usar el PIN local para las conexiones entrantes. Si se produce un fallo, cambiará a none (Ninguno) y se establecerá la conexión de todos modos. Para obtener una mayor seguridad, este ajuste por defecto debe establecerse en user (Usuario) con objeto de asegurarse de que se solicite un número PIN al usuario cada vez que se establezca una conexión.

En la sección de dispositivos puede especificar el nombre con el que se mostrará el equipo en el otro extremo de la conexión. En esta sección se define la clase de dispositivo como, por ejemplo, Desktop (Escritorio), Laptop (Portátil) o Server (Servidor). La autenticación y el cifrado también se habilitan o inhabilitan desde aquí.

34.2.3. Utilidades y componentes del sistema

El uso de Bluetooth depende de la interacción de varios servicios. Como mínimo, es necesario que se estén ejecutando dos daemons en segundo plano: hcid (daemon de la interfaz del controlador del host), que actúa como interfaz del dispositivo Bluetooth y lo controla; y sdpd (daemon del protocolo de descubrimiento de servicios), mediante el cual un dispositivo puede averiguar qué servicios ofrece el host. Si no se activan automáticamente al iniciar el sistema, tanto hcid como sdpd puede activarse con el comando rcbluetooth start. Este comando se debe ejecutar como usuario Root.

A continuación, se describen las principales herramientas de shell que se pueden usar para trabajar con Bluetooth. Aunque ya existen diversos componentes gráficos para manejar Bluetooth, merece la pena conocer estos programas.

Algunos de estos comandos sólo se pueden ejecutar como usuario Root, por ejemplo, el comando l2ping device_address, con el que puede probar la conexión a un dispositivo remoto.

34.2.3.1. hcitool

Mediante hcitool es posible averiguar si se han encontrado dispositivos locales y remotos. El comando hcitool dev muestra una lista de los dispositivos locales. La salida genera una línea con el formato nombre_interfaz dirección_dispositivo para cada dispositivo local detectado.

Para detectar dispositivos remotos, puede utilizarse el comando hcitool inq. Se devuelven tres valores para cada dispositivo detectado: la dirección del dispositivo, la diferencia horaria y la clase de dispositivo. La dirección del dispositivo es importante porque los otros comandos la usan para identificar el dispositivo de destino. La diferencia horaria se usa fundamentalmente para propósitos técnicos. La clase hace referencia al tipo de dispositivo y de servicio como un valor hexadecimal.

El comando hcitool name dirección_dispositivo se puede usar para determinar el nombre de un dispositivo remoto. Si se trata de un equipo remoto, la clase y el nombre de dispositivo deben coincidir con la información que figura en /etc/bluetooth/hcid.conf. Las direcciones de los dispositivos locales generan un error.

34.2.3.2. hciconfig

El comando /usr/sbin/hciconfig proporciona información adicional sobre el dispositivo local. Si hciconfig se ejecuta sin argumentos, la salida mostrará la información del dispositivo como, por ejemplo, el nombre del dispositivo (hciX), la dirección del dispositivo físico (un número de 12 dígitos con el formato 00:12:34:56:78), así como información acerca de la cantidad de datos transmitidos.

hciconfig hci0 name muestra el nombre que devuelve el equipo cuando recibe peticiones desde dispositivos remotos. El comando hciconfig no sólo sirve para ver los ajustes del dispositivo local, sino también para modificarlos. Por ejemplo, el comando hciconfig hci0 name PRUEBA asigna al dispositivo el nombre PRUEBA.

34.2.3.3. sdptool

El programa sdptool se puede usar para comprobar qué servicios ofrece un dispositivo específico. El comando sdptool browse dirección_dispositivo muestra todos los servicios de un dispositivo, mientras que sdptool search código_servicio permite buscar un servicio concreto. Este comando analiza todos los servicios accesibles para el servicio solicitado. Si uno de los dispositivos ofrece el servicio, el programa imprime el nombre completo del servicio devuelto por el dispositivo junto con una breve descripción. Al ejecutar sdptool sin ningún parámetro, se muestra una lista con todos los códigos de servicio posibles.

34.2.4. Aplicaciones gráficas

En Konqueror, escriba la dirección URL bluetooth:/ para que se muestren los dispositivos Bluetooth locales y remotos. Haga doble clic en un dispositivo para ver una descripción de los servicios ofrecidos por el dispositivo. Si se desplaza con el ratón por los distintos servicios especificados, en la barra de estado del navegador se mostrará qué perfil está usando el servicio. Si hace clic en un servicio, se abrirá un cuadro de diálogo donde debe indicar la acción que desea realizar: guardar, usar el servicio (para ello deberá iniciarse una aplicación) o cancelar la acción. Marque una casilla de verificación si no desea que se muestre de nuevo el cuadro de diálogo y que se realice siempre la acción seleccionada. Todavía no es posible usar algunos servicios y para otros es necesario instalar paquetes adicionales.

34.2.5. Ejemplos

En esta sección encontrará dos ejemplos de uso típicos de Bluetooth. El primero de ellos muestra cómo se puede establecer una conexión de red entre dos hosts usando Bluetooth. En la segunda, se describe una conexión entre un equipo y un teléfono móvil.

34.2.5.1. Conexión de red entre dos hosts

En el primer ejemplo, se establece una conexión de red entre los hosts H1 y H2. Estos dos hosts cuentan con direcciones de dispositivo Bluetooth baddr1 y baddr2 (estas direcciones se averiguan en los dos hosts mediante el comando hcitool dev, tal y como se describe arriba). Los hosts deben identificarse con las direcciones IP 192.168.1.3 (H1) y 192.168.1.4 (H2).

La conexión Bluetooth se establece con la ayuda del daemon pand (daemon de red de área personal). Los siguientes comandos debe ejecutarlos el usuario Root. La descripción se centra en las acciones específicas de Bluetooth y no se proporciona una explicación detallada del comando de red ip.

Escriba pand -s para iniciar el daemon pand en el host H1. Posteriormente, se puede establecer una conexión con el host H2 usando pand -c baddr1. Si especifica ip link show en uno de los hosts para mostrar las interfaces de red disponibles, el resultado debe contener 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, la salida debe contener la dirección del dispositivo local baddr1 o baddr2. Ahora es necesario asignar a esta interfaz una dirección IP y, a continuación, activarla. En H1, esto se puede llevar a cabo con los dos comandos siguientes:

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

En H2:

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

Ahora se puede acceder a H1 desde H2 usando la dirección IP 192.168.1.3. El comando ssh 192.168.1.4 le permite acceder a H2 desde H1, siempre que H2 ejecute un sshd, que esté activado por defecto en SUSE Linux. El comando ssh 192.168.1.4 también se puede ejecutar como un usuario normal.

34.2.5.2. Transmisión de datos de un teléfono móvil a un equipo

En este segundo ejemplo se va a mostrar cómo se transfiere una fotografía creada con un teléfono móvil con cámara digital incorporada a un equipo (sin incurrir en los costes adicionales de transmisión de un mensaje multimedia). Aunque cada teléfono móvil dispone de una estructura de menús diferente, el procedimiento será prácticamente el mismo en todos ellos. Si es necesario, consulte la documentación del teléfono. En este ejemplo se describe cómo se transfiere una fotografía desde un teléfono móvil Sony Ericsson a un portátil. Es necesario que el equipo disponga de servicio Obex-Push y que permita el acceso del teléfono móvil. En el primer paso, se activará el servicio en el equipo portátil. Necesita ejecutar en el portátil un daemon de servicio especial para poder obtener los datos del teléfono. Si el paquete kbluetooth está instalado, no tendrá que iniciar ningún daemon especial. Si kbluetooth no está instalado, utilice el daemon opd del paquete bluez-utils. Inicie el daemon con el siguiente comando:

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

En este comando se utilizan dos parámetros importantes: --sdp registra el servicio sdpd y --path /tmp indica al programa dónde se deben guardar los datos recibidos (en este caso, en /tmp). Aquí también puede especificar otros directorios en los que tenga acceso de escritura.

Si utiliza kbluetooth, se le solicitará que indique un directorio cuando el portátil reciba la fotografía.

A continuación, el teléfono móvil debe ponerse en contacto con el equipo. Para ello, busque en el teléfono el menú Connect (Conexiones) y seleccione Bluetooth. Si es necesario, haga clic en Turn On (Activar) antes de seleccionar My devices (Mis dispositivos). Seleccione New device (Nuevo dispositivo) y deje que el teléfono busque el portátil. Si se detecta un dispositivo, su nombre aparecerá en la pantalla. Seleccione el dispositivo asociado al equipo portátil. Si se le solicita el número PIN, escriba el número especificado en /etc/bluetooth/pin. Ahora el teléfono y el portátil se reconocen y pueden intercambiar datos. Salga del menú actual y acceda al menú de imágenes. Seleccione la imagen que desee transferir y pulse More (Más). En el siguiente menú, pulse Send (Enviar) para seleccionar un modo de transmisión. Seleccione Via Bluetooth (Mediante Bluetooth). El equipo portátil debe aparecer como dispositivo de destino. Seleccione el portátil para iniciar la transmisión. La imagen se guarda entonces en el directorio especificado con el comando opd. Este procedimiento también puede emplearse para transmitir un archivo de música.

34.2.6. Solución de problemas

En caso de que se produzcan 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, reproduzca el problema con un dispositivo Bluetooth distinto para asegurarse de que el dispositivo no esté dañado.

¿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 se reconozca como dispositivo Bluetooth. Esto puede deberse a distintas causas: el dispositivo está estropeado o falta el controlador adecuado. En el caso de equipos portátiles con Bluetooth incorporado, suele haber un interruptor para dispositivos inalámbricos, como WLAN y Bluetooth. Consulte la documentación del portátil para ver si 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 de firmware?

Si es así, instale bluez-bluefw y reinicie el sistema Bluetooth con rcbluetooth restart.

¿Aparecen en la salida de hcitool inq otros dispositivos?

Ejecute este comando varias veces. La conexión puede tener interferencias porque la banda de frecuencia de Bluetooth también la utilizan otros dispositivos.

¿Coinciden los números PIN?

Compruebe si el PIN del equipo (que aparece en /etc/bluetooth/pin) coincide con el del dispositivo de destino.

¿Puede “ver” el dispositivo remoto el equipo?

Intente iniciar la conexión desde otro dispositivo remoto y compruebe si el dispositivo detecta la presencia del equipo.

¿Es posible establecer una conexión de red? Consulte Sección 34.2.5.1, “Conexión de red entre dos hosts”.

La configuración descrita en Sección 34.2.5.1, “Conexión de red entre dos hosts” puede que no funcione por distintas causas. Por ejemplo, puede ser que uno de los dos equipos no admita el protocolo. Pruebe con el comando ping 192.168.1.3 o con ping 192.168.1.4. Si esto funciona, compruebe si sshd está activo. Otra posible causa es que uno de los dos dispositivos disponga ya de unos ajustes de red que entren en conflicto con la dirección utilizada en el ejemplo 192.168.1.X. Si es el caso, pruebe con direcciones distintas, como 10.123.1.2 o 10.123.1.3.

¿Aparece el equipo portátil como dispositivo de destino? Consulte Sección 34.2.5.2, “Transmisión de datos de un teléfono móvil a un equipo”. ¿Detecta el teléfono móvil el servicio Obex-Push en el equipo portátil?

En el menú My devices (Mis dispositivos), seleccione el dispositivo que corresponda y consulte la lista de servicios. Si en ella no aparece Obex-Push (incluso después de actualizar la lista), la causa del problema es opd en el portátil. ¿Está activo opd? ¿Tiene permiso de escritura en el directorio especificado?

¿Funciona a la inversa el ejemplo descrito en Sección 34.2.5.2, “Transmisión de datos de un teléfono móvil a un equipo”?

Si ha instalado el paquete obexftp, el comando obexftp -b dirección_dispositivo -B 10 -p imagen se puede usar en varios dispositivos. Algunos modelos de Siemens y Sony Ericsson se han probado y se ha confirmado que funcionan. Consulte la documentación de /usr/share/doc/packages/obexftp.

Si ha instalado el paquete bluez-hcidump, puede utilizar hcidump -X para comprobar lo que se envía de un dispositivo a otro. A veces la salida ayuda a determinar la causa del problema, pero tenga en cuenta que no todo se muestra como “texto legible”.

34.2.7. Información adicional

Para obtener información adicional de última hora, acceda a /usr/share/doc/packages/bluez-utils/ (están disponibles las versiones en alemán e inglés).

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: