我们如何使用Internet在Linux中自动设置系统默认时区?如我所见,NTP服务器只能更新时间,而不能更新时区。是否有任何服务器可以更改时区?
我们如何使用Internet在Linux中自动设置系统默认时区?如我所见,NTP服务器只能更新时间,而不能更新时区。是否有任何服务器可以更改时区?
Answers:
这是一个旧线程,但仍然与不会自动更改时区的kubuntu 1710有关。我正在使用Chris Down的tzupdate解决方案,但还要确保在系统尝试连接到网络(WiFi或其他网络)时触发该解决方案。这假定您正在使用网络管理器。
首先打开一个终端。
安装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
测试它是否有效
sudo tzupdate
然后,我们需要做的是确保所有用户都可以访问
sudo su -
tzupdate
这将使您成为root用户,然后检查命令是否更改了您的时区。然后确保您退出以普通用户身份返回
exit
确保tzupdate可以在没有密码的情况下使用sudo运行。当我们从在后台运行它的networkmanager触发它时,这是后续步骤所需的。在终端中键入此内容以编辑sudoers文件
sudo visudo
在文件末尾添加此行
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
按CTRL-X,然后按Y,然后按Enter以保存更改
然后,我们确保NetworkManager总是在触发网络连接更改后(例如,在连接wifi时)调用此函数。为此,我们在dispatcher.d文件夹中创建一个名为tzupdate的文件,该文件仅调用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但这对我没有用
要在Kubuntu中进行测试-将您的本地时区更改为其他时区(转到任务栏中的Date plasmoid,然后右键单击并从标签中选择“ Adjust Date / Time”,然后选择“ TimeZone”)
关闭您的wifi,然后重新打开-您会看到它一旦连接到wifi,似乎要等待30秒钟左右,然后才能成功更改您的时区。
请注意,这尚未在需要在网页上输入密码的wifi中进行测试。希望它在网络连接的最后运行,这一事实应该为用户提供足够的时间来输入凭据-否则,这可能需要进一步调整(检查是否存在连接,检查是否能够连接到互联网,等待X秒钟(如果无法连接到互联网),然后重试Y次
目前尚不清楚“时区更新”是什么意思。
Unix和Linux将时间保持为自1970年1月1日UTC 00:00以来的秒数。因此,Unix系统时钟与时区无关。Linux内核中不存在时区;仅当用户空间应用程序显示时间时,才使用时区解释自1970年以来的秒数。通常,这种解释是通过C库函数完成的。时区由TZ
环境变量选择。时区定义(包括时区名称,与UTC的偏移量,夏令时生效的日期以及DST期间的偏移量)是GNU libc的一部分,通常在Linux发行版中作为“ tzdata”包提供。因此,在更新时区定义是运行的问题apt-get upgrade
,yum update
或者一些类似的操作。
请注意,某些软件(例如Java)具有自己的时区定义文件,必须分别进行更新。
NTP跟踪自1900年1月1日UTC以来的秒数。因此,NTP和Unix内核一样,没有时区的概念。