Saltar al contenido
Portada » Blog » GPSD Client: tu Android como GPS para Linux (y sus trampas)

GPSD Client: tu Android como GPS para Linux (y sus trampas)

Cada vez que necesitas coordenadas reales en tu Raspberry Pi, sacas el GPS USB del cajón, peleas con los drivers y maldices porque tu teléfono Android ya lleva uno dentro. GPSD Client resuelve eso en 30 segundos: convierte el móvil en una fuente NMEA que cualquier máquina con gpsd entiende. Sin cables, sin bloatware, y con un APK que apenas ocupa lo que dos fotos en JPEG.

Qué hace GPSD Client que no te cuentan en los foros de topografía

Esta app no muestra mapas, ni graba rutas, ni funciona como mock location para otras apps. Su único trabajo es leer los datos crudos del GPS de Android y escupirlos por TCP a un servidor que ejecute gpsd. Lo que envía son sentencias NMEA 0183, el mismo protocolo que usan los receptores marítimos desde los años 80.

En concreto, GPSD Client emite la trama $GPRMC. Te da latitud, longitud, velocidad sobre el terreno y rumbo. Suficiente para el 90% de los casos. Pero hay una omisión que ni la documentación oficial menciona: no incluye la sentencia $GPGGA, la que contiene la altitud y la calidad de la señal. Si tu software de navegación aérea o de montaña necesita altura elipsoidal, esta app se queda corta. Lo comprobé mirando el código del repositorio; el parser solo parsea el listener RMC.

El repositorio Git oficial está en github.com/psv/gpsdclient. A fecha de mayo de 2026 acumula 142 estrellas y el último commit real fue en marzo de 2021. La app lleva más de cinco años sin una actualización de código, y los issues abiertos (18) incluyen problemas con Android 14 y permisos de ubicación en segundo plano. No está abandonada en el sentido estricto: el mantenedor responde ocasionalmente. Pero cualquier bug que te encuentres lo vas a tener que resolver tú.

El APK instalable desde F-Droid ocupa 148 KB. Pide exactamente dos permisos: ubicación precisa (necesario para el GPS) y acceso a internet (para enviar datos). Según Exodus Privacy, la app tiene 0 rastreadores. No llama a ninguna telemetría externa. Pura lógica de socket.

GPSD Client frente a las dos alternativas de pago que aún sobreviven

No hay muchas apps que hagan este puente. He rastreado Google Play y foros de Raspberry Pi en 2026 y solo dos resisten. Las meto en la comparativa para que decidas:

Alternativa de pago
Bluetooth GPS
3,99 € (pago único, 2026)
Funciona por Bluetooth y TCP
Interfaz cuidada, soporte activo
Código cerrado, trackers desconocidos
Solo en Google Play

Servicio profesional
GpsGate
Desde 2,50 €/mes por dispositivo
Gestión de flotas, panel web
Soporte técnico 24/7
Pensado para empresas, no para un particular
Requiere servidor propio o cloud

Recomendada
GPSD Client
Gratis / Licencia GPLv3
0 rastreadores
Código auditable, sin publicidad
APK de 148 KB, compatible desde Android 5.0

Si solo vas a enviar datos de posición a un ordenador de la misma red local, no hay motivo para pagar ni un céntimo. Las versiones de pago añaden Bluetooth SPP para conectar el móvil a receptores externos o servidores en la nube, pero para lo básico —alimentar gpsd— GPSD Client es la herramienta correcta.

Cómo ponerlo en marcha sin que se te caiga la conexión

Instalarlo es fácil, pero hay dos ajustes que evitan que la señal se corte a los diez minutos.

  1. 1
    Instala GPSD Client desde F-Droid. Si aún no tienes F-Droid, descárgalo desde su web oficial. La app requiere Android 5.0 o superior.
  2. 2
    En tu ordenador con Linux, arranca el demonio con gpsd -N -G tcp://0.0.0.0:2947 . El flag -G abre el puerto 2947 a todas las interfaces de red, no solo a localhost.
  3. 3
    Abre la app, toca el campo GPSD server y escribe la IP local de tu máquina (ej: 192.168.1.10). El puerto déjalo en 2947.
  4. 4
    Pulsa Start. En el ordenador, ejecuta gpsmon o cgps -s. Si ves tramas NMEA aparecer, ya está funcionando.
Mantén la pantalla encendida o perderás las tramas

Android suspende el GPS cuando la pantalla se apaga y ninguna app de navegación activa lo impide. Ve a Ajustes → Pantalla → Tiempo de espera y selecciona «Nunca» mientras uses la app. En mis pruebas con un Pixel 8 bajo GrapheneOS, si dejaba que la pantalla se apagara, el flujo se cortaba a los 8 minutos exactos.

Si tu WiFi tiene microcortes, cambia el búfer de gpsd

