Udev es el sistema que se encarga de gestionar los dispositivos que se conectan al sistema GNU/Linux. Cada vez que se detecta la conexion de un dispositivo al ordenador udev leer una serie de archivos llamados «reglas» situados en /etc/udev/rules.d/ (para openSuSe) y aquellos cuyo patrón de condiciones se cumpla se ejecuta la acción indicada.

Udev se encarga, por ejemplo, de asegurar que cada vez que se conecte una webcam esta sea asignada al grupo «video», y estos disponga de permisos de acceso correctos. O, como en este caso, ejecutar un script que haciendo uso de gpsbabel conecte nuestro GPS con GoogleEarth y poder ver/archivar en él nuestras rutas, waypoints ó incluso mostrar nuestra posición en tiempo real en GoogleEarth mientras nos desplazamos con el portatil en el coche.
Para transferir los datos usaremos gpsbabel, un programa capaz de leer y escribir datos del GPS en multitud de formatos. Gpsbabel funciona en linea de comandos y está disponible para otras plataformas (Windows, MAC) y es usado como base por multitud de otros programas.
Identificar el dispositivo
Lo primero es identificar el dispositivo tal y como se conecta al ordenador. Para esto enchufa el GPS al USB y en una consola ejecuta dmesg, en mi caso se puede leer:usb 2-9.1: new full speed USB device using ehci_hcd and address 57
usb 2-9.1: new device found, idVendor=091e, idProduct=0003
usb 2-9.1: new device strings: Mfr=0, Product=0, SerialNumber=0
usb 2-9.1: configuration #1 chosen from 1 choice
garmin_gps 2-9.1:1.0: Garmin GPS usb/tty converter detected
usb 2-9.1: Garmin GPS usb/tty converter now attached to ttyUSB0
Con los valores de idVendor y idProduct construimos una nueva regla para udev con el siguiente contenido:KERNEL=="ttyUSB*", ACTION=="add", SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="0666", RUN="/home/tu-nombre-usuario/bin/udev_gps.sh %k &>/dev/null"
Sigue leyendo…