What Runs on Port 2947
GPS receivers are a mess. Garmin speaks one binary dialect. SiRF chips speak another. uBlox has its own format. Every manufacturer implements NMEA 0183 slightly differently. Before gpsd, every application that needed GPS data had to figure out its own way to talk to its own hardware.
gpsd solved this. It's a daemon that attaches to whatever GPS hardware you have, learns its language, and then speaks a clean, unified JSON protocol to any application that asks. The applications connect to port 2947. They ask questions. gpsd answers.
The result: one GPS receiver can serve location data to a navigation app, a time synchronization service, and a ship's autopilot simultaneously — all through a single port.
How gpsd Works
When gpsd starts, it opens port 2947 and waits. GPS applications connect as clients. By default, gpsd uses a watch mode — clients subscribe to a stream of position updates rather than polling, and gpsd pushes fixes as the receiver produces them.
A typical exchange looks like this:
- Client connects to port 2947
- Client sends
?WATCH={"enable":true,"json":true} - gpsd streams JSON objects:
TPV(time-position-velocity),SKY(satellite view),ATT(attitude) - The client reads the stream until it has what it needs, then disconnects
The daemon handles all the hardware complexity — autobauding to find the right serial speed, switching between binary and NMEA modes, managing multiple receivers at once. None of that complexity leaks through port 2947. Clients see clean JSON.
Who Built It and Why
gpsd started in 1995, written by Remco Treffkorn as a simple utility for interfacing with early GPS hardware. For nearly a decade it lived quietly as a niche tool.
In 2004, Eric S. Raymond — the same Eric Raymond who wrote The Cathedral and the Bazaar — took over as lead maintainer. He rewrote significant portions of the codebase, added the libgps client library, and built the autobauding and packet-sniffing architecture that made gpsd genuinely useful across the full chaos of GPS hardware. Under his stewardship, gpsd became the standard GPS interface for Linux systems and a fixture of embedded computing.1
The project is now maintained by the GPSD Project team and lives at gpsd.io.
Where Port 2947 Actually Shows Up
gpsd is ubiquitous in places where machines need to know where they are:
- Raspberry Pi projects: boats, drones, weather stations, vehicle trackers
- Stratum-1 time servers: GPS-disciplined NTP servers use the PPS (pulse-per-second) signal from a GPS receiver, often accessed through gpsd
- Network Time Protocol: many serious NTP setups use gpsd to feed GPS timing data to
ntpdorchrony - OpenStreetMap mapping: survey equipment running Linux
- Maritime systems: navigation software on Linux-based chart plotters
Security
By default, gpsd listens only on the loopback interface (127.0.0.1). It knows exactly where you are, and it keeps that private.
To expose gpsd to the network — so other machines can query your GPS — you must explicitly start it with the -G flag or configure it to listen on a non-loopback address. If you ever see port 2947 open on a network-facing interface, someone made a deliberate choice. Whether that choice was deliberate is worth confirming.2
Check What's Listening on Port 2947
If gpsd is running and listening on loopback, you'll see something like:
Frequently Asked Questions
Hasznos volt ez az oldal?