2017-02-15 15 views
0

최신 Jessie Lite Raspbian Jan 2017과 함께 RPI2에 Adafruit Ultimate GPS 모자와 PPS (digitalbarbedwire.com)의 게시물 정보를 사용하십시오. 쉬운 설치 및 PPS 및 모든 GPS 명령은 로컬에서 훌륭하게 작동합니다.네트워크를 통한 GPSD 포트 2947

gpsd가 위치 정보 (OpenCPN)를 내보내려면 포트 2947에서 네트워크를 통해 들어오는 요청을 수락하려고합니다./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를 시작,하지만 난 아직 파악하지 않은 나에게 견과류를 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입니다. 기본적으로 데비안에서는 로컬 전용입니다. 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 

모범 사례가에서의/etc/systemd /,이 재정의 파일을 넣어하는 것입니다/lib/systemd /에있는 유닛 파일을 편집하지 마십시오. systemd.socket 구문에

문서 : https://www.freedesktop.org/software/systemd/man/systemd.socket.html

0

을 수행하는 또 다른 방법은 포트 포워딩 단말기리스 SSH 세션을 수행하는 것이다.

예를 들어 PC1이 gpsd 서비스를 실행하고 있다고 가정 해 봅니다 (systemd 또는 독립 실행 형을 통해).

PC2에서이 작업을 수행 할 수 있습니다

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

-n 플래그는 실제 터미널 세션을 방지 (어떤 명령은 실행되지 않습니다). -L 플래그는 포트 2947을 로컬 호스트 2947에 전달 함을 의미합니다.

이제 세션이 손실되거나 종료되면 ssh가 자동으로 다시 연결되지 않습니다. 해결 방법은 대부분의 리눅스 배포판 저장소에서 사용할 수있는 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간에 키 쌍을 설정하면 도움이됩니다.

로컬로 표시되는 PC2와 함께 제공되는 gpsd 도구를 PC2에서 실행할 수 있습니다.스크립트/프로그램의 API 호출은 2947 포트가 실제로 gpsd를 로컬로 실행하는 것처럼 작동합니다.

Look here for more detail on how to use autossh.