Автоматично встановлювати часовий пояс Linux відповідно до місця розташування


19

Як ми можемо автоматично встановити часовий пояс системи за замовчуванням у Linux за допомогою Інтернету? Як я бачу, сервери NTP можуть оновлювати лише час, але не часовий пояс. Чи є сервер, який може змінити часовий пояс?


1
Ви говорите, як змінюється часовий пояс від економії денного світла до стандартного часу?
slm

Тут є дві речі. 1. якщо в країні є зміни. 2. друге, якщо є економія денного світла.
Вбудований програміст

Сервери ntp автоматично обробляють зміни в літній час. Я не знаю жодного сервера, який визначає ваше місцезнаходження та автоматично оновлює ваш часовий пояс (як це робить мобільний телефон).
1313

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 або інше). Це передбачає, що ви використовуєте Менеджер мереж.

Спершу відкрийте термінал.

  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 без пароля. Це потрібно для подальшого кроку, коли ми запускаємо це від networkmanager, який запускає це у фоновому режимі. Введіть це в терміналі, щоб редагувати файл sudoers.

    sudo visudo
    

    Додайте цей рядок у кінці файлу

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

    Натисніть CTRL-X, а потім натисніть Y, а потім ENTER, щоб зберегти зміни

  5. Потім ми гарантуємо, що NetworkManager завжди викликає це після запуску зміни мережевого з'єднання (наприклад, під час підключення до wifi). Для цього ми створюємо файл під назвою tzupdate у папці dischercher.d, який просто викликає sudo tzupdate. Для запуску файлу потрібні виконавчі дозволи

    echo 'sudo tzupdate'| sudo tee /etc/NetworkManager/dispatcher.d/99-tzupdate
    sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
    

    Зауважте, що NetworkManager викличе виконати sudo (тобто sudo tzupdate), який зазвичай вимагає ввести пароль.

    Можливо, є кращий спосіб зробити це, наприклад, змусити NetworkManager викликати це лише тоді, коли він підключає з'єднання, а не для знизу (як це буде зроблено вище) - я спробував поставити скрипт у / etc / network / if-up .d, але це не працює для мене

  6. Щоб перевірити це в Kubuntu - Змініть локальний часовий пояс на щось інше (перейдіть до плазмоїду Date на панелі завдань і клацніть правою кнопкою миші та виберіть "Налаштувати дату / час", а потім "TimeZone" на вкладці)

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

    Зауважте, що це не перевірено на wifi, де потрібно ввести пароль на веб-сторінці. Сподіваємось, той факт, що це працює в самому кінці мережевого з’єднання, повинен забезпечити достатньо часу для введення користувачем даних облікових даних - інакше це може потребувати подальшого налаштування (перевірте, чи існує з'єднання, перевірте, чи можете ви підключитися до Інтернету, зачекайте протягом X секунд, якщо не вдалося підключитися до Інтернету, а потім повторити спробу Y раз


2
Дуже погано, що в 2018 році це все-таки правильна відповідь. Я вважаю, що у Gnome є пакет (годинник-гном), який би впорався з цим, але в KDE немає іншого хорошого рішення на даний момент.
кардинатор

Ви можете зробити "if [" $ 2 "=" up "]", щоб перевірити, чи підключено мережеве з'єднання до запуску команди. Друга парма - це те, що стан називає НМ.
flamusdiu

-2

Не ясно, що ви маєте на увазі під "оновленням часового поясу".

Unix та Linux зберігають час як кількість секунд з 1 січня 1970 р., 00:00 UTC. Таким чином, системний годинник Unix не залежить від часового поясу. Часових поясів у ядрі Linux не існує; Лише тоді, коли додаток у просторі користувачів відображає час, інтерпретується кількість секунд з 1970 року за допомогою часового поясу. Зазвичай таке тлумачення здійснюється за допомогою функцій бібліотеки С. Часовий пояс вибирається TZзмінною середовища. Визначення часового поясу (які складаються з назви часового поясу, зміщеного від UTC, дати, коли діє літній час, і зсувів під час DST) є частиною GNU libc і зазвичай включаються в дистрибутиви Linux як пакет "tzdata". Таким чином, оновлення визначення часового поясу є питанням працює apt-get upgrade, yum updateабо який - то подібна операція.

Зауважте, що деякі програми, наприклад, Java, мають власні файли визначення часового поясу, які потрібно оновлювати окремо.

NTP відстежує кількість секунд з 1 січня 1900 року за UTC . Тому NTP, як і ядро ​​Unix, не має поняття часових поясів.


2
Оновлення часового поясу, ми можемо побачити, що команда "дата" друкує час та дату відповідно до / etc / localtime timezone, ми можемо змінити часовий пояс вручну, створивши символічне посилання / usr / share / zoneinfo / America / Los_Angeles. але це ручний спосіб. Я хочу, він повинен автоматично оновлювати часовий пояс країни, де я перебуваю, а не робити це вручну.
Вбудований програміст

Простіше кажучи, це локальний час, автоматизовані оновлення часового поясу потрібні лише людям, які багато подорожують.
Cestarian
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.