2017-02-15 8 views
0

最新のJessie Lite Raspbian Jan 2017でAdafruit Ultimate GPSハットとPPSのRPI2にdigitalbarbedwire.comのポストの情報を使用させてください。セットアップが簡単で、PPSとすべてのgpsコマンドがローカルで素晴らしい動作をします。ネットワーク経由でGPSDポート2947にアクセス

gpsdがポート情報をエクスポートするためにポート2947でネットワーク経由で着信要求を受け入れるようにしようとしています(OpenCPN)。私は/ etc/default/gpsdを編集して-Gオプションを追加しましたが、GPSD_OPTIONS = " - n -G"ですが、外部リクエストは許可されていません。 gpsd(sudo service stop gpsd)を停止し、フォアグラウンド(/ usr/sbin/gpsd -N -n -G/dev/ttyAMA0/dev/pps0)でgpsを起動すると、すべて正常に動作します。アクセス権の問題がデーモンとしてGPSDを開始するが、私はまだそれを考え出したていない私にナットをDrivings

任意の提案

関連ファイル:。!?

$ 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はデフォルトです。Debianではデフォルトでローカルのみです。 systemdにtが入ると、必要に応じて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// etcにあるこのオーバーライドファイルを置くことで、/lib/systemd /内のユニットファイルを編集しないでください。 systemd.socket構文の

ドキュメント:https://www.freedesktop.org/software/systemd/man/systemd.socket.html

0

それを行うための別の方法は、ポートフォワーディングとターミナルレスSSHセッションを行うことです。

たとえば、gpsdサービスを実行しているPC1(systemdまたはスタンドアロン経由)があるとします。

PC2からは、あなたがこれを行うことができます:

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

-Nフラグは、実際の端末セッションを防ぐ(ないコマンドは実行されません)。 -Lフラグは、ポート2947からローカルホスト2947への転送を意味します。

何らかの理由でセッションが失われたり終了したりすると、sshは自動再接続しません。回避策はほとんどのLinuxディストリビューションで利用可能なautosshをインストールすることです。

あなたはそのように同じようautossh使用することができます。

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

それが動作する場合、autosshはバックグラウンドモードで行くように-fを追加します。

rc.localまたはsystemdユニットから簡単にautosshを実行できます。この方法では、(22)のSSHポートを許可するだけで、gpsdソケットセッションだけでは実行できない安全な暗号化された接続を介してgps情報を渡しているだけです。明らかに、パスワードを必要としないので、PC1とPC2の間に鍵ペアを設定すると役立ちます。

ローカルに表示されるので、付属のgpsdツールをPC2で実行できます。スクリプト/プログラムからのAPI呼び出しも、ポート2947が実際にgpsdをローカルで実行しているかのように機能します。

Look here for more detail on how to use autossh

関連する問題