Bluetooth es una tecnología de radio que permite conectar dispositivos entre sí. 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.1). 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 10 a 100 metros dependiendo de cuál de las tres clases se utilice.
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 (“File Transfer” Profile), la impresión (“Basic Printing” Profile) y las conexiones en red (“Personal Area Network” Profile).
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. No obstante, en la práctica los dispositivos consiguen “entenderse” por regla general.
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 deben estar instalados los siguientes paquetes relacionados con Bluetooth (bluez-libs, bluez-bluefw, bluez-pan, bluez-sdp y bluez-utils). Dichos paquetes proporcionan algunos servicios o programas de servicio que el sistema necesita. Algunos de estos paquetes se explicarán posteriormente.
Los archivos de configuración que se describen a continuación sólo pueden ser modificados por root. Desgraciadamente todavía no existe ninguna interfaz gráfica para configurar los parámetros, por lo que debe utilizarse un editor de textos para modificar los archivos.
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. Actualmente en Linux sólo existe un PIN independientemente del número de dispositivos Bluetooth instalados. El acceso a varios dispositivos con PINs diferentes todavía no está soportado. En este caso habría que definir el mismo PIN en todos los dispositivos o bien desactivar completamente la autentificación por PIN.
![]() | 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. | |
La configuración se lleva a cabo en el archivo de configuración /etc/bluetooth/hcid.conf. Aquí 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.
Una de las principales opciones de configuración es security auto;, en la que puede regularse la autentificación por PIN. El parámetro auto la activa pero hace que en caso de problemas se cambie a no utilizar PIN. El que utilice none (no utilizar nunca la autentificación por PIN) o user (utilizarla siempre) depende de usted y de sus requisitos individuales en materia de seguridad.
En el apartado que comienza con device { se puede especificar el nombre con el que el ordenador será mostrado al otro extremo de la conexión. También se define la clase de dispositivo (laptop, server, etc.) así como la autentificación y la codificación.
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 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 necesarias para trabajar con Bluetooth. Por desgracia, estas sólo están disponibles actualmente como programas de línea de comandos. En el momento de escribir estas líneas, todavía no era seguro si una extensión de Konqueror (escritorio de KDE) o de Nautilus (escritorio de GNOME) estaría lista hasta la fecha de producción de la distribución. En caso de que así fuera, la URL sdp:// debería mostrarle los dispositivos Bluetooth locales (conectados al ordenador) y remotos (accesibles sólo a través de una conexión por radio).
![]() | Sugerencia |
|---|---|
Todos los programas que se mencionan a continuación disponen de funciones adicionales que puede consultar por medio de man <nombre_programa>. | |
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.
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>.
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.
Puede obtener información adicional sobre el dispositivo local por medio de /sbin/hciconfig. Los dispositivos remotos (que no están conectados físicamente al ordenador) se buscan con 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.
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.
A continuación se incluyen dos ejemplos que ilustran las posibles aplicaciones de Bluetooth.
En el primer ejemplo se va a establecer una conexión de red entre dos ordenadores. Para ello se utiliza el programa pand (Personal Area Networking). Los siguientes comandos han de ser ejecutados por el usuario root. En estas líneas no se incluye una explicación detallada de los comandos de red (ip), sino sólo de las acciones directamente relacionadas con Bluetooth:
En uno de los dos ordenadores (denominado en adelante C1) se inicia el programa pand con el comando pand -s. En el segundo ordenador C2 se ejecuta el comando hcitool inq para averiguar su dirección de dispositivo. Ahora es posible establecer una conexión con pand -c <dirección_dispositivo>. A continuación se pide al sistema una lista de las interfaces de red disponibles por medio del comando ip link show. Dicha lista incluirá una entrada semejante a:
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). 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
Observe aquí que el 3 se ha convertido en un 4. Por consiguiente, 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”.
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ú y seleccione la entrada . Si es necesario, pulse antes de escoger el punto . Seleccione 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 . Pulsando en el menú que aparece a continuación, podrá elegir la forma de envío: seleccione . 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.
En caso de problemas de conexión se recomienda comprobar los siguientes puntos:
Compruebe la salida del comando hcitool dev. ¿Aparece el dispositivo local? En caso negativo, es posible que hcid no se haya iniciado o que el dispositivo no sea detectado como dispositivo Bluetooth (bien porque el controlador no pueda o porque el dispositivo esté roto). Reinicie el daemon con rcbluetooth restart y observe en el archivo /var/log/messages si se ha producido algún error.
¿“Ve” el ordenador otro dispositivo cuando ejecuta hcitool inq? Si es así, 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.
Compruebe si el PIN en /etc/bluetooth/pin y el PIN del otro dispositivo coinciden.
Intente iniciar la conexión desde otro dispositivo y compruebe si el nuevo dispositivo “ve” al ordenador.
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.
En el segundo ejemplo, el portátil no aparece como dispositivo destino: ¿detecta el teléfono móvil el servicio Obex-Push en el portátil? Vaya al menú , seleccione el dispositivo correspondiente y consulte la . 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? Sí, si ha instalado obexftp. En este caso, la transmisión de datos funciona en algunos teléfonos con obexftp -b <dirección_dispositivo> -B 10 -p <nombre_imagen> (se han probado Siemens y Sony Ericsson, lo que no significa que no funcione también en otros).
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:
Conexión con PDAs PalmOS: http://www.cs.ucl.ac.uk/staff/s.zachariadis/btpalmlinux.html
HOWTO oficial del Bluetooth Protocol Stack integrado en el kernel: http://bluez.sourceforge.net/howto/index.html