你有没有遇到过这种情况——打开地图软件,定位却飘到了隔壁城市,打车软件显示你在河里,外卖地址要手动改三遍。对Linux用户来说,这种糟心事在2024年之后变得更常见了。

问题出在Mozilla Location Service(MLS)的关停。这个曾经免费的服务能通过Wi-Fi信号和基站信息帮设备定位,没了它,Linux系统里的Geoclue服务精度直接跌到25公里。想象一下,你明明坐在家里,电脑却以为你在县城另一头。

打开网易新闻 查看精彩图片

开发者Evert Pot决定自己动手解决。他发现Geoclue有个隐藏功能:只要在局域网里找到一个叫_nmea-0183._tcp的服务,就能直接读取GPS坐标。这个服务用的是航海领域老标准的NMEA 0183协议,把经纬度打包成纯文本数据包发出去就行。

思路很简单——既然局域网不会乱跑,干脆在路由器旁边架个本地GPS服务器,把家里的固定坐标广播出去。Evert用Python写了个极简程序,不做复杂计算,就是不断重复同一组坐标。测试时,Gnome Maps和Firefox里的Google Maps都精准定位到了门牌号,截图里能看到房子轮廓清清楚楚。

有意思的是,同样的设置在Mac上却碰了壁。Apple Maps死活不认这个本地服务,除非把系统定位完全关掉。看来苹果有自己的位置数据库,不太愿意接第三方的茬。

这件事挺让人琢磨的。我们习惯了免费服务兜底,从导航到天气都靠云端,一旦基础设施抽走,才发现底层这么脆弱。Evert的解法不算优雅,甚至有点笨——但管用。有时候技术问题不需要宏大方案,认清约束条件,在有限空间里找个能用的补丁,就够了。