as per this post, there are two mechanisms by which the time is set in a qube:
- at system boot, the dom0 timezone is read as part of
qubes-early-vm-config.service, using thequbesdb-read /qubes-timezonecommand. - regularly, as part of
qubes-sync-time.service, using thequbes.GetDateRPC call. But this only pulls UTC time for synchronisation purposes and sets it usingdate -u; so it’s not relevant for timezones.
Using timedatectl set-timezone will work to change the timezone in a given qube, but with two caveats:
- At least in Debian 12 templates, as part of
qubes-early-vm-config.servicealso the config file/etc/timezonewill be set; this is a debian-specific file that is largely useless. This file is ignored bytimedatectl set-timezone, so once it gets set, it will contain your dom0 timezone, unless you delete it. Presumably in R4.3 this stops being an issue if you useanon-timezonewithqvm-features(but I haven’t checked). - The timezone info still remains in
qubesdb, unless you runqubesdb-rm /qubes-timezoneto delete the entry (again, not necessary if you useanon-timezone).
tl;dr if you’re on R4.2, make sure you delete /etc/timezone and run qubesdb-rm /qubes-timezone
OTOH, timedatectl set-timezone does change /etc/localtime, so it’s not necessary to link it again manually.