ตั้งค่าเขตเวลาอัตโนมัติตามสถานที่ตั้ง


19

เราจะตั้งค่าเขตเวลาเริ่มต้นของระบบโดยอัตโนมัติใน Linux โดยใช้อินเทอร์เน็ตได้อย่างไร? อย่างที่ฉันเห็นเซิร์ฟเวอร์ NTP สามารถอัปเดตเวลาเท่านั้น แต่ไม่ใช่เขตเวลา มีเซิร์ฟเวอร์ใดบ้างที่สามารถเปลี่ยนเขตเวลาได้?


1
คุณกำลังพูดว่าเขตเวลาเปลี่ยนจากการประหยัดเวลากลางวันเป็นเวลามาตรฐานหรือไม่?
slm

ที่นี่มีสองสิ่ง 1. หากมีการเปลี่ยนแปลงในประเทศ 2. สองหากมีการเปลี่ยนแปลงในการออมแสงวัน
โปรแกรมเมอร์ที่ฝังตัว

เซิร์ฟเวอร์ ntp จัดการการเปลี่ยนแปลงในเวลาออมแสงโดยอัตโนมัติ ฉันไม่รู้เซิร์ฟเวอร์ใด ๆ ที่ตรวจจับตำแหน่งของคุณและอัปเดตเขตเวลาของคุณโดยอัตโนมัติ (เช่นเดียวกับโทรศัพท์มือถือ)
drs

2
@drs แม่นยำยิ่งขึ้น NTP ไม่สนใจเขตเวลาเลย เวลา NTP คือ UTC, ธรรมดาและเรียบง่ายและการแปลงโซนเวลาสำหรับลูกค้าที่จะดำเนินการ ไคลเอนต์ NTP ที่เฉพาะเจาะจงอาจทำการแปลงเขตเวลาหรืออาจไม่ได้ แต่เนื่องจากระบบ * nix ส่วนใหญ่ตั้งค่านาฬิการะบบเป็น UTC ต่อไปจึงไม่จำเป็นต้องทำ
CVn

คำตอบ:


36

ผมเขียนโปรแกรมในขณะที่ที่ผ่านมาที่ไม่นี้: tzupdate

คุณสามารถดูว่ามันจะตั้งเขตเวลาของคุณเป็น (โดยไม่ต้องตั้งจริง) โดยการเรียกใช้tzupdate -p:

$ tzupdate -p
Europe/Malta

คุณสามารถตั้งค่าเป็นของจริงโดยการเรียกใช้tzupdateเป็นรูท

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

สิ่งนี้ทำงานโดย:

  • ระบุตำแหน่งทางภูมิศาสตร์ IP ปัจจุบันของคุณ
  • รับเขตเวลาสำหรับสถานที่นั้น
  • การอัพเดต symlink ที่/etc/localtimeเพื่อชี้ไปที่ไฟล์ zoneinfo สำหรับเขตเวลานั้น

6

นี่เป็นเธรดเก่า แต่ยังคงเกี่ยวข้องกับ kubuntu 1710 ซึ่งไม่เปลี่ยนเขตเวลาโดยอัตโนมัติ ฉันใช้โซลูชันของ Chris Down สำหรับ tzupdate แต่ต้องแน่ใจว่ามันถูกทริกเกอร์เมื่อระบบพยายามเชื่อมต่อกับเครือข่าย (wifi หรืออื่น ๆ ) สมมติว่าคุณใช้ตัวจัดการเครือข่าย

