Linux:手动设置地理位置

Zio*_*yte 5 debian geolocation

我有一个运行 Linux 的桌面工作站(Debian Sid,如果相关的话)。它没有 GPS 或其他特定方式来获取自己的地理位置(Gnome 地图正确地将其定位在意大利罗马,误差约为 11.5 Mi!)。

有什么方法可以告诉它它的放置位置吗?

我见过这个问题,但它只涉及基于浏览器的应用程序。我想覆盖默认定位(即:Gnome Maps 用于获取其粗略数据的同一东西)。

use*_*686 3

Linux 没有“标准”地理位置 API – 一些程序从geoclue(GNOME 的一部分)获取汇总数据,而其他程序则自行与 GPS/GNSS/Wi-Fi 设备通信(重复 geoclue 的作用)。

GNOME 地图始终从 Geoclue 守护进程获取其位置。由于没有 GPS,Geoclue 会根据 1) 您的 IP 地址和 2) 您附近的 Wi-Fi 网络(它会将其提交给 Mozilla 的位置服务,但如果提供 API 密钥,则可以使用 Google 的位置服务)来获取其大致位置。由于您也没有 Wi-Fi,因此一切都取决于 IP 地理定位数据库认为您所在的位置。

目前 Geoclue没有用于设置固定位置的参数。您剩下的选择是:

  • 破解 Geoclue 源代码以始终返回固定答案。
  • 将 Geoclue 守护进程本身替换为自定义守护进程(用 Python 或任何其他具有良好 D-Bus API 绑定的语言编写),并使其始终返回固定答案。
  • 通过安装gpsd守护进程并使用附带的gpsfake工具(见下文) ,使 Geoclue 认为已连接 GPS 设备。
  • 将 Geoclue 中的 Mozilla 位置服务 URL 更改为指向始终返回固定答案的自定义 Web 服务。(Bugzilla 线程中提到了这一点,但由于您没有任何 Wi-Fi 硬件,我认为 Geoclue 甚至不会首先询问 MLS...)
  • 添加 Wi-Fi 适配器,以便 Geoclue 可以扫描附近的网络并通过 Mozilla 定位服务将它们映射到您的位置(这也需要 NetworkManager)。

对于不使用 Geoclue 但通过直接与gpsd通信来支持 GPS 的程序(例如 Firefox),您可以使用gpsfake让它假装始终连接着 GPS 传感器。然而,它没有简单的选项来指定坐标 - 您需要为其提供真实 GPS 设备捕获的输出,可能需要手动编辑以获得正确的坐标。