Yerel ağda GPS yayını yapmak
(evertpot.com)- Mozilla'nın GPS konum hizmeti kapandıktan sonra Linux'ta GeoClue tabanlı konum belirleme doğruluğu düştü;
where-am-i, GeoIP ile Toronto yakınlarını 25 km doğrulukla gösterdi - Sabit duran ev sunucusunun hareket etmemesinden yararlanarak, ev ağı içinde istenen GPS koordinatlarını yerel olarak yayınlayacak şekilde yapılandırıldı
- GeoClue'da
/etc/geoclue/geoclue.confiçindenetwork-nmeavarsayılan olarak etkin durumdaydı ve_nmea-0183._tcpmDNS hizmetini bularak GPS bilgisini alıyordu - nmea-static-gps-server, saniyede bir kez NMEA 0183 GPS mesajlarını TCP üzerinden yayınlıyor ve Avahi ile
_nmea-0183._tcphizmetini kaydediyor - GeoClue yeniden başlatıldıktan sonra istemci sunucunun koordinatlarını hemen aldı; sonuçta
GPS GGA+RMCaçıklaması ve 0 meters doğruluk döndü, Gnome Maps de doğru konumu anında gösterdi
GeoClue ve NMEA yapılandırması
- Mozilla'nın GPS konum hizmeti kapandıktan sonra Linux'ta konum doğruluğu düştü ve Firefox ile Gnome Maps'in kullandığı GeoClue, birden fazla Linux sistemde
where-am-iölçümüne göre GeoIP ile Toronto yakınlarını 25 km doğrulukla gösterdi where-am-idemosu, dağıtıma göre paket olarak kurulabiliyor# Fedora sudo dnf install geoclue2-demos # Debian family sudo apt install geoclue-2-demo- Sabit duran ev sunucusunun hareket etmemesinden yararlanarak, ev ağı içinde istenen GPS koordinatlarını yerelden yayınlayacak şekilde yapılandırıldı
- Kullanılan protokol NMEA 0183; denizcilik elektroniği için bir belirtim kümesi ve mesajlar seri port ya da TCP soketi üzerinden gönderilebiliyor
- Örnek GPS mesajları
GPRMCveGPGGAsatırlarından oluşuyor$GPRMC,204049.000,A,5308.3999,N,00601.9266,E,0.000,0.000,030526,,*02 $GPGGA,204049.000,5308.3999,N,00601.9266,E,1,08,1.0,119.0,M,0.0,M,,*6F - GeoClue'da
/etc/geoclue/geoclue.confiçinde network-nmea varsayılan olarak etkindi# Network NMEA source configuration options [network-nmea] # Fetch location from NMEA sources on local network? enable=true - GeoClue,
_nmea-0183._tcpadlı mDNS hizmetini arıyor; kaydı bulursa ilgili adrese bağlanıp GPS bilgisini alıyor
Sunucu uygulaması ve çalışmanın doğrulanması
- nmea-static-gps-server, saniyede bir kez GPS bilgisini yayınlayan bir TCP sunucusu ve Avahi ile
_nmea-0183._tcphizmetini kaydediyor - Avahi, Linux'un standart mDNS uygulaması; Mac'te aynı işi Bonjour yapıyor ve mDNS, yerel ağdaki
.localadresleri ya da yazıcı ve TV gibi cihazların keşfinde de kullanılıyor - Depoda aşağıdaki gibi bir Avahi hizmet yapılandırması yer alıyor
<?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> - Bu dosya
/etc/avahi/services/nmea-statis-gpc.servicekonumuna kopyalandıktan sonra, başka bir makinedeavahi-browseile hizmet keşfi doğrulanabiliyor$ 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 = [] - Hizmet
node05.localüzerinde çalışırkentelnet node05.local 10110ile TCP sunucusunun kendisi de kolayca test edilebiliyor - İstemci tarafında GeoClue yeniden başlatılınca sunucunun koordinatları hemen alındı
$ sudo systemctl restart geoclue $ /usr/libexec/geoclue-2.0/demos/where-am-i - Sonuç, sunucunun tam koordinatlarını ve
GPS GGA+RMCaçıklamasını döndürdü; doğruluk da 0 meters olarak gösterildiClient object: /org/freedesktop/GeoClue2/Client/3 New location: Latitude: 43.645758° Longitude: -79.410510° Accuracy: 0 meters Altitude: 119.000000 meters Speed: 0.000000 meters/second Description: GPS GGA+RMC Timestamp: Sun 03 May 2026 04:58:58 PM (1777841938 seconds since the Epoch) - Gnome Maps doğru konumu anında gösterdi, Firefox içinse yeniden başlatma gerekti
- Mac'teki Apple Maps'te de Konum Servisleri kapalıyken çalışıyor gibi göründü, ancak haritada tam doğru nokta çıkmadı; yalnızca yaklaşık bölge doğruydu
- Bu yöntem, evdeyken Linux makinelerinin yavaş ve hatalı GPS sorgularını beklemeden doğru konumu hemen almasını sağlıyor; ayrıca Linux kullanan misafirler veya iş arkadaşları için yanlış konum spoofing'i yapmak amacıyla da kullanılabiliyor
- https://github.com/evert/nmea-static-gps-server
1 yorum
Lobste.rs görüşleri
LAN üzerinde GNSS duyurmak için standart bir mDNS servisi olduğunu hiç bilmiyordum; yaklaşık 6 aydır aralıklı olarak kafamı kurcalayan bir sorunu bu sayede hemen çözmüş oldum
GPS konum sahteciliği iyi bir fikir, ama gerçekten hayata geçirmek için görece epey iş var gibi görünüyor
Android ayarlarında ya da bir Firefox eklentisinde “gerçek konumu kullan / özel konum kullan” gibi basit bir seçenek olsa güzel olurdu
Yalnız IP ya da yerel ayar gibi başka unsurlarla çakıştığında GPS konumuna ne kadar ağırlık verildiğini de merak ediyorum
Ayrıca sayfanın en altındaki Jeff Geerling fotoğrafını görünce kısa süreliğine şaşırdım, ama sonradan onun yazar değil sadece beğeni veren kişi olduğunu fark ettim
Mümkün olduğunda genelde onun işlerinden uzak dururum
Bir zamanlar bir Trimble GNSS alıcısı kullanmıştım; USB OTG miydi yoksa BLE miydi hatırlamıyorum ama Trimble uygulaması bir Mock Locations kaynağı olarak çalışıyordu, böylece herhangi bir Android uygulaması telefonun kendi görece düşük hassasiyeti yerine ölçüm direğinin yüksek hassasiyetli koordinatlarını, yaklaşık 2 cm düzeyinde, alabiliyordu
İlginç, ama bunu kendim de yapabilir ve ev ağındayken Android cihazda bunu yayınlayan bir betik yazabilirim
Gerçekten buna ihtiyacım olup olmadığından hâlâ tam emin değilim :p
NMEA 0183’ün deniz elektroniği için bir spesifikasyonlar paketi olduğunu öğrenmek benim için yeniydi
NMEA’nın ne anlama geldiğini araştıracak kadar hiç merak etmemiştim ama ModemManager ve Qualcomm modemler sayesinde ismin kendisine aşinaydım