2017-02-15 20 views
0

Имейте RPI2 с новейшим Jessie Lite Raspbian Jan 2017 с шляпой Adafruit Ultimate GPS и PPS, используя информацию из сообщения на digitalbarbedwire.com. Простая настройка и PPS и все команды gps работают отлично на месте.доступ к порту GPSD 2947 через сеть

Я пытаюсь получить gpsd для приема входящих запросов по сети на порту 2947 для экспорта информации о местоположении (OpenCPN). Я отредактировал/etc/default/gpsd, чтобы добавить параметр -G GPSD_OPTIONS = "- n -G", но внешние запросы не разрешены. Если я остановлю gpsd (sudo service stop gpsd) и вызовут gps на переднем плане (/ usr/sbin/gpsd -N -n -G/dev/ttyAMA0/dev/pps0, все работает отлично! Поэтому я предполагаю, что есть разрешения проблемы запуска GPSD как демон, но я не понял его еще Сгоны мне гайки

Любые предложения

Соответствующие файлы:.!?

$ 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 

Любые идеи

ответ

2
?

Gpsd фактически не прослушивает порт 2947, systemd is. По умолчанию в Debian это только локально. t приходит в systemd запускает gpsd, если необходимо, и перенаправляет будущие запросы демону. Таким образом, gpsd параметр -G на самом деле ничего не изменит.

Вам нужно добавить переопределение для Systemd блока gpsd.socket, и сказать ему, чтобы слушать по всем адресам:

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

Лучшая практика поместить этот файл переопределения в/и т.д./Systemd /, и не редактировать файлы устройства в/lib/systemd /.

Документация по синтаксису systemd.socket: https://www.freedesktop.org/software/systemd/man/systemd.socket.html

0

Другой способ сделать это, чтобы сделать SSH сессии терминала-менее с перенаправлением портов.

Например, предположим, что у вас есть компьютер с функцией gpsd (либо через systemd, либо автономно).

С PC2, вы можете сделать это:

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

флаг -n предотвращает фактическую терминальную сессию (никакие команды не выполняются). Флаг -L означает прямой порт 2947 на localhost 2947.

Теперь ssh не будет автоматически повторно подключаться, если по какой-либо причине сеанс потерян или завершен. Обходной задачей является установка autossh, доступная в большинстве репозиториев Linux.

Вы можете использовать autossh так:

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

Если он работает, добавьте -f, чтобы autossh идти в фоновом режиме.

Вы можете легко запустить autossh из rc.local или systemd. Выполнение этого способа означает, что вам нужно только разрешить SSH-порт в (22) и теперь передавать информацию gps через защищенное зашифрованное соединение, то, что сеанс сокета gpsd сам по себе не может сделать. Очевидно, что это помогает, если у вас есть настройка пары ключей между PC1 и PC2, поскольку вам не нужен пароль.

Вы можете запустить на PC2 любой из инструментов gpsd, которые поставляются вместе с ним, поскольку он будет отображаться локально.Вызов API из скриптов/программ также будет работать так, как если бы порт 2947 фактически запускал gpsd локально.

Look here for more detail on how to use autossh.