Bluetooth en GNU/Linux

来源:互联网 发布:Knockou.js 编辑:程序博客网 时间:2024/04/30 02:17

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

# hciconfig -ahci0:   Type: USB        BD Address: 00:08:1B:03:05:25 ACL MTU: 192:8 SCO MTU: 64:8        UP RUNNING PSCAN ISCAN        RX bytes:385 acl:0 sco:0 events:18 errors:0        TX bytes:319 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: 'homer'        Class: 0x3e0100        Service Classes: Networking, Rendering, Capturing        Device Class: Computer, Uncategorized        HCI Ver: 1.1 (0x1) HCI Rev: 0x20d LMP Ver: 1.1 (0x1) LMP Subver: 0x20d        Manufacturer: Cambridge Silicon Radio (10)

Escaner (usando una iface determinada)

$ hcitool -a hci0 scan

Sniffer de HCI

hcidump

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

# sdptoolsdptool - SDP tool v2.24Usage:        sdptool [options] <command> [command parameters]Options:        -h              Display help        -i              Specify source interfaceCommands:        search          Search for a service        browse          Browse all available services        records         Request all records        add             Add local service        del             Delete local service        get             Get local service        setattr         Set/Add attribute to a SDP record        setseq          Set/Add attribute sequence to a SDP recordServices:        DID SP DUN LAN FAX OPUSH FTP HS HF SAP NAP GN PANU HID CIP CTP        A2SRC A2SNK AVRCT AVRTG SR1 SYNCML ACTIVESYNC HOTSYNC PALMOS        NOKID PCSUITE

Es importante resaltar que para que un servicio sea descubierto, debes añadirlo mediante un sdptool add &lt;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.

$ hcitool scanScanning ...        00:15:A0:42:34:8D       Nokia 6680

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:

# sdptool browse 00:15:A0:42:34:8DBrowsing 00:15:A0:42:34:8D ...Service Name: Hands-Free Audio GatewayService RecHandle: 0x10003Service Class ID List:  "Handfree Audio Gateway" (0x111f)  "Generic Audio" (0x1203)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 2Language Base Attr List:  code_ISO639: 0x454e  encoding:    0x6a  base_offset: 0x100Profile Descriptor List:  "Handfree Audio Gateway" (0x111f)    Version: 0x0101Service Name: Headset Audio GatewayService RecHandle: 0x10004Service Class ID List:  "Headset Audio Gateway" (0x1112)  "Generic Audio" (0x1203)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 3Language Base Attr List:  code_ISO639: 0x454e  encoding:    0x6a  base_offset: 0x100Profile Descriptor List:  "Headset" (0x1108)    Version: 0x0100...todos los servicios

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:

Service Name: Dial-Up NetworkingService RecHandle: 0x1000eService Class ID List:  "Dialup Networking" (0x1103)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 3Language Base Attr List:  code_ISO639: 0x454e  encoding:    0x6a  base_offset: 0x100Profile Descriptor List:  "Dialup Networking" (0x1103)    Version: 0x0100

Para indicarle al ordenador que vamos a usar ese servicio necesitas editar el archivos /etc/bluetooth/rfcomm.conf e insertar una entrada tal que:

rfcomm1 {        bind no;        device 00:15:A0:42:34:8D;        channel 3;        comment "Dial-up networking";        }

donde el device es el identificador del movil y el channel el que nos indica el registro obtenido con sdptool, justo despues de "RFCOMM" (0x0003).

Reinicia para cargar la nueva configuración:

# /etc/init.d/bluez-utils restartRestarting bluez-utils: hcid sdpd rfcomm.# rfcomm release 1# rfcomm connect 1Connected /dev/rfcomm1 to 00:15:A0:42:34:8D on channel 10Press CTRL-C for hangup

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:

felix:# btscoError: control open (hw:0): No such deviceError: Can't find device. Bail

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:

felix:# btscoError: hwdep next device (hw:0): Operation not permittedError: control open (hw:1): No such deviceError: Can't find device. Bail

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.

Referencias

  • bluetooth-alsa
  • handset
  • Bluez
 
原创粉丝点击