Archive for the ‘bluetooth’ Category

Howto PAN in linux

julio 21, 2008

I generally write in Spanish, but this time I’m gonna try to go a step further so more people can get some profit from my experiences.

I’m going to show you how to create a PAN (Personal Area Network) between two computers running Linux using bluetooth devices. This PAN is supoussed to be set up any time you plug your bluetooth adapter.

First of all, I’ll try to explain how I have set up my network so the following explanation will be easier to understand, here’s in a simple schema:

My LAN

My LAN

I have on router with access point, one personal computer, one server (used to P2P, remote login, FTP…) and my laptop. I usually connect to the network using the wireless connection (shown in blue), but sometimes it seems to fail so I get out of connection and I’m too lazy to move some meeters to reset the router. So, in order to avoid this, I’m gonna show you how to create a bluetooth conection between the server and the laptop (shown in red) that can be used as a gateway to the Internet for both my laptop and my mobile phone or as a simple LAN to perform some administration tasks through ssh.

For both sides:
Be ensure that you have the bnep module compiled in your kernel:


Networking --->
<M>Bluetooth subsystem support --->
<M>BNEP protocol support

The server side:
It is using a bluetooth adapter Conceptronic. The MAC will be used in the client side you can use hcitool dev to get it.

First of all edit the /etc/default/bluetooth adding the following lines:

....
PAND_ENABLED=1
PAND_OPTIONS="--listen --role NAP --devup /etc/bluetooth/pan/dev-up"
....

This will enable PAND and tell the system how to act, if you see, when the system PAND receives a connection it will execute the /etc/bluetooth/pan/dev-up script which has to be set up like this:

#!/bin/sh
ifup bnep0
ifconfig bnep0 up
ifconfig bnep0 192.168.5.1
ifconfig bnep0 netmask 255.255.255.252

Remeber to make it executable and restart the bluetooth system:

$ chmod +x /etc/bluetooth/pand/dev-up
$ /etc/init.d/bluetooth restart

The client side
As well as for the server edit the /etc/default/bluetooth adding the following lines (notice the MAC gotten before is now used):

...
PAND_ENABLED=1
PAND_OPTIONS="--connect 00:80:5A:20:4E:F7 --devup /etc/bluetooth/pan/dev-up"
...

In the same way, the file specifying how to act when the system notices the connection has to be edited, so here is how /etc/bluetooth/pan/dev-up should look like:

#!/bin/sh
ifup bnep0
ifconfig bnep0 up
ifconfig bnep0 192.168.5.2
ifconfig bnep0 netmask 255.255.255.252

Remeber to make it executable and restart the bluetooth system:

$ chmod +x /etc/bluetooth/pand/dev-up
$ /etc/init.d/bluetooth restart

Now, everytime you connect the bluetooth adapter, a new interface bnep0 should be brought up in both sides with the specified rules. You can see it using the ifconfig command. You should be able to do any tasks from both sides like ping, ssh… here’s an expample:

root@Stronghold:/etc/bluetooth/pan# ifconfig
bnep0 Link encap:Ethernet HWaddr 00:80:5a:20:4e:f7
inet addr:192.168.5.1 Bcast:192.168.5.3 Mask:255.255.255.252
inet6 addr: fe80::280:5aff:fe20:4ef7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3925 (3.8 KiB) TX bytes:7047 (6.8 KiB)
root@Stronghold:/etc/bluetooth/pan# ping 192.168.5.2
PING 192.168.5.2 (192.168.5.2) 56(84) bytes of data.
64 bytes from 192.168.5.2: icmp_seq=1 ttl=64 time=59.9 ms
^C
— 192.168.5.2 ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 59.977/59.977/59.977/0.000 ms

