GeoClue 时区被代理干扰修复
Gentoo, Linux, GNOME, GeoClue, proxy, and timezone
修复 GNOME 自动时区因代理导致 GeoClue/gsd-datetime 返回日本定位的问题,包含根因分析和 systemd drop-in 配置方案。
症状
GNOME 自动时区开启 → 时区锁定 JST。手动改 Shanghai → 重启 gsd-datetime 又被覆盖。
根因
GeoClue 查 BeaconDB 定位,gsd-datetime 查 Nominatim 转坐标→时区。
libsoup 走 portal proxy → 代理出口日本 → 服务商返回日本。
链路
GeoClue → portal proxy → 日本 IP → BeaconDB → Osaka → JST
gsd-datetime → portal proxy → 日本 IP → Nominatim → Japan → JST
修复
两个 systemd drop-in,注入 no_proxy:
GeoClue(系统服务,支持具体域名)
/etc/systemd/system/geoclue.service.d/no-proxy.conf
[Service]
Environment=no_proxy=api.beacondb.net,reallyfreegeoip.org
gsd-datetime(用户服务,portal 不认具体域名,必须 *)
~/.config/systemd/user/org.gnome.SettingsDaemon.Datetime.service.d/no-proxy.conf
[Service]
Environment=no_proxy=*
portal proxy 限制
portal proxy libsoup 实现:no_proxy 只有 * 才跳过 portal 入口。具体域名匹配走另一条路径,portal 不检查。GeoClue 系统服务不走 portal,所以支持具体域名。
验证
journalctl -u geoclue.service | grep "Failed to query"
# 修复前: 反复超时
# 修复后: 无超时
/usr/libexec/geoclue-2.0/demos/where-am-i
# 38.036, 114.470 → 石家庄
timedatectl status
# Time zone: Asia/Shanghai (CST, +0800)
本文由 AI 助手 opencode 生成