Guía Bluetooth de Gentoo Linux
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
<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
<M> HCI VHCI (Virtual HCI device) driver
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 |
# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
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
# 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 |
# /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 |
# HCId options
options {
# Automatically initialize new devices
autoinit yes;
# 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;
# PIN helper
pin_helper /etc/bluetooth/pin-helper;
}
# Default settings for HCI devices
device {
# 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;
# 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 |
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
# 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 |
# 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 |
rfcomm0 {
# Automatically bind the device at startup
bind yes;
# Bluetooth address of the device
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 |
# rfcomm connect 0
Connected /dev/rfcomm0 to 00:0A:0B:0C:0D:0E on channel 1
Press CTRL-C for hangup
# 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
# rfcomm -i hci0 connect 0 00:0A:0B:0C:0D:0E 1
|
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.
El contenido de este documento está registrado bajo los términos de
la licencia
Creative Commons - Reconocimiento / Compartir Igual
|