LINUX.ORG.RU

Синхронизация часов с местоположением

 , , , синхронизация времени


0

1

Привет, ЛОР.
А ты замечал, что в современных телефонах, будь то Android или iOS, после перелёта в другой часовой пояс – часы автоматически синхронизируются по времени местной сети?

Как известно, во всех современных ноутбуках, пригодных к использованию (это Fujitsu, Lenovo ThinkPad и некоторые Dell/HP) – есть LTE модем.
Почему бы нам не использовать его для определения часового пояса после пробуждения ноутбука?

Простой скрипт:

#!/bin/bash
# Minimal script to set system clock from ModemManager using machine-readable output

# Get first modem (extract the number from the path)
MODEM_NUM=$(mmcli --list-modems -K | grep "^modem-list.value\[" | head -1 | cut -d':' -f2 | xargs | grep -o '[0-9]*$')

if [ -z "$MODEM_NUM" ]; then
    echo "Error: No modem found"
    exit 1
fi

echo "Using modem $MODEM_NUM"

# Get time info in machine-readable format
TIME_OUTPUT=$(mmcli -m "$MODEM_NUM" --time -K)

# Extract modem time and timezone offset
MODEM_TIME=$(echo "$TIME_OUTPUT" | grep "^modem.time.current" | cut -d':' -f2- | xargs)
TIMEZONE_OFFSET=$(echo "$TIME_OUTPUT" | grep "^modem.timezone.current" | cut -d':' -f2- | xargs)

echo "Modem time: $MODEM_TIME"
echo "Timezone offset: $TIMEZONE_OFFSET minutes"

# Check if we got valid data
if [ -z "$MODEM_TIME" ]; then
    echo "Error: Could not retrieve modem time"
    exit 1
fi

# Set system time using the modem's timestamp (which includes timezone info)
sudo date -s "$MODEM_TIME"

# Calculate hours and minutes from offset
if [ -n "$TIMEZONE_OFFSET" ]; then
    HOURS=$((TIMEZONE_OFFSET / 60))
    MINUTES=$((TIMEZONE_OFFSET % 60))
    
    # Format as +HH:MM or -HH:MM
    if [ $TIMEZONE_OFFSET -ge 0 ]; then
        TZ_STRING=$(printf "Etc/GMT%+d" $((-HOURS)))
    else
        TZ_STRING=$(printf "Etc/GMT%+d" $((-HOURS)))
    fi
    
    sudo timedatectl set-timezone "$TZ_STRING"
    echo "System clock synchronized to $TZ_STRING (offset $TIMEZONE_OFFSET minutes)"
else
    echo "System clock synchronized (timezone unchanged)"
fi

можно положить в /lib/systemd/system-sleep/ или в любые другие хуки – по вашему желанию.



Проверено: dataman ()
Последнее исправление: hobbit (всего исправлений: 6)

пример использования:

~ ➤ date                                                                                                                                                                                                                                                     
Wed 29 Oct 2025 17:30:11 EET  # системное время сейчас EET
~ ➤ tz                                                                                                                                                                                                                                                       
Using modem 1
Modem time: 2025-10-29T16:30:20+01
Timezone offset: 60 minutes
Wed 29 Oct 2025 17:30:20 EET
System clock synchronized
~ ➤ date                                                                                                                                                                                                                                                     
Wed 29 Oct 2025 16:30:22 CET # ага, работает

ann_lortemp2
() автор топика

Не удивлюсь, если в отдельных регионах время и часовой пояс в GSM начнут спуфить, так что я бы не стал такое пихать в автозапуск.

legolegs ★★★★★
()

Чисто из интереса - оно работает только при наличия SIM-карты, которая смогла зарегистрироваться в сети? Или этот протокол доступен всегда как emergency call?

С часовым поясом фигня будет в районе границы зон наверное.

GPFault ★★★
()

Не синхронизация часов, а синхронизация часового пояса.

А так, инфа про то что мобильные сети его сообщают полезная, но я бы не стал автоматически системную настройку исправлять в соответствии с этим - так можно и запутаться.

Скорее бы сделал так: эта штука проверяется, но сообщается куда-то в DE, а DE, если видит что системный часовой пояс и этот не совпадают - рисует два времени рядом чтобы было понятно где какое.

firkax ★★★★★
()
Ответ на: комментарий от ann_lortemp2

Траву трогать пробовали? Говорят, многим помогает.

