Bluetooth en GNU/Linux
Esta receta pretende ser un pequeño tutorial de uso de Bluetooth en GNU/Linux
Usaremos básicamente las utilidades instaladas por el paquete bluez-utils empleadas en el desarrollo de aplicaciones bluetooth.
Ingredientes
Todos ellos paqutes Debian/Ubuntu
- bluetooth: la pila propiamente dicha
- bluez-pin: para gestionar los PIN
- bluez-utils: servidores y utilidades
- bluez-hcidump sniffer de tráfico HCI
Comandos
Entre los comandos que nos instalan estos paquetes, puedes encontrar:
Examinar la interface
Escaner (usando una iface determinada)
Sniffer de HCI
Servidor hci (hcid)
Su configuración está en /etc/bluetooth/hcid.conf
y la base de datos con los pin en /etc/bluetooth/pinDB
Descubrimiento de servicios
El demonio del protocolo de descubrimiento de servicios SDP (Service discovery protocol) es sdpd
Gestión de SDP
Es importante resaltar que para que un servicio sea descubierto, debes añadirlo mediante un sdptool add <servicio>
, la lista de abajo del comando anterior nos muestra los servicios disponibles.
Algunos comando útiles
Con hcitool scan
obtendrás una lista de los dispositivos presentes a tu alrededor.
Muestra la dirección bluetooth y el nombre, puedes comprobar la dirección bluetooth en los nokia 66** tecleando el código “*#2820#”
Para obtener una lista de los servicios que ofrece cada dispositivo usamos la herramienta sdptool, en nuestro caso, y para ver lo que ofrece el móvil:
Esto proporciona toda la información que necesitas acerca de todos los servicios presentes en el dispositivo, en este caso el teléfono móvil.
Servicio dial-up networking
Nos vamos a centrar en el servicio dial-up networking, para ello observamos que la salida del comando anterior nos presenta la siguiente información:
Para indicarle al ordenador que vamos a usar ese servicio necesitas editar el archivos /etc/bluetooth/rfcomm.conf
e insertar una entrada tal que:
donde el device es el identificador del movil y el channel el que nos indica el registro obtenido con sdptool, justo despues de “RFCOMM” (0×0003).
Reinicia para cargar la nueva configuración:
Ya tienes una conexión lista, con lo cual, por ejemplo, si estas en un portátil en mitad del campo y quieres conectarte a internet con tu
portátil a través de tu móvil tienes que configurar un enlace ppp a través del móvil.
Para eso, tienes comandos muy interesantes:
- pand: TCP/IP sobre Bluetooth
- —listen para el servidor
- —connect
para el cliente
- /etc/bluetooth/pan/dev-up: pand ejecuta este script al levantar TCP/IP.
- dund: Ejecutar PPP sobre Bluetooth RFCOMM
- —listen para el servidor
- —connect
para el cliente
Si no has establecido una “relación de confianza” entre tu móvil y tu
portátil te pedirá en ambos dispositivos el pin.
Protocolo OBEX
Si quieres mandarle un archivo a tu teléfono puedes utilizar el protocolo OBEX. Con gnome-obex-send
puedes mandarle un archivo y con gnome-obex-server
debe aparecer una opción en nautilus, de forma que, si haces click en el botón derecho sobre un archivo debería aparecer una opcion para enviarlo via bluetooth.
Configurando un Headset
Una interesante aplicación es la de poder usar uno de esos micrófonos y auriculares bluetooth. Estos dispositivos implementan un servicio denominado headset.
Para ello existe un interesante proyecto basado en Alsa, lo puedes encontrar en bluetooth-alsa (no es paquete debian).
Dos errores que surgieron en la configuración son:
Esto indica que no tienes configurados los drivers de alsa y no encuentran los dispositivos. Prueba a instalar y ejecutar el alsaconf para instalar alsa.
Otro problema, despues de instalar los drivers de alsa puede ser:
No tienes cargado el modulo del kernel snd-bt-sco
, está en el directorio kernel
del programa btsco
, tienes que ejecutar make; make install
en dicho directorio.
Si al hacer modprobe snd-bt-sco
, no lo encuentra (y se te ha compilado todo bien) copia el .ko a mano a /lib/modules/2.6.14-2-386/kernel/drivers/
poniendo la versión del kernel que tengas (la mia es una 2.6.14-2-386).
Comentarios
Esta receta se irá ampliando conforme se prueben mas servicios y utilidades.