Tự động đặt múi giờ Linux theo vị trí


19

Làm cách nào chúng ta có thể tự động đặt múi giờ mặc định của hệ thống trong Linux bằng Internet? Theo tôi thấy, các máy chủ NTP chỉ có thể cập nhật thời gian chứ không thể cập nhật múi giờ. Có máy chủ nào có thể thay đổi múi giờ không?


1
Bạn đang nói như thay đổi múi giờ từ tiết kiệm ánh sáng ban ngày sang thời gian tiêu chuẩn?
slm

Ở đây, có hai điều. 1. nếu có sự thay đổi trong nước. 2. thứ hai nếu có sự thay đổi trong tiết kiệm ánh sáng ban ngày.
Lập trình viên nhúng

Máy chủ ntp tự động xử lý các thay đổi về thời gian tiết kiệm ánh sáng ban ngày. Tôi không biết bất kỳ máy chủ nào phát hiện vị trí của bạn và tự động cập nhật múi giờ của bạn (giống như điện thoại di động).
DRS

2
@drs Chính xác hơn, NTP hoàn toàn không quan tâm đến múi giờ. Thời gian NTP là UTC, đơn giản và đơn giản và chuyển đổi múi giờ là để khách hàng thực hiện. Một máy khách NTP cụ thể có thể thực hiện chuyển đổi múi giờ hoặc có thể không, nhưng vì hầu hết các hệ thống * nix đều có đồng hồ hệ thống được đặt thành UTC, nên không cần thiết.
một CVn

Câu trả lời:


36

Tôi đã viết một chương trình trước đây thực hiện điều này: tzupdate .

Bạn có thể thấy những gì nó sẽ đặt múi giờ của bạn thành (mà không thực sự thiết lập nó) bằng cách chạy tzupdate -p:

$ tzupdate -p
Europe/Malta

Bạn có thể thiết lập nó thực sự bằng cách chạy tzupdatenhư root.

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

Điều này hoạt động bởi:

  • Định vị địa lý IP hiện tại của bạn
  • Lấy múi giờ cho vị trí đó
  • Cập nhật symlink tại /etc/localtimeđể trỏ đến tệp zoneinfo cho múi giờ đó

6

Đây là một chủ đề cũ, nhưng vẫn phù hợp với kubfox 1710 không tự động thay đổi múi giờ. Tôi đang sử dụng giải pháp của Chris Down cho tzupdate, nhưng cũng đảm bảo rằng nó sẽ được kích hoạt khi hệ thống cố gắng kết nối với mạng (wifi hoặc mạng khác). Điều này giả định rằng bạn đang sử dụng Trình quản lý mạng.