Additional comments:

  • Of course, you will have to change some information as the MAC and the IP address
  • If you get the following error:
    ExoduS:/home/kets# pand --connect 00:80:5A:20:4E:F7 -n
    pand[10820]: Bluetooth PAN daemon version 3.30
    pand[10820]: Connecting to 00:80:5A:20:4E:F7
    pand[10820]: Connect to 00:80:5A:20:4E:F7 failed. File exists(17)

    It’s because you have already a connection set up in your computer, probably running on the background you can see it with pand -l and destroy it with pand -K

  • By now I’m just using this connetion as a simple LAN not as a gateway to the Internet. If you wish to do that, you’ll have to set up some iptables rules in the server side, these rules are very well explained in the first link of the following section.

Useful links:
http://www.howtoforge.com/bluetooth_pand_debian_etch
http://bluez.sourceforge.net/contrib/HOWTO-PAN

Hope it helps & don’t hesitate to contact me for any help.

Scripting: detector de presencia bluetooth

abril 30, 2008

Una noche de insomnio no puede ser desaprovechada, así que estaba hurgando en mi ordenador cuando he descubierto un script que hice hace mucho tiempo.

Se trata de un script que al detectar la presencia de un dispositivo bluetooth (ya sea por el nombre o por la MAC) ejecuta un programa. Algunos pensarán, pues vaya chorrada y yo digo, pues sí, pero bueno, cuando a veces te aburres y practicas pequeñas cosas que vas aprendiendo de scripting te salen cosas que pueden tener cierta utilidad.

A continuación dejo una lista de diversas utilidades que se le podría dar:

  • Cuando llegas a casa el ordenador te pone música. Se podría hacer que en función del nombre de tu dispositivo te ponga un tipo de música u otro, ejemplo, llegas el sábado con una chati así que estableces el nombre de tu móvil a “romantico” y el programa se encarga de lanzar tu reproductor de música con las canciones que derretirían a cualquiera, encender las velas no está al alcance de este script 😉
  • Activar el bluetooth del móvil de tu padre/madre/hermano/hermana para que cuando estén llegando a casa te avise mediante una alarma (comando beep), por si estás haciendo algo raro que no quieres que se enteren
  • Arrancar los programas que más utilizas, como por ejemplo tu programa de mensajería instantánea, por si no te gusta dejarlo siempre conectado
  • Autosincronizar el teléfono móvil para que se bajen las nuevas citas, cumpleaños y contactos
  • Muchas cosas más…

Así mismo se podría invertir la lógica para que en vez de detectar tu presencia detectase tu ausencia y en función de ello realizase alguna opción (esto vi que estaba por ahí hecho y bloqueaba tu ordenador). A mi se me ocurrió que si se alejaba tu teléfono (te lo roban) se pusiese a pitar el ordenador alertando del hurto.

Bueno, no me extiendo más, aquí va el script que está suficientemente comentado:


#!/bin/bash

#Este script se encarga de detectar los dispostivos bluetooth disponibles.
#Si encuentra uno que coincide con la variable device lanza el programa que queramos.

#Author: Jaime Bosque (aka KetS)
#e-mail: jaboto {arroba} gmail {punto} com
#date 6 / 5 / 2005

#licencia GPL
# ---------GPL-------
# Este scrip se distribuye bajo licencia GPL, puede distribuirlo y/o
# modificarlo bajo los terminos de la GNU General Public License.
# para mas informacion en castellano visite:
# http://es.tldp.org/Otros/gples/gples.html
# ---------------------
# modificado (30/04/2008): dominio público, haz con el lo que quieras... ;)

#mandar sugerencias y/o bugs a la direccion de arriba!

#En device introduce el nombre de tu móvil o dispositivo bluetooth
device=Original
file=scanBT.txt
program="xmms -p -Q ~/musiquita.m3u"

#primero eliminamos el archivo $file si existiese
rm $file

while true
do
#Scanneo de dispositivos BT
echo "Buscando dispositivos BlueTooth"
`hcitool sca > $file`

#Buscamos dentro del archivo que queremos $file, con una entrada nos bastara
# ademas con el parametro -o evitamos que salga la parte de la linea
# que no coincide con nuestra variable que buscamos.

var1=`grep --max-count=1 -o $device $file`

if [ $var1 = $device ]
then
break
else
echo "no encontrada"
fi

#Dormimos 10 segundos
sleep 10
done

