2017-02-15 8 views
0

Haben Sie ein RPI2 mit neuesten Jessie Lite Raspbian Januar 2017 mit Adafruit Ultimate GPS Hut und PPS mit Informationen aus einem Beitrag bei digitalbarbedwire.com. Einfache Einrichtung und PPS und alle GPS-Befehle funktionieren großartig lokal.Zugang GPSD Port 2947 über Netzwerk

Ich versuche, gpsd eingehende Anfragen über das Netzwerk an Port 2947 zu akzeptieren, um Positionsinformationen (OpenCPN) zu exportieren. Ich habe/etc/default/gpsd bearbeitet, um die Option -G GPSD_OPTIONS = "- n -G" hinzuzufügen, aber externe Anfragen sind nicht erlaubt. Wenn ich gpsd stop (sudo service stop gpsd), und gps im Vordergrund aufrufen (/ usr/sbin/gpsd -N-n -G/dev/ttyAMA0/dev/pps0, alles funktioniert gut! Also ich vermute, es gibt ein Berechtigungsproblem der gpsd als Daemon starten, aber ich habe es noch nicht herausgefunden Ohre mich Nüsse

Irgendwelche Vorschläge

Relevante Dateien:.!?

$ cat /lib/systemd/system/gpsd.socket 
[Unit] 
Description=GPS (Global Positioning System) Daemon Sockets 

[Socket] 
ListenStream=/var/run/gpsd.sock 
ListenStream=[::1]:2947 
ListenStream=0.0.0.1:2947 
SocketMode=0600 

[Install] 
WantedBy=socket 

$ cat /etc/default/gpsd 
# Default settings for the gpsd init script and the hotplug wrapper. 

# Start the gpsd daemon automatically at boot time 
START_DAEMON="true" 

# Use USB hotplugging to add new USB devices automatically to the daemon 
USBAUTO="true" 


# Devices gpsd should collect to at boot time. 
# They need to be read/writeable, either by user gpsd or the group dialout. 
DEVICES="/dev/ttyAMA0 /dev/pps0" 

# Other options you want to pass to gpsd 
GPSD_OPTIONS="-n" 

$ cat /lib/systemd/system/gpsd.service 
[Unit] 
Description=GPS (Global Positioning System) Daemon 
Requires=gpsd.socket 
# Needed with chrony SOCK refclock 
After=chronyd.service 

[Service] 
EnvironmentFile=-/etc/default/gpsd 
ExecStart=/usr/sbin/gpsd -N -G $GPSD_OPTIONS $DEVICES 

[Install] 
Also=gpsd.socket 

Irgendwelche Ideen

Antwort

2
?

Gpsd hört eigentlich nicht auf Port 2947 zu, systemd ist das. In Debian ist dies standardmäßig nur lokal t kommt in systemd startet gpsd, falls erforderlich, und leitet zukünftige Anfragen an den Daemon weiter. Wenn Sie gsd den Parameter -G eingeben, ändert das nichts.

Sie benötigen eine Überschreibung für die systemd gpsd.socket Einheit hinzuzufügen, und sagen, dass es auf allen Adressen zu hören:

# /etc/systemd/system/gpsd.socket.d/socket.conf 
[Socket] 
# First blank ListenStream clears the system defaults 
ListenStream= 
ListenStream=2947 
ListenStream=/var/run/gpsd.sock 

Best Practice ist es, diese Überschreibungsdatei setzen in/etc/systemd/und Die Unit-Dateien in/lib/systemd/nicht bearbeiten.

Dokumentation auf der systemd.socket Syntax: https://www.freedesktop.org/software/systemd/man/systemd.socket.html

0

Ein anderer Weg, es zu tun, ist ein Terminal lose SSH-Sitzung mit Port-Forwarding zu tun.

Nehmen wir an, Sie haben PC1 einen gpsd-Dienst (entweder über Systemd oder Stand-Alone).

Von PC2, können Sie dies tun:

ssh -N -L 2947:localhost:2947 [email protected] 

Die N-Flag verhindert, dass eine tatsächliche Terminal-Sitzung (keine Befehle ausgeführt). Das Flag -L bedeutet, dass Port 2947 an localhost 2947 weitergeleitet wird.

Jetzt wird ssh nicht automatisch neu verbunden, wenn die Sitzung aus irgendeinem Grund verloren geht oder beendet wird. Die Arbeit ist zu installieren autossh, verfügbar in den meisten Linux-Distributionen.

Sie können dann mit autossh wie so:

autossh -N -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 2947:localhost:2947 [email protected] 

Wenn es funktioniert, fügen Sie -f autossh im Hintergrundmodus gehen zu lassen.

Sie können leicht autossh von rc.local oder einer Systemeinheit laufen. Auf diese Weise müssen Sie nur den SSH-Port in (22) zulassen und übermitteln die GPS-Informationen nun über eine sichere verschlüsselte Verbindung, was eine gpsd-Socket-Sitzung alleine nicht kann. Offensichtlich hilft es, wenn Sie ein Schlüsselpaar zwischen PC1 und PC2 einrichten, da Sie kein Passwort benötigen.

Sie können auf PC2 eines der mitgelieferten gpsd-Tools ausführen, da es lokal erscheint.API-Aufrufe von Skripten/Programmen funktionieren auch so, als würde Port 2947 gpsd lokal ausführen.

Look here for more detail on how to use autossh.

Verwandte Themen