위치에 따라 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
    

    루트로 로그인한 다음 명령이 시간대를 변경했는지 확인합니다. 그런 다음 로그아웃하고 일반 사용자로 다시 돌아오십시오.

    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. 쿠분투에서 테스트하려면 - 현지 시간대를 다른 시간대로 변경하세요(작업 표시줄에서 "Date Plasma"로 이동하여 마우스 오른쪽 버튼을 클릭하고 "날짜/시간 조정"을 선택한 다음 탭에서 "시간대"를 선택하세요)

    Wi-Fi를 껐다가 다시 켜면 Wi-Fi에 연결되면 약 30초 정도 기다린 후 시간대가 성공적으로 변경되는 것을 볼 수 있습니다.

    Wi-Fi에서는 테스트되지 않았으며 웹페이지에 비밀번호가 필요합니다. 네트워크 연결이 끝날 때 실행된다는 사실이 사용자가 자격 증명을 입력할 수 있는 충분한 시간을 제공하기를 바랍니다. 그렇지 않으면 추가 조정이 필요할 수 있습니다(연결이 존재하는지 확인하고, 인터넷에 연결할 수 있는지 확인하고, 잠시 기다려주세요). 인터넷에 연결할 수 없는 경우) X초 후 Y번 다시 시도하세요.

답변3

  • 설치하다geoclue. 우분투/데비안: sudo apt install geoclue-2.0아치 리눅스 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 upgrade뿐입니다 yum update.

일부 소프트웨어(예: Java)에는 별도로 업데이트해야 하는 자체 시간대 정의 파일이 있습니다.

NTP는 1900년 1월 1일 UTC 이후의 초 수를 기록합니다.. 따라서 Unix 커널과 마찬가지로 NTP에는 시간대 개념이 없습니다.

관련 정보