ugoday ★★★★★
()

Ненужно, ибо информацию, получаемую от опсосов нужно трижды проверять и делить на четыре.

в современных телефонах часы автоматически синхронизируются

Я уже и не вспомню, как давно это в них есть. Еще с кнопочников, вроде.

после перелёта

У меня так (месяца 1,5-2 назад) часы в пределах одного района города на несколько часов ушли. После того случая у меня эта функция отключена.

А у знакомого интересней случай был недавно. Говорит просыпается, время 7 час на телефоне, а маршрутных листов нет. Ну он начинает прозвон коллег одному-второму, трубку берет лишь третий: «какие маршруты, времени еще половина пятого.»

ps Ну ты бы еще ГНСС заюзать предложил в текущих реалиях.

sehellion ★★★★★
()
Ответ на: комментарий от sehellion

Какие ужосы вы рассказываете. Пойду что ли себе механические часы присматривать. Уж их-то никакая сволочь без моего ведома никуда не переведёт.

P.S. Задача решается элементарно, нужны вторые часы, показывающие время по Гринвичу. С помощью несложных наблюдений можно установить свою долготу, а через неё — часовой пояс.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

показывающие время по Гринвичу.

GMT != UTC, мы уже попались на этом.

что произошло: на сервере с PostgreSQL был часовой пояс GMT, который успешно перешел на летнее время (UTC+1), а вот бэкенд, работающий с UTC – был не в курсе.

даже локальный мем есть: «англичане с(&?зили час». (украли)

ann_lortemp2
() автор топика
Ответ на: комментарий от ann_lortemp2

Не-не-не-не-не. На этом этапе у нас никаких UTC+1 нету. У нас есть ласковое и доброе Солнце, которое показывает точное местное время (без компьютера!) и есть часы, показывающие точное местное время на гринвическом меридиане. Дальше нужны таблицы или немножко математики, но раз уж ноут заявлен, то это не проблема.

ugoday ★★★★★
()

А ты замечал, что в современных телефонах, будь то Android или iOS, после перелёта в другой часовой пояс – часы автоматически синхронизируются по времени местной сети?

Недавно был на Кунашире и очень это заметил. В некоторых локациях местная связь пропадает, но так как Япония всего в 20 км, что ближе чем местные сотовые вышки, то телефон начинает ловить японскую сеть Docomo. Подключается и меняет время, редиска. В Японии UTC +9, а на Кунашре UTC +11. :)

И да, в поездках не меняю время на ноуте. Как раз очень удобно, чтобы было домашнее, лучше понимаешь что там по работе происходит. А если не про работу, то все равно время по смартфону смотрю.

another ★★★★★
()
Последнее исправление: another (всего исправлений: 3)

Как известно, во всех современных ноутбуках, пригодных к использованию (это Fujitsu, Lenovo ThinkPad и некоторые Dell/HP) – есть LTE модем.

В моём сынкпаде нет:(

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Если дырка под симку за батареей есть, то просто не стоит модуль. У меня в L540 даже камеры не было. :) Всё сам ставил. И 4G тоже.

hbars ★★★★★
()
Ответ на: комментарий от hateyoufeel

в современных Thinkpad не снимается батарея и сим слот находится справа, где порты.
но ты бы его заметил, если бы он там был.

https://www.lenovoarvutid.ee/wp-content/uploads/2025/06/t14g6-ports-1024x807.webp

а вот пошто эти гомосексуалисты выпилили SD кард ридер – ума не приложу.

ann_lortemp2
() автор топика
Последнее исправление: ann_lortemp2 (всего исправлений: 1)
Ответ на: комментарий от ann_lortemp2

а вот пошто эти гомосексуалисты выпилили SD кард ридер – ума не приложу.

У меня это есть. А вот слота под симкарту нет, как и модема.

P.S. где-то прочитал что Lenovo проиграла суд по патентам на WWAN в Германии и из-за этого стала выпиливать модемы в ноутах для европейского рынка.

hateyoufeel ★★★★★
()
Ответ на: комментарий от ann_lortemp2

а вот пошто эти гомосексуалисты выпилили SD кард ридер – ума не приложу.

Даладно, На Х1 carbon еще был.

gns ★★★★★
()
Ответ на: комментарий от ugoday

Задача решается ещё элементарней, нужно просто отменить все эти идиотские часовые пояса. Тупые людишки сами себе придумали проблему и героически её решают.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.