Gentoo Logo

Guía Bluetooth de Gentoo Linux

Contenido:

1.  Introducción

¿Qué es Bluetooth?

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 tratará sobre identificar los dispositivos capacitados y los no capacitados que soportan la tecnología Bluetooth. En este sentido, los usuarios pueden optar por dispositivos Bluetooth que sabemos que funcionan. Tras esto, la 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) o por la creación de una red de área personal (PAN).

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.

2.  Dispositivos soportados

Dispositivos capacitados y no capacitados que soportan Bluetooth

Importante: Estos productos pueden funcionar a pesar de que algunos no son productos capacitados con Bluetooth. Gentoo no da soporte a estos productos, aunque estos funcionen.

Puede encontrar una lista de los dispositivos actualmente soportados en: Bluetooth device features and revision information by Marcel Holtmann.

3.  Configurando el sistema

Configuración del núcleo

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 Guía de USB en Gentoo Linux.

Listado de Código 3.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 3.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

4.  BlueZ - La Pila Bluetooth

Instalando BlueZ

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 4.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 4.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 4.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 4.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: Si esta usando <=bluez-libs-2.x and <=bluez-utils-2.x puede elegir entre diferente gestores de pin, dependiendo de que es lo que quiera hacer. Gestores de pin disponibles son /usr/lib/kdebluetooth/kbluepin (net-wireless/kdebluetooth), /usr/bin/bluepin o /etc/bluetooth/pin-helper y algunos más.

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

Configuración de servicios

Ahora que hemos terminado con la configuración de BlueZ, es momento de reiniciar los servicios necesarios.

Listado de Código 4.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 4.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)

5.  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 5.1: Comprobando dispositivos locales

# hcitool dev
Devices:
        hci0    00:01:02:03:04:05

Listado de Código 5.2: Escaneando dispositivos remotos

# hcitool scan
Scanning ...
        00:0A:0B:0C:0D:0E       Grayhat

Listado de Código 5.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 5.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 5.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 5.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 5.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 5.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)

Estableciendo una Red de Área Personal (PAN)

Nota: Por favor, observe que establecer una Red de Área Personal es opcional. Esta sección describe como configurar y conectar a un Punto de Acceso de Red, aunque la configuracion de una Red de Grupo Ad-Hoc sigue un camino parecido.

Primero de todo, necesitamos tener el módulo bnep cargado. Probablemente deseemos que se cargue cada vez que el ordenador arranque.

Listado de Código 5.9: Cargando el módulo bnep

# modprobe bnep
# echo "bnep" >> /etc/modules.autoload.d/kernel-2.6

Hemos de arrancar el demonio pand en el anfintrión que proporciona el NAP. Tendremos que especificar que queremos proporcionar un servicio NAP y que este anfitrión será el maestro, de esta manera los demás anfitriones que conectaran con él, serán los esclavos. Otra posibilidad de servicio es GN (Red de Grupo ad-hoc).

Listado de Código 5.10: Ejecutando el demonio pand

# pand --listen --role NAP --master --autozap

Tras hacer esto, tenemos un anfitrión escuchando, así el resto de los anfitriones solo tendrán que conectar a este.

Listado de Código 5.11: Conectando al Punto de Acceso de la Red

# pand --connect 00:0A:0B:0C:0D:0E --service NAP --autozap

Si todo fue bien, podremos ahora configurar las direcciones IP de nuestros anfitriones.

Listado de Código 5.12: Configuración de las direcciones IP de bnep

host0 # ifconfig bnep0 192.168.2.1
host1 # ifconfig bnep0 192.168.2.2

host0 # ifconfig bnep0
bnep0     Link encap:Ethernet  HWaddr 00:0A:0B:0C:0D:0E
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::210:60ff:fea3:cb41/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:208 (208.0 b)  TX bytes:188 (188.0 b)

host1 # ifconfig bnep0
bnep0     Link encap:Ethernet  HWaddr 00:01:02:03:04:05
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::210:60ff:fea2:dd2a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:208 (208.0 b)  TX bytes:188 (188.0 b)

Para terminar, podemos hacer una sencilla prueba para ver que la red funciona correctamente.

Listado de Código 5.13: Haciendo ping entre las IPs de las interfaces de bnep

host1 # ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=34.0 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=37.3 ms

--- 192.168.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 34.045/35.690/37.336/1.656 ms

6.  Aplicaciones de Escritorio para Bluetooth

Introducción

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.

Para Gnome

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.

  • gnome-bluetooth-manager: Para manejar dispositivos Bluetooth remotos.
  • gnome-obex-send: Para enviar ficheros a otros dispositivos.
  • gnome-obex-server: Para recibir ficheros.

Listado de Código 6.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):

  • Desde el teléfono hacia el ordenador - Envíe el fichero desde el teléfono vía Bluetooth y será capturado y salvado en su /home siempre.

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 6.2: Instalando gnome-phone-manager

# emerge gnome-phone-manager

Para KDE

KDE hace uso de kdebluetooth y proporciona más utilidades que su homólogo en Gnome como se muestra a continuación.

  • kbluetoothd: Meta Servidor Bluetooth.
  • kbtsearch: Utilidad de búsqueda de dispositivos/servicios Bluetooth.
  • khciconfig: Monitor de Bluetooth de KDE.
  • kioclient: Cliente de línea de comando KIO.
  • qobexclient: Navaja suiza para el testeo/desarrollo de obex.
  • kbtobexclient: Una aplicación para el Framework Bluetooth de KDE.
  • kioobex_start
  • kbtserialchat
  • kbemusedsrv: Servidor KDE Bemused.
  • kbtobexsrv: Servidor Push OBEX en KDE para Bluetooth.
  • kbluepin: Aplicación KPART para KDE.
  • auth-helper: Un programa ayudante para kbtobexsrv que envía una petición de autentificación para un link ACL dado.

Listado de Código 6.3: Instalando kdebluetooth

# emerge kdebluetooth

Otras aplicaciones interesantes

  • app-mobilephone/obexftp: Transferencia de ficheros sobre OBEX para teléfonos móviles.
  • app-mobilephone/bemused: Bemused es un sistema que le permite controlar la colección musical desde su móvil, usando Bluetooth.
  • app-pda/multisync: Multisync le permite sincronizar los contactos, las entradas del calendario y las notas desde su teléfono móvil con su ordenador, sobre una conexión Bluetooth (entre otras cosas). Incluye otras características tales como hacer una copia de seguridad de esta información y recuperarla más tarde, y sincronizar con el cliente de correo electrónico Evolution. Necesitará la variable USE irmc para asegurarse que multisync tiene soporte para Bluetooth.

7.  Agradecimientos

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.



Imprimir

Actualizado 21 de octubre, 2007

Sumario: Esta guía explicará como instalar correctamente un dispositivo anfitrión Bluetooth, configurar apropiadamente el núcleo, explicar todas las posibilidades que ofrece la interconexión Bluetooth y cómo pasar un buen rato con Bluetooth.

Ioannis Aslanidis
Author

Douglas Russell
Colaborador

Marcel Holtmann
Colaborador

Shyam Mani
Autor

Łukasz Damentko
Editor

John Christian Stoddart
Traductor

Federico Díaz
Traductor

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.