Mozilla의 GPS location service 종료 이후 Linux의 GeoClue 기반 위치 확인이 부정확해져, where-am-i가 GeoIP로 Toronto 근처를 25km 정확도로 잡았음
고정된 홈 서버가 움직이지 않는다는 점을 이용해 집 네트워크 안에서 원하는 GPS 좌표를 로컬로 내보내도록 구성함
GeoClue는 /etc/geoclue/geoclue.conf에서 network-nmea가 기본 활성화되어 있었고, _nmea-0183._tcp mDNS 서비스를 찾아 GPS 정보를 받아옴
nmea-static-gps-server는 초당 한 번 NMEA 0183 GPS 메시지를 TCP로 내보내고, Avahi로 _nmea-0183._tcp 서비스를 등록함
GeoClue 재시작 후 클라이언트가 서버 좌표를 바로 잡았고, 결과는 GPS GGA+RMC 설명과 0 meters 정확도를 반환했으며 Gnome Maps는 즉시 올바른 위치를 표시함
GeoClue와 NMEA 설정
Mozilla의 GPS location service 종료 이후 Linux에서 위치 정확도가 낮아졌고, 여러 Linux 시스템에서 Firefox와 Gnome Maps가 사용하는 GeoClue는 where-am-i 기준 GeoIP로 Toronto 근처를 25km 정확도로 잡았음
where-am-i 데모는 배포판별 패키지로 설치 가능함
# Fedora
sudo dnf install geoclue2-demos
# Debian family
sudo apt install geoclue-2-demo
고정된 홈 서버가 움직이지 않는다는 점을 이용해, 집 네트워크 안에서는 원하는 GPS 좌표를 로컬에서 내보내도록 구성함
사용한 프로토콜은 NMEA 0183이며, 선박 전자장비용 명세 묶음으로 메시지를 직렬 포트나 TCP 소켓으로 보낼 수 있음
Avahi는 Linux의 표준 mDNS 구현이며, Mac에서는 Bonjour가 같은 역할을 하고, mDNS는 로컬 네트워크의 .local 주소나 프린터·TV 같은 장치 검색에도 쓰임
저장소에는 다음과 같은 Avahi 서비스 설정이 포함됨
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">NMEA GPS (%h)</name>
<service>
<type>_nmea-0183._tcp</type>
<port>10110</port>
</service>
</service-group>
이 파일을 /etc/avahi/services/nmea-statis-gpc.service에 복사한 뒤, 다른 머신에서 avahi-browse로 서비스 검색을 확인할 수 있음
$ avahi-browse _nmea-0183._tcp -r -t
+ wlp192s0 IPv6 NMEA GPS (node05) _nmea-0183._tcp local
+ wlp192s0 IPv4 NMEA GPS (node05) _nmea-0183._tcp local
= wlp192s0 IPv6 NMEA GPS (node05) _nmea-0183._tcp local
hostname = [node05.local]
address = [fe80::a8c2:15de:9af:19b]
port = [10110]
txt = []
= wlp192s0 IPv4 NMEA GPS (node05) _nmea-0183._tcp local
hostname = [node05.local]
address = [192.168.2.205]
port = [10110]
txt = []
서비스가 node05.local에서 실행 중일 때 telnet node05.local 10110으로 TCP 서버 자체도 쉽게 테스트 가능함