Linux saat dilimini konuma göre otomatik olarak ayarla


19

İnterneti kullanarak Linux'ta sistem varsayılan saat dilimini otomatik olarak nasıl ayarlayabiliriz? Gördüğüm gibi, NTP sunucuları sadece zamanı güncelleyebilir, ancak saat dilimini güncelleyemez. Saat dilimini değiştirebilecek herhangi bir sunucu var mı?


1
Saat dilimi, gün ışığı tasarrufundan standart zamana değişiyor gibi mi diyorsunuz?
slm

Burada iki şey var. 1. ülkede değişiklik varsa. 2. ikinci gün ışığı tasarrufunda değişiklik varsa.
Gömülü Programcı

ntp sunucuları yaz saati uygulamasındaki değişiklikleri otomatik olarak işler. Konumunuzu algılayan ve saat diliminizi otomatik olarak güncelleyen herhangi bir sunucu bilmiyorum (cep telefonu gibi).
drs

2
@drs Daha doğrusu, NTP saat dilimini hiç umursamıyor. NTP süresi UTC, sade ve basittir ve saat dilimi dönüşümü istemcinin gerçekleştirmesi içindir. Belirli bir NTP istemcisi olabilir zaman dilimi dönüşüm yapmak ya da olmayabilir, ancak çoğu * nix sistemleri zaten UTC sistem saati seti beri, bu gerekmez.
CVn

Yanıtlar:


36

Bir süre önce bunu yapan bir program yazdım: tzupdate .

Saat diliminizi neyi ayarlayacağını (gerçekten ayarlamadan) çalıştırarak görebilirsiniz tzupdate -p:

$ tzupdate -p
Europe/Malta

tzupdateKök olarak çalışarak gerçek için ayarlayabilirsiniz .

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

Bu şu şekilde çalışır:

  • Mevcut IP'nizi coğrafi olarak konumlandırma
  • Bu konum için saat dilimini alma
  • /etc/localtimeSymlink'i, saat dilimi için zoneinfo dosyasına işaret edecek şekilde güncelleme

6

Bu eski bir iş parçacığıdır, ancak saat dilimini otomatik olarak değiştirmeyen kubuntu 1710 için hala geçerlidir. Chris Down'ın çözümünü tzupdate için kullanıyorum, ancak sistem bir ağa (wifi veya diğer) bağlanmaya çalıştığında da tetiklenmesini sağlıyor. Bu, Ağ Yöneticisi'ni kullandığınızı varsayar.

