लोकल नेटवर्क पर GPS ब्रॉडकास्ट करना
(evertpot.com)- Mozilla की GPS location service बंद होने के बाद Linux में GeoClue-आधारित location detection कम सटीक हो गई, और
where-am-iने GeoIP के आधार पर Toronto के पास की लोकेशन को 25km accuracy के साथ दिखाया - इस विचार का उपयोग किया गया कि स्थिर home server कहीं जाता नहीं है, इसलिए घर के नेटवर्क के अंदर मनचाहे GPS coordinates लोकली ब्रॉडकास्ट करने के लिए सेटअप किया गया
- GeoClue में
/etc/geoclue/geoclue.confके भीतरnetwork-nmeaडिफ़ॉल्ट रूप से enabled था, और यह_nmea-0183._tcpmDNS service को खोजकर GPS जानकारी प्राप्त करता है - nmea-static-gps-server हर सेकंड एक बार NMEA 0183 GPS messages को TCP पर भेजता है, और Avahi के ज़रिए
_nmea-0183._tcpservice register करता है - GeoClue को restart करने के बाद client ने तुरंत server coordinates पकड़ लिए, और परिणाम में
GPS GGA+RMCdescription तथा 0 meters accuracy मिली; Gnome Maps ने भी तुरंत सही location दिखा दी
GeoClue और NMEA सेटअप
- Mozilla की GPS location service बंद होने के बाद Linux में location accuracy गिर गई, और कई Linux systems पर Firefox और Gnome Maps द्वारा उपयोग किया जाने वाला GeoClue
where-am-iके हिसाब से GeoIP द्वारा Toronto के पास की लोकेशन को 25km accuracy के साथ दिखा रहा था where-am-idemo को distribution के अनुसार package के रूप में install किया जा सकता है# Fedora sudo dnf install geoclue2-demos # Debian family sudo apt install geoclue-2-demo- स्थिर home server कहीं नहीं जाता, इस बात का फायदा उठाकर घर के नेटवर्क के भीतर मनचाहे GPS coordinates लोकली ब्रॉडकास्ट करने के लिए कॉन्फ़िगर किया गया
- इस्तेमाल किया गया protocol NMEA 0183 है, जो marine electronics के लिए specifications का एक सेट है; messages को serial port या TCP socket के माध्यम से भेजा जा सकता है
- उदाहरण GPS messages
GPRMCऔरGPGGAलाइनों से बने होते हैं$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 में
/etc/geoclue/geoclue.confके भीतर network-nmea डिफ़ॉल्ट रूप से enabled था# Network NMEA source configuration options [network-nmea] # Fetch location from NMEA sources on local network? enable=true - GeoClue
_nmea-0183._tcpनाम की mDNS service खोजता है, और record मिलते ही उस address से कनेक्ट होकर GPS जानकारी लेता है
सर्वर इम्प्लीमेंटेशन और काम करने की पुष्टि
- nmea-static-gps-server एक TCP server है जो हर सेकंड GPS जानकारी भेजता है, और Avahi के ज़रिए
_nmea-0183._tcpservice register करता है - Avahi, Linux का standard mDNS implementation है; Mac पर Bonjour यही काम करता है, और mDNS का उपयोग लोकल नेटवर्क में
.localaddresses या printer/TV जैसे devices खोजने के लिए भी होता है - repository में नीचे जैसा Avahi service configuration शामिल है
<?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से service discovery की पुष्टि की जा सकती है$ 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 = [] - जब service
node05.localपर चल रही हो, तोtelnet node05.local 10110के ज़रिए TCP server को भी आसानी से टेस्ट किया जा सकता है - client पर GeoClue restart करते ही उसने तुरंत server के coordinates पकड़ लिए
$ sudo systemctl restart geoclue $ /usr/libexec/geoclue-2.0/demos/where-am-i - परिणाम में server के सटीक coordinates और
GPS GGA+RMCdescription लौटा, और accuracy 0 meters दिखाई गईClient 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 ने तुरंत सही location दिखा दी, जबकि Firefox को restart करना पड़ा
- Mac के Apple Maps में भी यह तब काम करता हुआ लगा जब Location Services बंद थीं, लेकिन map पर सटीक बिंदु नहीं दिखा और केवल मोटा-मोटी क्षेत्र सही था
- यह तरीका घर पर रहते समय Linux machines को धीमी और कम-सटीक GPS lookup का इंतज़ार किए बिना तुरंत सही location पकड़ने देता है, और Linux इस्तेमाल करने वाले guests या सहकर्मियों को गलत location spoof करने के लिए भी इस्तेमाल किया जा सकता है
- https://github.com/evert/nmea-static-gps-server
1 टिप्पणियां
Lobste.rs टिप्पणियाँ
मुझे बिल्कुल पता नहीं था कि LAN पर GNSS को announce करने के लिए एक standard mDNS service भी है, लेकिन इसने उस समस्या को तुरंत हल कर दिया जिसके बारे में मैं लगभग 6 महीनों से बीच-बीच में सोच रहा था
GPS location spoofing एक अच्छा आइडिया है, लेकिन इसे वास्तव में लागू करना अपेक्षाकृत काफी काम लगता है
अच्छा होता अगर Android settings या Firefox extension में “वास्तविक स्थान उपयोग करें / custom location उपयोग करें” जैसा कोई सरल विकल्प होता
हालांकि, यह भी जानने की जिज्ञासा है कि जब IP या locale जैसी दूसरी चीज़ों से टकराव हो, तब GPS location को कितना वज़न दिया जाता है
साथ ही, पेज के सबसे नीचे Jeff Geerling की तस्वीर देखकर मैं एक पल के लिए चौंक गया, फिर बाद में समझ आया कि वे लेखक नहीं थे, बस उन्होंने like किया था
जहाँ तक संभव हो, मैं आमतौर पर उनके काम से बचता हूँ
मैंने Trimble GNSS receiver इस्तेमाल किया था; वह USB OTG था या BLE, यह याद नहीं, लेकिन Trimble app Mock Locations source बन जाता था ताकि कोई भी Android app फोन की अपनी अपेक्षाकृत कम सटीकता के बजाय survey pole के high-precision coordinates, लगभग 2cm स्तर तक, प्राप्त कर सके
दिलचस्प है, लेकिन मैं इसे खुद implement करके एक script भी बना सकता हूँ जो home network पर होने पर Android device से इसे broadcast करे
अभी भी पूरी तरह आश्वस्त नहीं हूँ कि मुझे वास्तव में इसकी ज़रूरत है :p
यह मेरे लिए नया था कि NMEA 0183 marine electronics के लिए specifications का एक bundle है
मैं इतना उत्सुक कभी नहीं हुआ कि NMEA का मतलब क्या है यह खोजूँ, लेकिन ModemManager और Qualcomm modem के ज़रिए नाम से परिचित था