場所に従ってLinuxタイムゾーンを自動的に設定


19

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


1
タイムゾーンが夏時間から標準時間に変わるように言っていますか?
slm

ここには、2つのことがあります。1.国に変更がある場合。2.夏時間に変更がある場合は2番目。
組み込みプログラマ

ntpサーバーは夏時間の変更を自動的に処理します。あなたの位置を検出し、タイムゾーンを自動的に更新するサーバーは知りません(携帯電話のように)。
Drs、

2
@drsより正確には、NTPはタイムゾーンをまったく考慮しません。NTP時間はUTCでプレーンでシンプルであり、タイムゾーン変換はクライアントが実行するためのものです。特定のNTPクライアントは、可能性があるタイムゾーンの変換を行う、またはそれがないかもしれないが、ほとんどの* nixシステムはとにかくUTCにシステムクロックを設定していることから、それはする必要はありません。
CVn

回答:


36

これを行うプログラムを少し前に作成しました:tzupdate

次のコマンドを実行すると、タイムゾーンが(実際に設定せずに)設定されることを確認できますtzupdate -p

$ tzupdate -p
Europe/Malta

tzupdaterootとして実行することで、実際に設定できます。

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

これは以下によって動作します:

  • 現在のIPの位置を特定する
  • その場所のタイムゾーンを取得する
  • /etc/localtimeそのタイムゾーンのzoneinfoファイルを指すようにsymlinkを更新する

6

これは古いスレッドですが、まだタイムゾーンを自動的に変更しないkubuntu 1710に関連しています。私はtzupdateにChris Downのソリューションを使用していますが、システムがネットワーク(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
    

    ルートとしてあなたをドロップし、コマンドがタイムゾーンを変更することを確認します。その後、通常のユーザーとして戻るために終了することを確認します

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

    sudo visudo
    

    この行をファイルの最後に追加します

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

    CTRL-Xを押してからYを押し、次にENTERを押して変更を保存します

  5. その後、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しかし、これは私のために働いていません

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

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

    これは、Webページでパスワードを入力する必要があるwifiではテストされていないことに注意してください。これがネットワーク接続の最後で実行されるという事実は、ユーザーが資格情報を入力するのに十分な時間を提供する必要があります-さもなければ、これはさらに調整が必要な場合があります(接続が存在することを確認し、インターネットに接続できることを確認し、待つインターネットに接続できず、Y回再試行できない場合はX秒間


2
2018年にこれがまだ正解であることは残念です。Gnomeにはこれを処理するパッケージ(gnome-clocks)がありますが、KDEには現在のところ他の良い解決策はありません。
カルドネーター

コマンドを実行する前に、「if ["$ 2" = "up"]」を実行して、ネットワーク接続が稼働しているかどうかを確認できます。2番目のパラメーターは、NMによって呼び出される状態です。
flamusdiu

-2

「タイムゾーン更新」の意味が明確ではありません。

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

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

NTPは、1900年1月1日UTCからの秒数を追跡します。したがって、NTPは、Unixカーネルと同様に、タイムゾーンの概念を持ちません。


2
タイムゾーンの更新、「date」コマンドが/ etc / localtimeタイムゾーンに従って時刻と日付を出力するのを確認できます。/usr/share/zoneinfo/America/Los_Angelesのシンボリックリンクを作成することにより、タイムゾーンを手動で変更できます。しかし、これは手動で行う方法です。手動で行うのではなく、私がいる国のタイムゾーンを自動的に更新する必要があります。
組み込みプログラマ

簡単に言えば、ローカライズされた時間であり、タイムゾーンの自動更新は多くの旅行者にのみ必要です。
Cestarian
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.