Secara otomatis mengatur zona waktu Linux berdasarkan lokasi

19

Bagaimana kita dapat secara otomatis mengatur zona waktu default sistem di Linux menggunakan Internet? Seperti yang saya lihat, server NTP hanya dapat memperbarui waktu, tetapi bukan zona waktu. Apakah ada server yang dapat mengubah zona waktu?

Programmer Tertanam
sumber
1
Apakah Anda mengatakan seperti perubahan zona waktu dari penghematan cahaya siang ke waktu standar?
slm
Di sini, ada dua hal. 1.jika ada perubahan di negara. 2. kedua jika ada perubahan penghematan cahaya siang hari.
Embedded Programmer
server ntp menangani perubahan waktu musim panas secara otomatis. Saya tidak tahu ada server yang mendeteksi lokasi Anda dan memperbarui zona waktu Anda secara otomatis (seperti halnya ponsel).
drs
2
@ drs. Lebih tepatnya, NTP sama sekali tidak peduli dengan zona waktu. Waktu NTP adalah UTC, sederhana dan sederhana, dan konversi zona waktu untuk klien untuk melakukan. Klien NTP tertentu mungkin melakukan konversi zona waktu, atau mungkin juga tidak, tetapi karena sebagian besar sistem * nix menetapkan jam sistem ke UTC, maka seharusnya tidak perlu.
CVn

Jawaban:

36

Saya menulis sebuah program beberapa waktu lalu yang melakukan ini: tzupdate .

Anda dapat melihat apa yang akan mengatur zona waktu Anda (tanpa benar-benar mengaturnya) dengan menjalankan tzupdate -p:

$ tzupdate -p
Europe/Malta

Anda dapat mengaturnya menjadi nyata dengan menjalankannya tzupdatesebagai root.

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

Ini bekerja dengan:

  • Melakukan geolokasi IP Anda saat ini
  • Mendapatkan zona waktu untuk lokasi itu
  • Memperbarui symlink di /etc/localtimeuntuk menunjuk ke file zoneinfo untuk zona waktu itu
Chris Down
sumber
6

Ini adalah utas lama, tetapi masih relevan untuk kubuntu 1710 yang tidak mengubah zona waktu secara otomatis. Saya menggunakan solusi Chris Down untuk tzupdate, tetapi memastikan juga bahwa itu dipicu ketika sistem mencoba terhubung ke jaringan (wifi atau lainnya). Ini mengasumsikan bahwa Anda menggunakan Network Manager.

