Настройка автоматической смены часового пояса в GNOME 46 (Ubuntu 24.04)
В GNOME есть функция автоматического определения часового пояса системы, что удобно при перемещениях между странами. К сожалению, в данный момент она сломана и требует некоторых дополнительных действий от пользователя, чтобы заставить её работать.
Общий принцип работы
GNOME использует D-Bus сервис geoclue
для получения текущего местоположения системы.
geoclue
, в свою очередь, использует внешний сервис для получения координат по IP и данным Wi-Fi сети.
Включение смены часовых поясов
Для начала необходимо включить функцию в настройках GNOME:
- В разделе настроек Date & Time - Automatic Time Zone;
- В разделе Privacy & Security / Location - Automatic Device Location.
Настройка провайдера геолокации
По умолчанию geoip
использует Mozilla Location Service для получения координат.
Проблема в том, что в 2024 году этот сервис закрылся.
В логах сервиса можно увидеть ошибку при запросе координат:
$ journalctl -u geoclue.service
Jan 08 21:12:25 user systemd[1]: Starting geoclue.service - Location Lookup Service...
Jan 08 21:12:25 user systemd[1]: Started geoclue.service - Location Lookup Service.
Jan 08 21:12:33 user geoclue[2278]: Failed to query location: No WiFi networks found
Jan 08 21:12:38 user geoclue[2278]: Failed to query location: Query location SOUP error: Not Found
Jan 08 21:17:41 user geoclue[2278]: Failed to query location: Query location SOUP error: Not Found
Jan 08 21:17:43 user geoclue[2278]: Failed to query location: Query location SOUP error: Not Found
...
geoclue
позволяет самостоятельно настроить URL провайдера геолокации. После закрытия сервиса от Mozilla
остались (и появились) другие альтернативы:
- beaconDB - бесплатный сервис (обсуждение на Hacker News);
- Google Geolocation API - требует ключа и оплачивается по количеству запросов.
Для замены будем использовать beaconDB. Нужно добавить в файл конфигурации /etc/geoclue/geoclue.conf
URL нового сервиса:
url=https://beacondb.net/v1/geolocate
После чего перезапустить демон geoclue
:
# systemctl restart geoclue.service
На этом всё. Если что-то не заработает, то необходимо проверить логи geoclue
на наличие ошибок.