echo "Encontrado $device"
echo "Ahora lanzara el programa $program"
$program

Algunas anotaciones:

  • Cambiar el nombre del dispositivo
  • Recomiendo ejecutarlo redirigiendo la salida a null (ej: ./bluetooth > /dev/null) para que no muestre las salidas

Control remoto con Nokia N70

enero 5, 2008

Este blog no prometía nada de informática y Linux pero como se supone que tiene que reflejar mis actividades voy a comentar una que llevaba bastante tiempo rondándome por la cabeza y así sirve para que a otros no les pase lo mismo.

Hace tiempo que trasteo con los móviles, el bluetooth y el ansia de poder controlar mi ordenador mientras estoy tirado en la cama. Conseguí hacerlo con mi anterior móvil, un SonyEricsson T610 y ahora que tengo un Nokia N70, se suponía que todo iba a ser mucho más fácil pero no lo ha sido, así que voy a explicar más o menos como he conseguido hacerlo.

Para empezar diré que hay muchas maneras y programas para hacerlo pero tras mucho buscar y probar, el único que me daba resultados medio decentes era el PyS60RemoteControl que sirve para cualquier móvil capaz de interpretar Python. No entraré en detalles de como instalarlo, ya que se puede encontrar en la página del programa y en los readmes que lo acompañan. Sin embargo a la hora de la configuración ha sido bastante complicado, así que aquí expongo como hacerlo funcionar ya que en la web del programa no hay casi ninguna explicación.

Una vez bajado lo primero que hay que hacer es configurar el programa, para ello se utiliza el archivo PyS60RemoteControl.conf, simplemente hay que tocar el primer bloque de código, donde dice ‘connections’:

{ 'connections': { 'bluetooth': { 'classname': 'Bluetooth',
'host': '00:80:5A:20:4E:F7',
'port': 0},
'emulator': { 'classname': 'Socket',
'host': '127.0.0.1',
'port': 33000},
'serial': {'classname': 'Serial', 'port': 12},
'socket': { 'classname':'Socket',
'host': '0.0.0.0',
'port': 33000}},

Lo único que hay que especificar es, donde dice host, poner nuestra dirección MAC del dispositivo bluetooth del ordenador, se puede sacar haciendo un ‘hcitool dev’

Después de hacer esto ya se puede conseguir la conectividad entre el ordenador y el móvil, pero probablemente sólo funcione el plugin del XMMS.

Si queremos poder utilizar el móvil para emular el ratón y el teclado (que se puede hacer pero en ningún sitio viene explicado como y me he tenido que buscar la vida), lo único que hay que hacer es tener soporte en el kernel para ‘user level driver support’ que se encuentra en:


Device Drivers --->
Input device support --->
Miscellaneous devices --->
User level driver support

Da igual ponerlo incrustado en el kernel o como módulo, pero si lo ponéis como módulo, acordaros de cargarlo mediante el comando ‘modprobe uinput’ y agregarlo al /etc/modules (o usar la herramienta modconf que lo agregará directamente al cargarlo la primera vez). Gracias a esto podéis usar el móvil para controlar el ordenador al hacer presentaciones o chorradillas así.

Para poder controlar el VLC no hay que nadar nada extraño excepto a la hora de arrancar el programa para ver los videos, agregar la siguiente opción ‘–extraintf http’ que arrancar el servidor http. A mi por defecto me utilizar el puerto 8080, así que tendréis que cambiar en el archivo de configuración del VLC el puerto, osea que el archivo ‘plugins/VLC.conf’ quedaría así


...
'http_host': 'localhost:8080',
...

Ahora ya podéis ver los videos tirados en la cama y subir y bajar el volumen, cambiar entre fullscreen mode o normal, pausar, avanzar… ¡a disfrutar!

Aun así sigo sin conseguir hacer funcionar:

  • Que se vea la pantalla del ordenador en el móvil (se supone que al utilizar el ratón se tendría que ver).
  • Configurar el plugin del ratón para que responda a mis teclas y no a las que vienen por defecto.

¡Espero que os sirva de ayuda!