เปิดเทอร์มินัลก่อน

  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 ซึ่งทำงานในพื้นหลังพิมพ์สิ่งนี้ใน terminal เพื่อแก้ไขไฟล์ sudoers

    sudo visudo
    

    เพิ่มบรรทัดนี้ในตอนท้ายของไฟล์

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

    กด CTRL-X จากนั้นกด Y แล้วกด ENTER เพื่อบันทึกการเปลี่ยนแปลง

  5. จากนั้นเราจะตรวจสอบให้แน่ใจว่า NetworkManager เรียกสิ่งนี้เสมอหลังจากเรียกการเปลี่ยนแปลงการเชื่อมต่อเครือข่าย (เช่นเมื่อเชื่อมต่อกับ wifi) สำหรับสิ่งนี้เราสร้างไฟล์ชื่อ tzupdate ในโฟลเดอร์ dispatcher.d ซึ่งเรียก 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 - เปลี่ยนเขตเวลาท้องถิ่นของคุณเป็นอย่างอื่น (ไปที่วันที่ plasmoid ในทาสก์บาร์ของคุณและคลิกขวาและเลือก 'ปรับวันที่ / เวลา' และ 'โซนเวลา' จากแท็บ)

    ปิด WiFi และเปิดใหม่ - คุณจะเห็นว่าเมื่อเชื่อมต่อกับ WiFi ดูเหมือนว่าจะรอประมาณ 30 วินาทีแล้วจึงเปลี่ยนเขตเวลาของคุณให้สำเร็จ

    โปรดทราบว่าสิ่งนี้ยังไม่ได้รับการทดสอบด้วย wifi ที่ต้องป้อนรหัสผ่านบนหน้าเว็บ หวังว่าการดำเนินการในตอนท้ายของการเชื่อมต่อเครือข่ายควรให้เวลาเพียงพอสำหรับผู้ใช้ในการป้อนข้อมูลประจำตัว - มิฉะนั้นอาจต้องใช้ tweaking เพิ่มเติม (ตรวจสอบว่ามีการเชื่อมต่ออยู่ให้ตรวจสอบว่าคุณสามารถเชื่อมต่ออินเทอร์เน็ตได้หรือไม่ เป็นเวลา X วินาทีหากไม่สามารถเชื่อมต่ออินเทอร์เน็ตแล้วลองใหม่ Y ครั้ง


2
มันแย่มากที่ในปี 2561 นี่ยังเป็นคำตอบที่ถูกต้อง ฉันเชื่อว่า Gnome มีแพ็คเกจ (คำพังเพยนาฬิกา) ที่จะจัดการสิ่งนี้ แต่ใน KDE ไม่มีวิธีแก้ปัญหาที่ดีอื่นในขณะนี้
cardonator

คุณสามารถทำ "if [" $ 2 "=" up "]" เพื่อตรวจสอบว่าการเชื่อมต่อเครือข่ายทำงานก่อนที่จะรันคำสั่งหรือไม่ Parms ที่สองคือสถานะที่ถูกเรียกโดย NM
flamusdiu

-2

ยังไม่ชัดเจนว่าคุณหมายถึงอะไรโดย "อัพเดตเขตเวลา"

Unix และ Linux ให้เวลาตามจำนวนวินาทีตั้งแต่ 1 มกราคม 1970, 00:00 UTC นาฬิการะบบ Unix จึงเป็นเขตเวลาที่เป็นอิสระ เขตเวลาไม่มีอยู่ในเคอร์เนล Linux มันก็ต่อเมื่อแอปพลิเคชัน userspace แสดงเวลาที่จำนวนวินาทีตั้งแต่ 1970 ถูกตีความโดยใช้เขตเวลา โดยทั่วไปแล้วการตีความนี้กระทำผ่านฟังก์ชั่นห้องสมุด C เขตเวลาถูกเลือกโดยTZตัวแปรสภาพแวดล้อม คำจำกัดความของเขตเวลา (ซึ่งประกอบด้วยชื่อเขตเวลา, ชดเชยจาก UTC, วันที่ที่มีการบันทึกเวลาตามฤดูกาลและการชดเชยระหว่าง DST) เป็นส่วนหนึ่งของ GNU libc และมักจะรวมอยู่ใน Linux distributions เป็นแพ็คเกจ "tzdata" ดังนั้นการปรับปรุงคำจำกัดความเขตเวลาเป็นเรื่องของการทำงานapt-get upgrade,yum updateหรือดำเนินการบางอย่างที่คล้ายกัน

โปรดทราบว่าซอฟต์แวร์บางตัวเช่น Java มีไฟล์คำจำกัดความของเขตเวลาของตัวเองซึ่งจะต้องมีการอัพเดตแยกต่างหาก

NTP ติดตามจำนวนวินาทีตั้งแต่ 1 มกราคม 1900, เวลา UTC ดังนั้น NTP เช่นเคอร์เนล Unix จึงไม่มีแนวคิดของเขตเวลา


2
การอัพเดตเขตเวลาเราสามารถเห็นคำสั่ง "วันที่" จะพิมพ์เวลาและวันที่ตาม / etc / localtime เขตเวลาเราสามารถเปลี่ยนเขตเวลาได้ด้วยตนเองโดยสร้างลิงก์สัญลักษณ์ของ / usr / share / zoneinfo / America / Los_Angeles แต่นี่คือวิธีการทำด้วยตนเอง ฉันต้องการจะอัปเดตโซนเวลาของประเทศที่ฉันอยู่โดยอัตโนมัติแทนที่จะทำด้วยตนเอง
โปรแกรมเมอร์ที่ฝังตัว

กล่าวง่ายๆคือเป็นเวลาท้องถิ่นการปรับปรุงเขตเวลาอัตโนมัติจำเป็นสำหรับผู้ที่เดินทางบ่อย
นักบวช
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.