Bluetooth es una especificación industrial que proporciona a los usuarios una forma de conectar e intercambiar información entre dispositivos tales como ordenadores personales, PDAs o teléfonos móviles. Usando la tecnología Bluetooth, los usuarios podrán conseguir voz sin hilos y transmisión de datos entre dispositivos a un bajo coste. El Bluetooth también ofrece la posibilidad de crear pequeñas LAN inalámbricas y sincronizar dispositivos.
Acerca del contenido de esta guía
La primera parte de esta guía explica como configurar el núcleo del sistema, identificar los dispositivos Bluetooth instalados en el sistema y detectados por el núcleo e instalar las herramientas básicas necesarias para el Bluetooth.
La segunda parte cubre como detectar dispositivos remotos y como establecer una conexión desde o hacia ellos mediante una comunicación establecida por radio frecuencia (RFCOMM) .
La última parte de la guía lista en detalle aplicaciones que pueden aprovechar todas las ventajas de las posibilidades que ofrece la tecnología Bluetooth.
Como el último núcleo estable de Linux es el 2.6, la configuración se llevará a cabo sobre esta serie. La mayoría de los dispositivos Bluetooth se conectan a un puerto USB, asi que el USB debe activarse también. Por favor revise la Guía de USB en Gentoo Linux.
Listado de Código 2.1: Configuración para los núcleos 2.6 |
Networking ---> <*> Bluetooth subsystem support ---> --- Bluetooth subsystem support <M> L2CAP protocol support <M> SCO links support <M> RFCOMM protocol support [*] RFCOMM TTY support <M> BNEP protocol support [*] Multicast filter support [*] Protocol filter support <M> HIDP protocol support Bluetooth device drivers ---> <M> HCI USB driver [*] SCO (voice) support <M> HCI UART driver [*] UART (H4) protocol support [*] BCSP protocol support [*] Transmit CRC with every BCSP packet <M> HCI BCM203x USB driver <M> HCI BPA10x USB driver <M> HCI BlueFRITZ! USB driver (Los cuatro controladores siguientes son para dispositivos Bluetooth PCMCIA y serán marcados únicamente si ha seleccionado el soporte PCMCIA en su núcleo.) <M> HCI DTL1 (PC Card) driver <M> HCI BT3C (PC Card) driver <M> HCI BlueCard (PC Card) driver <M> HCI UART (PC Card) device driver (El controlador siguiente esta previsto para el software de emulación HCI.) <M> HCI VHCI (Virtual HCI device) driver (Retroceda tres niveles hasta Device Drivers y compruebe si el USB está habilitado. Esto es necesario si usa un artilugio (dongle) Bluetooth USB, la mayoría tiene base USB.) USB support ---> <*> Support for Host-side USB --- USB Host Controller Drivers <M> EHCI HCD (USB 2.0) support [ ] Full speed ISO transactions (EXPERIMENTAL) [ ] Root Hub Transaction Translators (EXPERIMENTAL) <*> OHCI HCD support <*> UHCI HCD (most Intel and VIA) support < > SL811HS HCD support |
Ahora reiniciamos con el nuevo núcleo. Si todo fue bien, tendremos un sistema con Bluetooth listo.
Importante: Su dispositivo USB puede tener dos modos, el predeterminado no suele ser HCI, sino HID. Si este es su caso, utilice hid2hci para pasar al modo HCI. Su sistema no recordará este cambio cuando vuelva a reiniciar. |
Listado de Código 2.2: Comprobando los dispositivos Bluetooth |
(Una forma de comprobar los dispositivos) # cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1 (Cls=e0(unk. ) identifica el adaptador Bluetooth.) T: Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=e0(unk. ) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=0a12 ProdID=0001 Rev= 5.25 (Algo debería mostrarse en lsusb utilizando sys-apps/usbutils) # lsusb Bus 003 Device 002: ID 046d:c00e Logitech, Inc. Optical Mouse Bus 003 Device 001: ID 0000:0000 Bus 002 Device 002: ID 0db0:1967 Micro Star International Bluetooth Dongle |
Ahora que el dispositivo es detectado por el núcleo, necesitamos una capa que permita a las aplicaciones comunicarse con el dispositivo Bluetooth. BlueZ proporciona la pila oficial del Bluetooth de Linux. Los ebuilds que proporcionan lo que necesitamos son bluez-libs y bluez-utils. Los dispositivos que necesitan el firmware de Broadcom o similares pueden necesitar bluez-firmware.
Listado de Código 3.1: Instalando bluez-libs y bluez-utils |
# emerge net-wireless/bluez-libs net-wireless/bluez-utils
|
Configuración de BlueZ y emparejamiento PIN
Ahora es el momento de ver si el sistema ha levantado el dispositivo Bluetooth correctamente. Iniciaremos primero los servicios Bluetooth requeridos.
Listado de Código 3.2: Arrancando hciconfig |
(Arranque de Bluetooth) # /etc/init.d/bluetooth start * Starting Bluetooth ... * Starting hcid ... [ ok ] * Starting sdpd ... [ ok ] * Starting rfcomm ... [ ok ] # hciconfig hci0: Type: USB BD Address: 00:01:02:03:04:05 ACL MTU: 192:8 SCO MTU: 64:8 DOWN RX bytes:131 acl:0 sco:0 events:18 errors:0 TX bytes:565 acl:0 sco:0 commands:17 errors:0 |
Esto muestra que el dispositivo Bluetooth ha sido reconocido. Como puede comprobar el dispositivo está DOWN (apagado). Vamos a configurarlo para que podamos levantarlo. El fichero de configuración se encuentra en /etc/bluetooth/hcid.conf. Los cambios necesarios en el fichero de configuración se muestran a continuación. Para los detalles adicionales consulte man hcid.conf.
Listado de Código 3.3: Editando /etc/bluetooth/hcid.conf |
(Se muestran los cambios recomendables para el fichero) # HCId options options { # Automatically initialize new devices autoinit yes; (Cambie la seguridad a "auto") # 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 pairing multi; (Sólo necesita un gestor de pin si está usando <=bluez-libs-2.x y <=bluez-utils-2.x) (Cambie pin_helper para usar /etc/bluetooth/pin-helper) # PIN helper pin_helper /etc/bluetooth/pin-helper; } # Default settings for HCI devices device { (Establezca aquí el nombre de su dispositivo, puede llamarlo como quiera) # Local device name # %d - device id # %h - host name name "BlueZ at %h (%d)"; # Local device class class 0x3e0100; # Inquiry and Page scan iscan enable; pscan enable; # Default link mode lm accept; # Default link policy lp rswitch,hold,sniff,park; (Déjelo así, si no sabe exactamente que hace esto) # Authentication and Encryption (Security Mode 3) #auth enable; #encrypt enable; } |
Después de esto, hemos de configurar el PIN Bluetooth para pares. Esto nos ayudará a emparejar nuestro dispositivo con otro.
Listado de Código 3.4: Editando /etc/bluetooth/pin |
(Cambie 123456 por el número pin que desee.)
123456
|
Importante: Este número (de su elección) debe ser el mismo en todos sus anfitriones con dispositivos Bluetooth para que puedan ser emparejados. Este número debe permanecer en secreto para que nadie pueda establecer una conexión con sus dispositivos. |
Nota: Comenzando por >=bluez-libs-3.x y >=bluez-utils-3.x los gestores de pin han sido sustituidos por agentes de claves. Hay disponibles un puñado de agentes de claves gráficos para ayudarle a manejar sus claves, tales como bluez-gnome y kdebluetooth. También puede usar passkey-agent (contenido en bluez-utils) desde la linea de comandos |
Ahora que hemos terminado con la configuración de BlueZ, es momento de reiniciar los servicios necesarios.
Listado de Código 3.5: Arrancando los demonios de Bluetooth |
# /etc/init.d/bluetooth restart (Podemos añadirlos al nivel de ejecución por defecto.) # rc-update add bluetooth default * bluetooth added to runlevel default * rc-update complete. |
Vamos a estar seguros de que los demonios de Bluetooth han arrancado correctamente. Si podemos ver que hcid y sdpd están corriendo, entonces hemos configurado correctamente Bluetooth. Después de esto, podemos ver si el dispositivo está ahora levantado y corriendo con las opciones configuradas.
Listado de Código 3.6: Comprobando si los demonios de Bluetooth arrancaron correctamente |
(Observe si los servicios estan corriendo) # ps -ae | grep hcid 26050 ? 00:00:00 hcid # ps -ae | grep sdpd 26054 ? 00:00:00 sdpd # hciconfig -a hci0: Type: USB BD Address: 00:0A:0B:0C:0D:0E ACL MTU: 192:8 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:125 acl:0 sco:0 events:17 errors:0 TX bytes:565 acl:0 sco:0 commands:17 errors:0 Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'BlueZ at bluehat (0)' Class: 0x3e0100 Service Classes: Networking, Rendering, Capturing, Object Transfer, Audio Device Class: Computer, Uncategorized HCI Ver: 1.1 (0x1) HCI Rev: 0x1e7 LMP Ver: 1.1 (0x1) LMP Subver: 0x1e7 Manufacturer: Cambridge Silicon Radio (10) |
4. Detectando y Conectando a Dispositivos Remotos
Detectando dispositivos Bluetooth en otros anfitriones
En este punto estamos preparados para detectar dispositivos Bluetooth en otras máquinas. Esto es independiente del Sistema Operativo que tenga el anfitrión. Usaremos el comando hcitool para lo mismo.
Listado de Código 4.1: Comprobando dispositivos locales |
# hcitool dev
Devices:
hci0 00:01:02:03:04:05
|
Listado de Código 4.2: Escaneando dispositivos remotos |
# hcitool scan
Scanning ...
00:0A:0B:0C:0D:0E Grayhat
|
Listado de Código 4.3: Investigando dispositivos remotos |
# hcitool inq
Inquiring ...
00:0A:0B:0C:0D:0E clock offset: 0x5579 class: 0x72010c
|
Ahora conocemos la dirección MAC del dispositivo Bluetooth remoto, podemos comprobar si nos hemos emparejado correctamente.
Listado de Código 4.4: Corriendo l2ping |
# l2ping 00:0A:0B:0C:0D:0E
Ping: 00:0A:0B:0C:0D:0E from 00:01:02:03:04:05 (data size 20) ...
20 bytes from 00:0A:0B:0C:0D:0E id 200 time 69.85ms
20 bytes from 00:0A:0B:0C:0D:0E id 201 time 9.97ms
20 bytes from 00:0A:0B:0C:0D:0E id 202 time 56.86ms
20 bytes from 00:0A:0B:0C:0D:0E id 203 time 39.92ms
4 sent, 4 received, 0% loss
|
Estableciendo una Comunicación por Radio Frecuencia (RFCOMM)
Nota: Por favor, observe que establecer una comunicación por radio frecuencia es opcional. |
Podemos establecer una comunicación por radio frecuencia hacia otro dispositivo Bluetooth usando el comando rfcomm. Para hacer las cosas un poco más sencillas, especialmente para los usuarios con múltiples dispositivos que soportan Bluetooth, es aconsejable hacer unos cuantos cambios en la configuración por defecto de rfcomm en /etc/bluetooth/rfcomm.conf.
Toda la parte que empieza en rfcomm0 { y termina en } es la configuración del dispositivo que establecerá la conexión en /dev/rfcomm0. En este caso, solo mostraremos un ejemplo, rfcomm0. Puede añadir más dispositivos según sus necesidades.
Listado de Código 4.5: Editando /etc/bluetooth/rfcomm.conf |
(Sólo se muestran cambios que pueden ser necesarios) rfcomm0 { # Automatically bind the device at startup (Crea el nodo para el dispositivos en /dev/rfcomm0 al arrancar) bind yes; # Bluetooth address of the device (Introduzca la dirección del dispositivo al que quiere conectar) device 00:0A:0B:0C:0D:0E; } |
Tras configurar RFCOMM, podemos conectar a cualquier dispositivo. Puesto que hemos hecho los ajustes necesarios en el fichero /etc/bluetooth/rfcomm.conf, sólo tenemos que introducir el comando mostrado a continuación. En el caso de que no haya hecho cambios en el fichero de configuración, se muestra también un metodo alternativo en el listado de código siguiente.
Listado de Código 4.6: Estableciendo una conexión RFCOMM |
(El 0 hace referencia a rfcomm0 en el archivo de configuración) # rfcomm connect 0 Connected /dev/rfcomm0 to 00:0A:0B:0C:0D:0E on channel 1 Press CTRL-C for hangup (Si no ha editado /etc/bluetooth/rfcomm.conf) # rfcomm connect 0 00:0A:0B:0C:0D:0E 1 Connected /dev/rfcomm0 to 00:0F:DE:69:50:24 on channel 1 Press CTRL-C for hangup |
El primer parámetro después del comando conectar es el nodo del dispositivo RFCOMM TTY que se usará para conectar (normalmente 0). El segundo parámetro el la dirección MAC del dispositivo remoto. El tercer parámetro es opcional y especifica el canal a usar. Por favor, observe que para conectar a un dispositivo, este debe estar escuchando conexiones entrantes. Para ello, debemos decirle explícitamente que escuche. Podemos cancelar la comunicación en cualquier momento con sólo pulsar CTRL-C.
Listado de Código 4.7: Escuchando conexiones entrantes RFCOMM |
# rfcomm listen 0 1
Waiting for connection on channel 1
|
De una manera similar al comando conectar, el comando escuchar puede recibir dos parámetros. El primero expresa el nodo del dispositivo RFCOMM TTY que se usará para aceptar la conexión (normalmente 0), mientras que el segundo es el canal que se usará.
Cada vez que llame al comando rfcomm, puede especificar el dispositivo físico que quiere usar. Abajo puede ver un pequeño ejemplo especificando el dispositivo físico en los dos comandos de arriba.
Listado de Código 4.8: Conexiones RFCOMM especificando el dispositivo físico |
# rfcomm -i hci0 listen 0 1 Waiting for connection on channel 1 (Para escuchar a un dispositivo determinado) # rfcomm -i hci0 connect 0 00:0A:0B:0C:0D:0E 1 (Para usar un dispositivo determinado cuando conectamos a otro) |
5. Aplicaciones de Escritorio para Bluetooth
Tenemos bastantes aplicaciones de Bluetooth que corren en escritorio y este capítulo está dividido en 3 partes, cada una para Gnome, KDE y aplicaciones diversas.
Si es un usuario de Gnome, lo más probable es que quiera probar gnome-bluetooth. Proporciona las funciones más básicas y utilizadas, como puede ver a continuación.
Listado de Código 5.1: Instalando gnome-bluetooth |
# emerge gnome-bluetooth
|
Esto añadirá una entrada de menú bajo Aplicaciones > Herramientas del sistema desde donde puede cómodamente iniciar el gestor o la compartición de ficheros para transferir ficheros entre los dispositivos.
Para transferir ficheros (la forma fácil):
gnome-phone-manager es una elegante aplicación que podrá usar para enviar y recibir mensajes hacia y desde su teléfono, utilizando únicamente su sistema. No tendrá que tocar su móvil para leer o enviar mensajes porque todo ocurrirá a través de la aplicación. También será informado de un nuevo mensaje en su monitor si la opción está habilitada en las Preferencias. La instalación es tan sencilla como siempre.
Listado de Código 5.2: Instalando gnome-phone-manager |
# emerge gnome-phone-manager
|
KDE hace uso de kdebluetooth y proporciona más utilidades que su homólogo en Gnome como se muestra a continuación.
Listado de Código 5.3: Instalando kdebluetooth |
# emerge kdebluetooth
|
Otras aplicaciones interesantes
Gracias especialmente a Marcel Holtmann por su tiempo y dedicación en el desarrollo del Bluetooth y por la revisión de esta guía. Y muchas gracias a Douglas Russell por realizar pruebas de rendimiento adicionales y mejorar esta guía.
El contenido de este documento está registrado bajo los términos de la licencia Creative Commons - Reconocimiento / Compartir Igual