Автоматически устанавливать часовой пояс Linux в соответствии с местоположением

19

Как мы можем автоматически установить системный часовой пояс по умолчанию в Linux, используя Интернет? На мой взгляд, NTP-серверы могут обновлять только время, но не часовой пояс. Есть ли сервер, который может изменить часовой пояс?

Встроенный программатор
источник
1
Вы говорите, что часовой пояс меняется с перехода на летнее время на стандартное время?
СЛМ
Здесь есть две вещи. 1.Если есть изменения в стране. 2. во-вторых, если есть изменения в дневном свете.
Встроенный программатор
NTP-серверы обрабатывают изменения в летнее время автоматически. Я не знаю ни одного сервера, который бы определял ваше местоположение и автоматически обновлял ваш часовой пояс (как это делает сотовый телефон).
DRS
2
@drs Точнее, NTP вообще не заботится о часовом поясе. Время NTP - UTC, простое и простое, и преобразование часового пояса предназначено для выполнения клиентом. Определенный NTP-клиент может выполнять преобразование часового пояса или нет, но, поскольку в большинстве систем * nix системные часы в любом случае установлены на UTC, в этом нет необходимости.
CVN

Ответы:

36

Я недавно написал программу, которая делает это: tzupdate .

Вы можете увидеть, на что он установил бы ваш часовой пояс (фактически не устанавливая его), запустив tzupdate -p:

$ tzupdate -p
Europe/Malta

Вы можете установить его по-настоящему, запустив tzupdateот имени пользователя root.

$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013

Это работает:

  • Геолокация вашего текущего IP
  • Получение часового пояса для этого места
  • Обновление символической ссылки на /etc/localtimeуказатель на файл zoneinfo для этого часового пояса
Крис Даун
источник
6

Это старая тема, но она по-прежнему актуальна для kubuntu 1710, которая не меняет часовой пояс автоматически. Я использую решение Криса Дауна для tzupdate, но также гарантирую, что оно срабатывает, когда система пытается подключиться к сети (Wi-Fi или другое). Это предполагает, что вы используете Network Manager.

Сначала откройте терминал.

  1. Установить 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
    
  2. Проверьте, что это работает

    sudo tzupdate
    
  3. Затем нам нужно убедиться, что это доступно всем пользователям.

    sudo su -
    tzupdate
    

    который возвращает вас как root и затем проверяет, что команда меняет ваш часовой пояс. Затем убедитесь, что вы выходите, чтобы вернуться как обычный пользователь

    exit
    
  4. Убедитесь, что tzupdate может быть запущен с sudo без пароля. Это необходимо для следующего шага, когда мы запускаем это из сетевого менеджера, который запускает это в фоновом режиме. Введите это в терминале, чтобы отредактировать файл sudoers

    sudo visudo
    

    Добавьте эту строку в конец файла

    ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
    

    Нажмите CTRL-X, затем нажмите Y и затем ENTER, чтобы сохранить изменения

  5. Затем мы гарантируем, что 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, но это не сработало для меня

  6. Чтобы проверить это в Kubuntu: измените местный часовой пояс на другой (перейдите к плазмоиду Дата на панели задач, щелкните правой кнопкой мыши и выберите «Настроить дату / время», а затем «TimeZone» на вкладке)

    Выключите Wi-Fi и снова включите его - вы увидите, что, как только он подключится к Wi-Fi, он будет ждать около 30 секунд, а затем должен успешно изменить часовой пояс.

    Обратите внимание, что это не было проверено с Wi-Fi, где нужно ввести пароль на веб-странице. Надеемся, что тот факт, что это выполняется в самом конце сетевого подключения, должен предоставить пользователю достаточно времени для ввода учетных данных - в противном случае это может потребовать дополнительной настройки (проверьте, существует ли подключение, проверьте, можете ли вы подключиться к Интернету, подождите в течение X секунд, если не удается подключиться к Интернету, а затем повторите попытку Y раз

Бхарат Раджагопалан
источник
2
Жаль, что в 2018 году это все еще правильный ответ. Я полагаю, что у Gnome есть пакет (gnome-clock), который справится с этим, но в KDE в настоящее время нет другого хорошего решения.
кардонатор
Вы можете сделать "if [" $ 2 "=" up "]", чтобы проверить, установлено ли сетевое соединение перед выполнением команды. Второй параметр - это то, что штат называется NM.
flamusdiu
-2

Непонятно, что вы подразумеваете под «обновлением часового пояса».

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, не имеет понятия часовых поясов.

200_success
источник
2
Обновление часового пояса, мы видим, что команда «date» будет печатать время и дату в соответствии с / etc / localtime timezone, мы можем изменить часовой пояс вручную, создав символическую ссылку / usr / share / zoneinfo / America / Los_Angeles. но это ручной способ. Я хочу, он должен автоматически обновлять часовой пояс страны, где я нахожусь, а не делать вручную.
Встроенный программист
Проще говоря, это локальное время, но автоматические обновления часовых поясов нужны только людям, которые много путешествуют.
Cestarian