![Linux:手动设置地理位置](https://linux22.com/image/1598068/Linux%EF%BC%9A%E6%89%8B%E5%8A%A8%E8%AE%BE%E7%BD%AE%E5%9C%B0%E7%90%86%E4%BD%8D%E7%BD%AE.png)
我有一台运行 Linux(如果相关的话,是 Debian Sid)的台式工作站。它没有 GPS 或其他特定手段来获取自己的地理位置(Gnome Maps 正确地将其放置在意大利罗马,误差约为 11.5 英里!)。
有什么方法可以让我告诉它它被放在哪里吗?
我见过这个问题,但它只处理基于浏览器的应用程序。我想覆盖默认定位(即:与 Gnome Maps 用于获取其粗略数据的方法相同)。
答案1
Linux 没有“标准”地理位置 API – 一些程序从地理线索(GNOME 的一部分),而其他的则可以自行与 GPS/GNSS/Wi-Fi 设备对话(重复 geoclue 所做的操作)。
GNOME Maps 总是从 Geoclue 守护进程获取其位置。由于没有 GPS,Geoclue 会根据 1) 您的 IP 地址和 2) 您附近的 Wi-Fi 网络(它会将其提交给 Mozilla 的位置服务,但如果提供了 API 密钥,也可以使用 Google 的 Wi-Fi 网络)获取其大致位置。由于您也没有 Wi-Fi,因此一切都取决于 IP 地理位置数据库认为您所在的位置。
目前 Geoclue才不是有一个参数可以设置固定位置。您剩下的选项是:
- 破解 Geoclue 源代码以始终返回固定答案。
- 用自定义的守护进程(用 Python 或任何其他具有良好 D-Bus API 绑定的语言编写)替换 Geoclue 守护进程本身,并使其始终返回固定答案。
- 通过安装定位导航守护进程并使用包含的gps假工具(见下文)。
将 Geoclue 中的 Mozilla 位置服务 URL 更改为指向始终返回固定答案的自定义 Web 服务。(Bugzilla 线程中提到过这一点,但由于您没有任何 Wi-Fi 硬件,我认为 Geoclue 根本不会费心询问 MLS……)- 添加 Wi-Fi 适配器,以便 Geoclue 可以扫描附近的网络并通过 Mozilla 定位服务将其映射到您的位置(这也需要 NetworkManager)。
对于不使用 Geoclue 但具有 GPS 支持的程序,可以通过直接与定位导航(例如 Firefox),您可以使用gps假让它假装始终有一个 GPS 传感器连接。但是,它没有简单的选项来指定坐标 – 您需要为它提供真实 GPS 设备捕获的输出,可能需要手动编辑才能获得正确的坐标。