Linuxでインターネットを使用してシステムのデフォルトのタイムゾーンを自動的に設定するにはどうすればよいですか?私が見ているように、NTPサーバーはタイムゾーンではなく時間のみを更新できます。タイムゾーンを変更できるサーバーはありますか?
私はこれを行うプログラムを少し前に書きました: tzupdate 。
tzupdate -p
を実行すると、タイムゾーンが(実際に設定することなく)何に設定されるかを確認できます。
$ tzupdate -p
Europe/Malta
Rootとしてtzupdate
を実行すると、実際に設定できます。
$ Sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013
これは次の方法で機能します。
/etc/localtime
のシンボリックリンクを更新するこれは古いスレッドですが、タイムゾーンを自動的に変更しないkubuntu 1710にも関連しています。私はtzupdateにChris Downのソリューションを使用していますが、システムがネットワーク(wifiまたはその他)に接続しようとしたときにトリガーされることも確認しています。これは、Network Managerを使用していることを前提としています。
最初にターミナルを開きます。
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
パスワードなしでSudoを使用してtzupdateを実行できることを確認してください。これは、バックグラウンドでこれを実行するnetworkmanagerからこれをトリガーする後のステップで必要です.sudoersファイルを編集するためにターミナルでこれを入力します
Sudo visudo
この行をファイルの最後に追加します
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
CTRL-Xを押してからYを押し、次にENTERを押して変更を保存します
次に、NetworkManagerがネットワーク接続の変更をトリガーした後(wifiに接続するときなど)に必ずこれを呼び出すようにします。このため、sudo tzupdateを呼び出すだけのdispatcher.dフォルダーに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でテストするには-ローカルタイムゾーンを別のタイムゾーンに変更します(タスクバーの日付プラズモイドに移動し、右クリックして[日付/時刻の調整]を選択してから、タブから[TimeZone]を選択します)。
Wi-Fiをオフにしてからもう一度オンにします。Wi-Fiに接続すると、30秒ほど待機しているように見え、タイムゾーンが正常に変更されるはずです。
これは、ウェブページでパスワードを入力する必要があるwifiではテストされていません。うまくいけば、これがネットワーク接続の最後で実行されるという事実は、ユーザーが資格情報を入力するのに十分な時間を提供する必要があります-それ以外の場合、これはさらに微調整が必要になる場合があります(接続が存在することを確認し、インターネットに接続できることを確認し、待つインターネットに接続できない場合はX秒間、Y回再試行します
「タイムゾーンの更新」の意味が明確ではありません。
UnixおよびLinuxでは、1970年1月1日00:00 UTCからの秒数で時間を保持しています。したがって、Unixシステムクロックはタイムゾーンに依存しません。 Linuxカーネルにはタイムゾーンは存在しません。 1970年からの秒数がタイムゾーンを使用して解釈されるのは、ユーザースペースアプリケーションが時刻を表示するときだけです。通常、この解釈はCライブラリ関数を介して行われます。タイムゾーンは、TZ
環境変数によって選択されます。タイムゾーン定義(タイムゾーン名、UTCからのオフセット、夏時間が有効な日付、およびDST中のオフセットで構成される)は、GNU libcの一部であり、通常は「tzdata」パッケージとしてのLinuxディストリビューションです。したがって、タイムゾーン定義を更新するには、apt-get upgrade
、yum update
、または同様の操作。
Javaなどの一部のソフトウェアには独自のタイムゾーン定義ファイルがあり、個別に更新する必要があることに注意してください。
NTPは、1900年1月1日からの秒数を追跡します、UTC 。そのため、UNIXカーネルと同様に、NTPにはタイムゾーンの概念がありません。