A Linux daemon to automatically update the system timezone based on location.
- The current location is retrieved from GeoClue
- The timezone of the current location is determined using tzf-rs
- The timezone is updated via
systemd-timedated
- Then, the daemon waits for the location updated signal from GeoClue, and repeats from step 1 when it happens
Note: The timezone choice may not be accurate if very close to a timezone border due to tzf-rs
using simplified shape data.
- GeoClue
- systemd
- The user must be allowed to use the
org.freedesktop.timedate1.set-timezone
action (root
or Polkit rule) - The user must have a running GeoClue agent or the GeoClue configuration must allow the absence of agent with an empty agent
whitelist
(see also Stebalien/localtime - Configuring GeoClue, geoclue/geoclue#74)
Please see the examples/ directory for sample configurations.
$ automatic-timezoned --help
Automatically update system timezone based on location
Usage: automatic-timezoned [OPTIONS]
Options:
-l, --log-level <LOG_LEVEL> Log level filter. See <https://docs.rs/env_logger> for syntax [env: AUTOTZD_LOG_LEVEL=] [default: info]
-h, --help Print help
-V, --version Print version
cargo build --release
cargo test
This service depends on the tzf-rs
package which bundles timezones and their geographical borders,
here are some alternatives which have made different trade-offs for performance and accuracy:
- github.com/Stebalien/localtime: Depends on the unmaintained github.com/bradfitz/latlong Go library (although if you prefer Go, github.com/ringsaturn/tzf could be used).
- Gnome Automatic Time Zone (Source Code): Depends on the
tzdata
package and Nominatim Web API for distances.
GNU General Public License v3.0