場所に応じてLinuxタイムゾーンを自動的に設定します。

場所に応じてLinuxタイムゾーンを自動的に設定します。

インターネットを使用してLinuxでシステムのデフォルトのタイムゾーンを自動的に設定するには?私が知っている限り、NTPサーバーはタイムゾーンではなく時間のみを更新できます。タイムゾーンを変更できるサーバーはありますか?

答え1

私はしばらく前に次のプログラムを書いています。更新時間

次のコマンドを実行すると、タイムゾーンを実際に設定せずに何に設定しているかを確認できますtzupdate -p

$ tzupdate -p
Europe/Malta

ルートとして実行して設定できますtzupdate

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

これは次のように達成されます。

  • 現在のIPの場所を確認してください
  • その場所のタイムゾーンを取得します。
  • /etc/localtimeそのタイムゾーンのzoneinfoファイルを指すようにシンボリックリンクを更新してください。

答え2

これは古いスレッドですが、タイムゾーンを自動的に変更しないkubuntu 1710とまだ関係しています。私はChris Downのtzupdateソリューションを使用していますが、システムがネットワーク(WiFiなど)に接続しようとしたときにこのソリューションがトリガーされることを確認しています。これはNetwork Managerを使用していると仮定します。

まず端末を開きます。

  1. 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
    
  2. 動作するかテスト

    sudo tzupdate
    
  3. それから私たちがすべきことは、すべてのユーザーがそれにアクセスできることを確認することです。

    sudo su -
    tzupdate
    

    rootとしてログインし、コマンドがタイムゾーンを変更したことを確認します。その後、ログアウトして通常のユーザーに戻ります。

    exit
    
  4. パスワードなしでsudoを使用してtzupdateを実行できることを確認してください。このコマンドは、バックグラウンドでこのコマンドを実行するネットワーク管理者でこのコマンドをトリガーするときの後続のステップに必要です。 sudoersファイルを編集するには、端末にこのコマンドを入力します。

    sudo visudo
    

    ファイルの末尾にこの行を追加します。

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

    変更を保存するには、Ctrl-X、Y、ENTERを順に押します。

  5. 次に、ネットワーク接続の変更をトリガーした後(たとえば、WiFiに接続するとき)、NetworkManagerが常にこの関数を呼び出すことを確認します。これを行うには、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は通常、パスワードを要求するsudo呼び出し(sudo tzupdateなど)を実行します。

    これを行うより良い方法があるかもしれません。つまり、接続が失われたときに呼び出すのではなく(上記のように)接続が確立されたときにのみNetworkManagerを呼び出すようにします。スクリプトを/etc/network/に入れてみました。 if-up .dしかしこれは私にはうまくいきません

  6. Kubuntuでテストするには - ローカルタイムゾーンを別のタイムゾーンに変更します(タスクバーの「Date Plasma」に移動し、右クリックして「日付/時間調整」を選択し、タブから「タイムゾーン」を選択します)

    Wi-Fiをオフにして再びオンにすると、Wi-Fiに接続すると約30秒待ってからタイムゾーンが正常に変更されることがわかります。

    Wi-Fiではテストされておらず、ウェブページにパスワードが必要です。ネットワーク接続の最後に実行されるという事実は、ユーザーが資格情報を入力するのに十分な時間を提供することを願っています。それ以外の場合は追加の調整が必要になる場合があります(接続が存在することを確認し、インターネットに接続できることを確認して、しばらくお待ちください)。インターネットに接続できない場合)X秒後にY回再試行してください。

答え3

  • インストールするgeoclue。 Ubuntu / Debian:sudo apt install geoclue-2.0アーチLinux sudo pacman -S geoclue:。
  • GNOME Classicを使用する場合(通常のGNOMEに似ている必要があります):
    • 行く 設定 - >個人情報 - > Location Services'オン'に設定位置情報サービス
    • 行く設定 - >日付と時刻 - >設定Automatic Time ZoneAutomatic Date & Time「オン」に設定 自動タイムゾーン

答え4

「タイムゾーンの更新」が何を意味するのかは不明です。

UnixとLinuxは、1970年1月1日00:00 UTC以降の時間を秒単位で記録します。したがって、Unixシステムクロックは時間帯に依存しません。 Linuxカーネルにはタイムゾーンがありません。ユーザースペースアプリケーションが時間を表示する場合にのみ、タイムゾーンは1970年以降の秒を解釈するために使用されます。通常、この解釈はCライブラリ関数を介して行われます。タイムゾーンは環境変数によって選択されますTZ。タイムゾーンの定義(タイムゾーン名、UTCとのオフセット、夏時間が適用される日付、DST中のオフセットで構成されています)は、通常Linuxディストリビューションに「tzdata」パッケージとして含まれるGNU libcの一部です。 。したがって、タイムゾーン定義を更新することは、実行または同様のタスクの問題にすぎませapt-get upgradeyum update

一部のソフトウェア(Javaなど)には、個別に更新する必要がある独自のタイムゾーン定義ファイルがあります。

NTPは1900年1月1日UTC以降の秒数を記録します。。したがって、Unixカーネルと同様に、NTPにはタイムゾーンの概念はありません。

関連情報