Just a couple of notes because this was trickier than expected, especially since all my experiences with Arduinos and GPSs have been fairly straightforward.
I bought a cheap USB GPS which turns out to be a Neo-7 -
[ 28.770396] usb 1-1.5: New USB device found, idVendor=1546, idProduct=01a7 [ 28.770426] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 28.770443] usb 1-1.5: Product: u-blox 7 - GPS/GNSS Receiver [ 28.770459] usb 1-1.5: Manufacturer: u-blox AG - www.u-blox.com [ 28.771952] cdc_acm 1-1.5:1.0: ttyACM0: USB ACM device
So, 'simples' thinks I: install gpsd and gpsd-clients and then start gpsd with
sudo gpsd /dev/ttyACM0 -n -F /var/run/gpsd.sock and running
cgps -s will give me my location.
Not so fast there. cgps is giving me no fix and timing out.
First check the gps is working by simply looking at the serial output stream with
Yep that works - there are the NMEA sentences and I can see the valid fix data. SO the problem must be with gpsd.
Long story short, after looking at syslog and realising it must be a socket problem I Googled around and found this page https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=138711 where I owe a big THANK YOU to Per Linderholm for his post suggesting changing /lib/systemd/system/gpsd.socket
Here's the relevant bit of his post
I think the problem is in how systemd is configured.
Try to change /lib/systemd/system/gpsd.socket
which listens to localhost only
which listens to "all" , and restart gpsd (or reboot).
Thanks Per that fixed it and now I get all my location data working nicely with cgps.
Alas, too soon I spoke Today I decided to rebuild the Raspberry Pi (don't ask!) and the above steps failed. I then remembered that I had previously tried something else from that link - delorian's hint that the socket needed deleting via:
sudo systemctl stop gpsd.socket sudo systemctl disable gpsd.socket
Ah, now looking at syslog I can see gpsd is starting correctly and, yes indeed, cgps works!