1 पॉइंट द्वारा GN⁺ 1 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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._tcp mDNS service को खोजकर GPS जानकारी प्राप्त करता है
  • nmea-static-gps-server हर सेकंड एक बार NMEA 0183 GPS messages को TCP पर भेजता है, और Avahi के ज़रिए _nmea-0183._tcp service register करता है
  • GeoClue को restart करने के बाद client ने तुरंत server coordinates पकड़ लिए, और परिणाम में GPS GGA+RMC description तथा 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-i demo को 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._tcp service register करता है
  • Avahi, Linux का standard mDNS implementation है; Mac पर Bonjour यही काम करता है, और mDNS का उपयोग लोकल नेटवर्क में .local addresses या 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+RMC description लौटा, और 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 टिप्पणियां

 
GN⁺ 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 किया था
    जहाँ तक संभव हो, मैं आमतौर पर उनके काम से बचता हूँ

    • “जहाँ तक संभव हो, मैं आमतौर पर उनके काम से बचता हूँ” — ऐसा क्यों?
    • लगता है Android में ऐसा फीचर है। यह developer-only Mock Locations है
      मैंने 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 के ज़रिए नाम से परिचित था

    $ qmicli -d qrtr://0 --loc-get-nmea-types  
    Successfully retrieved NMEA types: gga, gsv, gsa  
    $ mmcli -m any --location-status  
      Location | capabilities: 3gpp-lac-ci, gps-raw, gps-nmea, agps-msa, agps-msb