Как мы можем автоматически установить системный часовой пояс по умолчанию в Linux, используя Интернет? На мой взгляд, NTP-серверы могут обновлять только время, но не часовой пояс. Есть ли сервер, который может изменить часовой пояс?
Как мы можем автоматически установить системный часовой пояс по умолчанию в Linux, используя Интернет? На мой взгляд, NTP-серверы могут обновлять только время, но не часовой пояс. Есть ли сервер, который может изменить часовой пояс?
Ответы:
Я недавно написал программу, которая делает это: tzupdate .
Вы можете увидеть, на что он установил бы ваш часовой пояс (фактически не устанавливая его), запустив tzupdate -p
:
$ tzupdate -p
Europe/Malta
Вы можете установить его по-настоящему, запустив tzupdate
от имени пользователя root.
$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013
Это работает:
/etc/localtime
указатель на файл zoneinfo для этого часового поясаЭто старая тема, но она по-прежнему актуальна для kubuntu 1710, которая не меняет часовой пояс автоматически. Я использую решение Криса Дауна для tzupdate, но также гарантирую, что оно срабатывает, когда система пытается подключиться к сети (Wi-Fi или другое). Это предполагает, что вы используете Network Manager.
Сначала откройте терминал.
Установить tzupdate
sudo apt install python-pip
pip install -U tzupdate
Затем убедитесь, что он доступен для всех пользователей
sudo cp -R ~/.local/lib/python2.7/site-packages/. /usr/lib/python2.7/.
sudo cp /home/marta_riba/.local/bin/tzupdate /usr/local/bin/tzupdate
Проверьте, что это работает
sudo tzupdate
Затем нам нужно убедиться, что это доступно всем пользователям.
sudo su -
tzupdate
который возвращает вас как root и затем проверяет, что команда меняет ваш часовой пояс. Затем убедитесь, что вы выходите, чтобы вернуться как обычный пользователь
exit
Убедитесь, что tzupdate может быть запущен с sudo без пароля. Это необходимо для следующего шага, когда мы запускаем это из сетевого менеджера, который запускает это в фоновом режиме. Введите это в терминале, чтобы отредактировать файл sudoers
sudo visudo
Добавьте эту строку в конец файла
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
Нажмите CTRL-X, затем нажмите Y и затем ENTER, чтобы сохранить изменения
Затем мы гарантируем, что NetworkManager всегда вызывает это после запуска изменения сетевого подключения (например, при подключении к Wi-Fi). Для этого мы создаем файл с именем tzupdate в папке dispatcher.d, который просто вызывает sudo tzupdate. Для запуска файла требуются разрешения на выполнение
echo 'sudo tzupdate'| sudo tee /etc/NetworkManager/dispatcher.d/99-tzupdate
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
Обратите внимание, что NetworkManager вызовет execute sudo (т.е. sudo tzupdate), который обычно запрашивает пароль.
Возможно, есть лучший способ сделать это, то есть заставить NetworkManager вызывать его только тогда, когда он устанавливает соединение, а не отключает его (как это будет делать выше) - я попытался поместить скрипт в / etc / network / if-up. .d, но это не сработало для меня
Чтобы проверить это в Kubuntu: измените местный часовой пояс на другой (перейдите к плазмоиду Дата на панели задач, щелкните правой кнопкой мыши и выберите «Настроить дату / время», а затем «TimeZone» на вкладке)
Выключите Wi-Fi и снова включите его - вы увидите, что, как только он подключится к Wi-Fi, он будет ждать около 30 секунд, а затем должен успешно изменить часовой пояс.
Обратите внимание, что это не было проверено с Wi-Fi, где нужно ввести пароль на веб-странице. Надеемся, что тот факт, что это выполняется в самом конце сетевого подключения, должен предоставить пользователю достаточно времени для ввода учетных данных - в противном случае это может потребовать дополнительной настройки (проверьте, существует ли подключение, проверьте, можете ли вы подключиться к Интернету, подождите в течение X секунд, если не удается подключиться к Интернету, а затем повторите попытку Y раз
Непонятно, что вы подразумеваете под «обновлением часового пояса».
Unix и Linux хранят время как количество секунд с 1 января 1970 года, 00:00 UTC. Поэтому системные часы Unix не зависят от часового пояса. Часовые пояса не существуют в ядре Linux; только когда приложение пользовательского пространства отображает время, которое количество секунд с 1970 года интерпретируется с использованием часового пояса. Обычно эта интерпретация выполняется с помощью функций библиотеки C. Часовой пояс выбирается TZ
переменной среды. Определения часовых поясов (которые состоят из имени часового пояса, смещения от UTC, дат вступления в силу летнего времени и смещений во время летнего времени) являются частью GNU libc и обычно включаются в дистрибутивы Linux в виде пакета "tzdata". Таким образом, обновление определения часового пояса является вопросом работает apt-get upgrade
, yum update
или какой - то подобная операция.
Обратите внимание, что некоторые программы, такие как Java, имеют собственные файлы определения часовых поясов, которые необходимо обновлять отдельно.
NTP отслеживает количество секунд с 1 января 1900 года по UTC . Поэтому NTP, как и ядро Unix, не имеет понятия часовых поясов.