Mở một thiết bị đầu cuối trước.

  1. Cài đặt tzupdate

    sudo apt install python-pip
    pip install -U tzupdate
    

    Sau đó, đảm bảo rằng tất cả người dùng có thể truy cập được

    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. Kiểm tra xem nó hoạt động

    sudo tzupdate
    
  3. Sau đó, chúng tôi cần phải làm là đảm bảo rằng tất cả người dùng có thể truy cập được

    sudo su -
    tzupdate
    

    trong đó thả bạn vào quyền root và sau đó kiểm tra xem lệnh có thay đổi múi giờ của bạn không. Sau đó, đảm bảo bạn thoát để trở lại như người dùng bình thường

    exit
    
  4. Hãy chắc chắn rằng tzupdate có thể được chạy bằng sudo mà không cần mật khẩu. Điều này là cần thiết cho bước sau này khi chúng tôi kích hoạt điều này từ người quản trị mạng chạy cái này trong nền. Nhập cái này vào một thiết bị đầu cuối để chỉnh sửa tệp sudoers

    sudo visudo
    

    Thêm dòng này vào cuối tập tin

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

    Nhấn CTRL-X và sau đó nhấn Y và sau đó ENTER để lưu các thay đổi

  5. Sau đó, chúng tôi đảm bảo rằng Trình quản lý mạng luôn gọi điều này sau khi kích hoạt thay đổi kết nối mạng (ví dụ: khi kết nối với wifi). Để làm điều này, chúng ta tạo một tệp có tên là tzupdate trong thư mục distatcher.d chỉ đơn giản gọi sudo tzupdate. Các tập tin cần quyền thực thi để chạy

    echo 'sudo tzupdate'| sudo tee /etc/NetworkManager/dispatcher.d/99-tzupdate
    sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
    

    Lưu ý rằng NetworkManager sẽ gọi thực thi sudo (tức là sudo tzupdate) thường sẽ nhắc nhập mật khẩu.

    Có thể có một cách tốt hơn để làm điều này, ví dụ như yêu cầu NetworkManager gọi cuộc gọi này chỉ khi nó mang kết nối lên và không tắt (như cách trên sẽ làm) - Tôi đã thử đặt tập lệnh vào / etc / network / if-up .d nhưng điều này đã không làm việc cho tôi

  6. Để kiểm tra điều này trong Kubfox - Thay đổi múi giờ địa phương của bạn thành một thứ khác (Chuyển đến plasmoid ngày trong thanh tác vụ của bạn và nhấp chuột phải và chọn 'Điều chỉnh ngày / giờ' và sau đó 'TimeZone' từ tab)

    Tắt wifi và bật lại - bạn sẽ thấy rằng một khi nó kết nối với wifi, nó dường như đợi khoảng 30 giây và sau đó sẽ thay đổi múi giờ của bạn thành công.

    Lưu ý rằng điều này chưa được kiểm tra với wifi khi người ta cần nhập mật khẩu trên trang web. Hy vọng rằng việc này chạy ở cuối kết nối mạng sẽ cung cấp đủ thời gian để người dùng nhập thông tin đăng nhập - nếu không, điều này có thể cần điều chỉnh thêm (kiểm tra xem có kết nối nào không, kiểm tra xem bạn có thể kết nối với internet không, đợi trong X giây nếu không thể kết nối với internet và sau đó thử lại Y lần


2
Thật tệ khi năm 2018 đây vẫn là câu trả lời chính xác. Tôi tin rằng Gnome có một gói (gnome-clock) sẽ xử lý việc này nhưng trong KDE hiện tại không có giải pháp tốt nào khác.
thẻ

Bạn có thể thực hiện "if [" $ 2 "=" up "]" để kiểm tra xem kết nối mạng có hoạt động không trước khi chạy lệnh. Parms thứ hai là trạng thái đang được gọi bởi NM.
flamusdiu

-2

Không rõ ý của bạn là "cập nhật múi giờ".

Unix và Linux giữ thời gian là số giây kể từ ngày 1 tháng 1 năm 1970, 00:00 UTC. Đồng hồ hệ thống Unix do đó độc lập múi giờ. Các múi giờ không tồn tại trong nhân Linux; chỉ khi ứng dụng không gian người dùng hiển thị thời gian mà số giây kể từ năm 1970 được diễn giải bằng múi giờ. Thông thường, việc giải thích này được thực hiện thông qua các chức năng thư viện C. Múi giờ được chọn bởi TZbiến môi trường. Các định nghĩa múi giờ (bao gồm tên múi giờ, được bù từ UTC, ngày khi thời gian tiết kiệm ánh sáng ban ngày có hiệu lực và các độ lệch trong DST) là một phần của GNU libc và thường được bao gồm trong các bản phân phối Linux dưới dạng gói "tzdata". Do đó, việc cập nhật các định nghĩa múi giờ là một vấn đề chạy apt-get upgrade, yum updatehoặc một số hoạt động tương tự.

Lưu ý rằng một số phần mềm, chẳng hạn như Java, có các tệp định nghĩa múi giờ riêng, phải được cập nhật riêng.

NTP theo dõi số giây kể từ ngày 1 tháng 1 năm 1900, UTC . Do đó, NTP, giống như nhân Unix, không có khái niệm về múi giờ.


2
Cập nhật múi giờ, chúng ta có thể thấy lệnh "ngày" sẽ in thời gian và ngày theo múi giờ / etc / múi giờ địa phương, chúng ta có thể thay đổi múi giờ theo cách thủ công bằng cách tạo liên kết tượng trưng của / usr / share / zoneinfo / America / Los_Angele. nhưng đây là cách làm thủ công Tôi muốn, nó sẽ tự động cập nhật múi giờ của quốc gia nơi tôi đang ở, thay vì làm thủ công.
Lập trình viên nhúng

Nói một cách đơn giản, đó là thời gian địa phương hóa, cập nhật múi giờ tự động chỉ cần thiết cho những người đi du lịch nhiều.
Cestary
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.