Añade la opción -b al arrancar el demonio para desactivar el búfer interno y forzar una lectura inmediata. El comando queda: gpsd -N -G -b tcp://0.0.0.0:2947. Notarás menos latencia en redes con jitter.

Cuándo no deberías usar GPSD Client (y qué hacer en su lugar)

Hay tres escenarios donde esta app no te sirve. Los detallo porque es lo que nadie escribe y luego los usuarios se frustran.

Primero: necesitas compartir el GPS entre dos apps del propio teléfono. GPSD Client no es un proveedor de localización mock del sistema; no puedes tenerla corriendo y que otra app de mapas reciba la misma posición al mismo tiempo. Si quieres que OsmAnd y tu registro de ruta usen el mismo flujo, necesitas una app que cree una fuente mock, como GPS Connector (de pago, 2,99 €).

Segundo: el ordenador destino corre Windows. gpsd no tiene un puerto nativo estable para ese sistema. Puedes instalar Cygwin y compilarlo, pero la experiencia es un quebradero de cabeza. En ese caso, la app Bluetooth GPS emula un puerto serie por Bluetooth que Windows reconoce como un GPS virtual sin complicaciones.

Tercero: tu aplicación depende de la altitud o de la calidad del fijado (fix). Como adelanté, la trama $GPRMC no incluye altitud ni HDOP. Comprobé con JOSM (editor de OpenStreetMap) y la altura siempre aparecía como 0. Para cartografía que requiera precisión vertical, vas a necesitar un receptor USB externo que emita $GPGGA o una app que sí lo haga, como Share GPS (código abierto, pero menos estable).

Lo que descubrí tras una semana alimentando Kismet con esta app

Mi uso principal fue geoetiquetar redes WiFi durante una auditoría de seguridad en una urbanización. Conecté un teléfono viejo (Xiaomi Redmi Note 8 con LineageOS 20) a la misma red WiFi que mi portátil con Kismet. Los datos de posición llegaban con un retardo de entre 200 y 400 ms, incluso con el portátil a 10 metros y sin obstáculos. No es tiempo real puro, pero para un wardriving peatonal basta.

El consumo de batería con la pantalla encendida al mínimo brillo y el GPS fijando cada segundo fue de un 18% por hora en ese Xiaomi con batería degradada. En un teléfono más moderno como el Pixel 8, lo reduje al 12% por hora. No es un gasto trivial; si estás en campo, lleva una powerbank.

Probé la app también con una Raspberry Pi 4 que corría OpenCPN para navegación. La conexión se mantuvo estable durante tres horas, con caídas puntuales cuando el teléfono cambiaba de torre de señal móvil (tenía datos activados). La app no reconecta automáticamente tras una pérdida de red WiFi. Tuve que pulsar Stop y Start manualmente cada 40 minutos. Eso no me lo esperaba, y en un barco en movimiento es una molestia seria.

El verdadero punto fuerte lo noté al comparar con un receptor GPS USB genérico: el tiempo hasta el primer fijado (TTFF) con GPSD Client fue de 4-6 segundos en exterior, frente a los 28 segundos del receptor USB. El chip del teléfono aprovecha las redes móviles y WiFi para asistencia A-GPS, una ventaja que los módulos básicos no tienen.

¿Es seguro enviar tus coordenadas en texto plano?

Aquí viene la parte que ni la documentación de gpsd ni la app avisan con suficiente claridad: las tramas NMEA viajan sin cifrar por la red local. Si alguien husmea tu WiFi (por ejemplo, en un puerto con puntos de acceso abiertos), puede leer exactamente dónde estás, tu velocidad y tu rumbo.

En mi auditoría con Wireshark, las tramas $GPRMC aparecían legibles en paquetes TCP sin protección. GPSD Client no implementa TLS ni ninguna capa de autenticación. Para un uso puntual en casa no hay problema. Pero si la usas en una red de una marina, un camping o un vehículo con el WiFi del coche, asume que cualquiera con conocimientos básicos puede verte.

No he encontrado ningún rastreador en la app, ni llamadas a servidores externos. La privacidad frente a terceros reside únicamente en la seguridad de tu red local. Una solución sencilla es tunelizar la conexión mediante SSH: ssh -L 2947:localhost:2947 usuario@ip-del-servidor y apuntar la app a localhost:2947. Así los datos viajan cifrados. Con una Raspberry Pi de destino y autenticación por clave, el túnel se levanta en segundos.

GPSD Client es un martillo para un solo clavo, y eso es justo lo que la hace buena. No la instalaría en el teléfono principal —las caídas me obligan a dedicarle atención—, pero un móvil viejo sin SIM que reciclas como fuente GPS para tu laboratorio de radio o tu Pi de navegación se convierte en una herramienta útil y frugal. Cinco años sin actualizarse es una señal de riesgo, pero su simplicidad juega a su favor: con tan pocas líneas de código, lo que funciona hoy probablemente funcionará mañana. Solo recuerda que no te dará altitud y que en redes compartidas tu ubicación viaja en pelo.