İlk önce bir terminal açın.

  1. Tzupdate yükle

    sudo apt install python-pip
    pip install -U tzupdate
    

    Ardından, tüm kullanıcılar tarafından erişilebilir olduğundan emin olun

    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. Çalıştığını test edin

    sudo tzupdate
    
  3. Daha sonra yapmamız gereken, bunun tüm kullanıcılar tarafından erişilebilir olmasını sağlamaktır

    sudo su -
    tzupdate
    

    Bu da sizi kök olarak bırakır ve komutun saat diliminizi değiştirip değiştirmediğini denetler. Ardından normal kullanıcı olarak geri dönmek için çıkış yaptığınızdan emin olun

    exit
    
  4. Tzupdate'in sudo ile şifre olmadan çalıştırılabildiğinden emin olun. Bunu, bunu arka planda çalıştıran networkmanager'den tetiklediğimizde daha sonraki bir adım için bu gereklidir. Sudoers dosyasını düzenlemek için bunu bir terminalde yazın

    sudo visudo
    

    Bu satırı dosyanın sonuna ekle

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

    CTRL-X tuşlarına basın ve değişiklikleri kaydetmek için Y ve ardından ENTER tuşlarına basın

  5. Daha sonra bir ağ bağlantısı değişikliğini tetikledikten sonra (örneğin bir wifi'ye bağlanırken) NetworkManager'ın bunu her zaman aramasını sağlarız. Bunun için dispatcher.d klasöründe sadece sudo tzupdate'i çağıran tzupdate adında bir dosya oluşturuyoruz. Dosyanın çalışması için yürütülebilir izinlere ihtiyacı var

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

    NetworkManager'ın genellikle bir şifre soracak execute sudo (yani sudo tzupdate) öğesini çağıracağını unutmayın.

    Bunu yapmak için daha iyi bir yol olabilir yani NetworkManager sadece bir bağlantı getirir ve aşağı için değil (yukarıdaki gibi) çağırmak için olsun - Ben komut dosyası / etc / network / if-up koyarak denedim .d ama bu benim için çalışmadı

  6. Bunu Kubuntu'da test etmek için - Yerel saat diliminizi başka bir şeye değiştirin (görev çubuğunuzdaki Tarih plazmoidine gidin ve sağ tıklayın ve sekmeden 'Tarih / Saati Ayarla' ve ardından 'Saat Dilimi'ni seçin)

    Wifi'nizi kapatın ve tekrar açın - wifi'ye bağlandığında, yaklaşık 30 saniye beklediğini göreceksiniz ve daha sonra saat diliminizi başarıyla değiştirmelisiniz.

    Bunun, bir web sayfasına şifre girilmesi gereken wifi ile test edilmediğini unutmayın. Umarım bunun bir ağ bağlantısının en sonunda çalışması, bir kullanıcının kimlik bilgilerini girmesi için yeterli zaman sağlamalıdır - aksi takdirde bunun daha fazla ayarlanması gerekebilir (bir bağlantı olup olmadığını kontrol edin, internete bağlanabildiğinizi kontrol edin, bekleyin İnternete bağlanamıyorsanız ve ardından Y kez tekrar deneyin


2
2018'de bunun hala doğru cevap olması çok kötü. Gnome'un bununla başa çıkacak bir paketi (gnome saatler) olduğuna inanıyorum, ancak KDE'de şu anda başka iyi bir çözüm yok.
cardonator

Komutu çalıştırmadan önce ağ bağlantısının açık olup olmadığını kontrol etmek için "if [" $ 2 "=" yukarı "]" yapabilirsiniz. İkinci parms NM tarafından adlandırılan durumdur.
flamusdiu

-2

"Saat dilimi güncellemesi" ile ne demek istediğiniz açık değildir.

Unix ve Linux zamanı 1 Ocak 1970, 00:00 UTC'den bu yana geçen saniye olarak tutar. Unix sistem saati bu nedenle saat diliminden bağımsızdır. Linux çekirdeğinde zaman dilimleri yoktur; ancak bir kullanıcı alanı uygulaması, 1970'den bu yana geçen saniye sayısının bir saat dilimi kullanılarak yorumlandığı süreyi görüntüler. Genellikle, bu yorum C kütüphanesi fonksiyonları ile yapılır. Saat dilimi TZortam değişkeni tarafından seçilir . Saat dilimi tanımları (saat dilimi adı, UTC'den ofset, yaz saati uygulamasının geçerli olduğu tarihler ve DST sırasındaki ofsetler) GNU libc'nin bir parçasıdır ve genellikle Linux dağıtımlarına "tzdata" paketi olarak dahil edilir. Bu nedenle, saat dilimi tanımlarını güncelleme çalışan bir konudur apt-get upgrade, yum updateveya bazı benzer operasyon.

Java gibi bazı yazılımların ayrı olarak güncellenmesi gereken kendi saat dilimi tanım dosyalarına sahip olduğunu unutmayın.

NTP, 1 Ocak 1900, UTC'den bu yana geçen saniye sayısını takip eder . Bu nedenle, NTP, Unix çekirdeği gibi, zaman dilimleri kavramına sahip değildir.


2
Saat dilimi güncellemesi, "tarih" komutunun / etc / localtime saat dilimine göre saat ve tarihi yazdıracağını görebiliriz, / usr / share / zoneinfo / America / Los_Angeles sembolik bağlantısı oluşturarak saat dilimini manuel olarak değiştirebiliriz. ama bu manuel olarak yapmanın bir yoludur. Manuel olarak yapmak yerine, bulunduğum ülkenin saat dilimini otomatik olarak güncellemeliyim.
Gömülü Programcı

Basit bir ifadeyle, yerelleştirilmiş bir süre içindir, otomatik saat dilimi güncellemeleri yalnızca çok seyahat eden kişiler için gereklidir.
Cestarian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.