Buka terminal terlebih dahulu.

  1. Instal tzupdate

    sudo apt install python-pip
    pip install -U tzupdate
    

    Kemudian pastikan itu dapat diakses oleh semua pengguna

    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. Uji apakah itu berhasil

    sudo tzupdate
    
  3. Yang perlu kita lakukan adalah memastikan bahwa ini dapat diakses oleh semua pengguna

    sudo su -
    tzupdate
    

    yang menjatuhkan Anda sebagai root dan kemudian memeriksa bahwa perintah mengubah zona waktu Anda. Kemudian pastikan Anda keluar untuk kembali sebagai pengguna normal

    exit
    
  4. Pastikan tzupdate dapat dijalankan dengan sudo tanpa kata sandi. Ini diperlukan untuk langkah selanjutnya ketika kami memicu ini dari networkmanager yang menjalankan ini di latar belakang. Ketik ini di terminal untuk mengedit file sudoers

    sudo visudo
    

    Tambahkan baris ini di akhir file

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

    Tekan CTRL-X dan kemudian tekan Y dan kemudian ENTER untuk menyimpan perubahan

  5. Kami kemudian memastikan bahwa NetworkManager selalu memanggil ini setelah memicu perubahan koneksi jaringan (mis. Saat menghubungkan ke wifi). Untuk ini kami membuat file bernama tzupdate di folder dispatcher.d yang hanya memanggil sudo tzupdate. File membutuhkan izin yang dapat dieksekusi untuk dijalankan

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

    Perhatikan bahwa NetworkManager akan memanggil eksekusi sudo (mis. Sudo tzupdate) yang biasanya akan meminta kata sandi.

    Mungkin ada cara yang lebih baik untuk melakukan ini yaitu mendapatkan NetworkManager untuk memanggil ini hanya ketika itu membawa koneksi naik dan tidak juga untuk turun (seperti yang akan dilakukan di atas) - Saya telah mencoba meletakkan skrip di / etc / network / if-up .d tapi ini tidak berhasil untuk saya

  6. Untuk mengujinya di Kubuntu - Ubah zona waktu lokal Anda ke sesuatu yang lain (Buka Plasmoid Tanggal di bilah tugas Anda dan klik kanan dan Pilih 'Sesuaikan Tanggal / Waktu' dan kemudian 'Zona Waktu' dari tab)

    Matikan wifi Anda dan nyalakan kembali - Anda akan melihat bahwa setelah terhubung ke wifi, tampaknya menunggu sekitar 30 detik dan kemudian akan berhasil mengubah zona waktu Anda.

    Perhatikan bahwa ini belum diuji dengan wifi di mana orang perlu memasukkan kata sandi di halaman web. Semoga fakta bahwa ini berjalan di akhir koneksi jaringan harus menyediakan cukup waktu bagi pengguna untuk memasukkan kredensial - jika tidak, ini mungkin perlu penyesuaian lebih lanjut (periksa apakah ada koneksi, periksa apakah Anda dapat terhubung ke internet, tunggu selama X detik jika tidak dapat terhubung ke internet dan coba lagi kali Y

Bharat Rajagopalan
sumber
2
Sayang sekali bahwa pada tahun 2018 ini masih merupakan jawaban yang benar. Saya percaya Gnome memiliki paket (gnome-jam) yang akan menangani ini tetapi di KDE tidak ada solusi bagus lainnya saat ini.
cardonator
Anda dapat melakukan "jika [" $ 2 "=" naik "]" untuk memeriksa apakah koneksi jaringan sudah aktif sebelum menjalankan perintah. Parm kedua adalah kondisi yang disebut NM.
flamusdiu
-2

Tidak jelas apa yang Anda maksud dengan "pembaruan zona waktu".

Unix dan Linux menjaga waktu sebagai jumlah detik sejak 1 Januari 1970, 00:00 UTC. Oleh karena itu jam sistem Unix bebas zona waktu. Zona waktu tidak ada di kernel Linux; hanya ketika aplikasi userspace menampilkan waktu di mana jumlah detik sejak 1970 ditafsirkan menggunakan zona waktu. Biasanya, interpretasi ini dilakukan melalui fungsi C library. Zona waktu dipilih oleh TZvariabel lingkungan. Definisi zona waktu (yang terdiri dari nama zona waktu, offset dari UTC, tanggal ketika waktu musim panas berlaku, dan offset selama DST) adalah bagian dari GNU libc, dan biasanya dimasukkan dalam distribusi Linux sebagai paket "tzdata". Oleh karena itu, memperbarui definisi zona waktu adalah masalah berjalan apt-get upgrade, yum updateatau beberapa operasi serupa.

Perhatikan bahwa beberapa perangkat lunak, seperti Java, memiliki file definisi zona waktu sendiri, yang harus diperbarui secara terpisah.

NTP melacak jumlah detik sejak 1 Januari 1900, UTC . Oleh karena itu, NTP, seperti kernel Unix, tidak memiliki konsep zona waktu.

200_sukses
sumber
2
Pembaruan zona waktu, kita dapat melihat "tanggal" perintah akan mencetak waktu dan tanggal sesuai dengan / etc / localtime timezone, kita dapat mengubah zona waktu secara manual dengan membuat tautan simbolis dari / usr / share / zoneinfo / Amerika / Los_Angeles. tapi ini cara manual melakukannya. Saya ingin, itu harus secara otomatis memperbarui zona waktu negara tempat saya, daripada melakukan secara manual.
Embedded Programmer
Secara sederhana, ini untuk waktu yang terlokalisasi, pembaruan zona waktu otomatis hanya diperlukan untuk orang yang sering bepergian.
Cadangan