Wie kann die Standard-Zeitzone des Systems unter Linux automatisch über das Internet festgelegt werden? Aus meiner Sicht können NTP-Server nur die Uhrzeit aktualisieren, nicht jedoch die Zeitzone. Gibt es einen Server, der die Zeitzone ändern kann?
Wie kann die Standard-Zeitzone des Systems unter Linux automatisch über das Internet festgelegt werden? Aus meiner Sicht können NTP-Server nur die Uhrzeit aktualisieren, nicht jedoch die Zeitzone. Gibt es einen Server, der die Zeitzone ändern kann?
Antworten:
Ich habe vor einiger Zeit ein Programm geschrieben, das dies tut: tzupdate .
Sie können sehen, auf welche Zeitzone Ihre Zeitzone eingestellt wäre (ohne sie tatsächlich einzustellen), indem Sie Folgendes ausführen tzupdate -p
:
$ tzupdate -p
Europe/Malta
Sie können es für real festlegen, indem Sie tzupdate
als root ausführen.
$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013
Dies funktioniert durch:
/etc/localtime
, um auf die Zoneinfo-Datei für diese Zeitzone zu verweisenDies ist ein alter Thread, aber immer noch relevant für Kubuntu 1710, der die Zeitzone nicht automatisch ändert. Ich verwende Chris Downs Lösung für tzupdate, stelle aber auch sicher, dass es ausgelöst wird, wenn das System versucht, eine Verbindung zu einem Netzwerk (WLAN oder anderes) herzustellen. Dies setzt voraus, dass Sie Network Manager verwenden.
Öffnen Sie zuerst ein Terminal.
Installieren Sie tzupdate
sudo apt install python-pip
pip install -U tzupdate
Stellen Sie dann sicher, dass alle Benutzer darauf zugreifen können
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
Testen Sie, ob es funktioniert
sudo tzupdate
Wir müssen dann sicherstellen, dass dies für alle Benutzer zugänglich ist
sudo su -
tzupdate
Dadurch werden Sie als Root angemeldet und überprüfen, ob der Befehl Ihre Zeitzone ändert. Stellen Sie dann sicher, dass Sie das Programm beenden, um als normaler Benutzer zurückzukehren
exit
Stellen Sie sicher, dass tzupdate mit sudo ohne Kennwort ausgeführt werden kann. Dies wird für einen späteren Schritt benötigt, wenn wir dies über den Netzwerkmanager auslösen, der dies im Hintergrund ausführt. Geben Sie dies in ein Terminal ein, um die sudoers-Datei zu bearbeiten
sudo visudo
Fügen Sie diese Zeile am Ende der Datei hinzu
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
Drücken Sie STRG-X und dann Y und dann EINGABE, um die Änderungen zu speichern
Wir stellen dann sicher, dass NetworkManager dies immer dann aufruft, wenn eine Änderung der Netzwerkverbindung ausgelöst wird (z. B. wenn eine Verbindung zu einem WLAN hergestellt wird). Dazu erstellen wir im Ordner dispatcher.d eine Datei namens tzupdate, die einfach sudo tzupdate aufruft. Die Datei benötigt ausführbare Berechtigungen zum Ausführen
echo 'sudo tzupdate'| sudo tee /etc/NetworkManager/dispatcher.d/99-tzupdate
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
Beachten Sie, dass NetworkManager "execute sudo" (dh "sudo tzupdate") aufruft, wobei normalerweise ein Kennwort abgefragt wird.
Möglicherweise gibt es eine bessere Möglichkeit, dies zu tun, dh, NetworkManager ruft dies nur auf, wenn eine Verbindung hergestellt wird, und nicht, wenn die Verbindung unterbrochen wird (wie oben beschrieben). Ich habe versucht, das Skript in / etc / network / if-up abzulegen .d aber das hat bei mir nicht geklappt
Um dies in Kubuntu zu testen - Ändern Sie Ihre lokale Zeitzone in eine andere (Gehen Sie zum Datumsplasmoid in Ihrer Taskleiste und klicken Sie mit der rechten Maustaste und wählen Sie "Datum / Zeit anpassen" und dann "Zeitzone" auf der Registerkarte).
Schalten Sie Ihr WLAN aus und wieder ein - Sie werden feststellen, dass es nach dem Herstellen der Verbindung zum WLAN anscheinend 30 Sekunden wartet und dann Ihre Zeitzone erfolgreich ändern sollte.
Beachten Sie, dass dies nicht mit WLAN getestet wurde, bei dem auf einer Webseite ein Passwort eingegeben werden muss. Hoffentlich sollte die Tatsache, dass dies ganz am Ende einer Netzwerkverbindung ausgeführt wird, einem Benutzer genügend Zeit geben, um Anmeldeinformationen einzugeben. Andernfalls müssen möglicherweise weitere Anpassungen vorgenommen werden für X Sekunden, wenn keine Verbindung zum Internet hergestellt werden kann, und wiederholen Sie Y-mal
Es ist nicht klar, was Sie mit "Zeitzonenaktualisierung" meinen.
Unix und Linux geben die Zeit in Sekunden seit dem 1. Januar 1970, 00:00 UTC an. Die Unix-Systemuhr ist daher zeitzonenunabhängig. Zeitzonen existieren im Linux-Kernel nicht. Nur wenn eine Userspace-Anwendung die Zeit anzeigt, wird die Anzahl der Sekunden seit 1970 unter Verwendung einer Zeitzone interpretiert. Normalerweise erfolgt diese Interpretation über C-Bibliotheksfunktionen. Die Zeitzone wird von der TZ
Umgebungsvariablen ausgewählt . Die Zeitzonendefinitionen (die aus einem Zeitzonennamen, einem Versatz von UTC, dem Datum, an dem die Sommerzeit gilt, und den Versätzen während der Sommerzeit bestehen) sind Teil von GNU libc und werden in Linux-Distributionen normalerweise als "tzdata" -Paket mitgeliefert. Daher die Zeitzone Definitionen aktualisieren , ist eine Frage der Lauf apt-get upgrade
, yum update
oder einem ähnlichen Betrieb.
Beachten Sie, dass manche Software, wie z. B. Java, eigene Zeitzonen-Definitionsdateien hat, die separat aktualisiert werden müssen.
NTP protokolliert die Anzahl der Sekunden seit dem 1. Januar 1900 (UTC) . Daher kennt NTP wie der Unix-Kernel keine Zeitzonen.