Как программно установить аппаратные часы в Linux?
Вопрос
Linux предоставляет вызов stime(2) для установки системного времени.Однако, хотя это приведет к обновлению системного времени, оно не приведет к тому, что аппаратные часы BIOS будут соответствовать новому системному времени.
Системы Linux обычно синхронизируют аппаратные часы с системным временем при завершении работы и через определенные промежутки времени.Однако если перед одной из этих автоматических синхронизаций компьютер выключится и снова выключится, время при перезапуске компьютера будет неверным.
Как обеспечить обновление аппаратных часов при установке системного времени?
Решение
Дополнительную информацию можно найти на странице руководства rtc, но если вы вошли в систему как root, то что-то вроде этого:
struct rtc_time {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday; /* unused */
int tm_yday; /* unused */
int tm_isdst;/* unused */
};
struct rtc_time rt;
/* set your values here */
fd = open("/dev/rtc", O_RDONLY);
ioctl(fd, RTC_SET_TIME, &rt);
close(fd);
Другие советы
После вызова stime() сделайте следующее:
system("/sbin/hwclock --systohc");
Дополнительную информацию смотрите на странице руководства hwclock(8).
Я бы начал с чтения исходного кода hwclock.
Я также хотел бы отметить, что аппаратные часы точны только до определенной точки (я видел системы, которые теряют/прибавляют пару секунд в день).
Рассматривали ли вы возможность настройки сетевого демона времени для синхронизации ваших часов с сервером времени?
По общему признанию, эта синхронизация не происходит до тех пор, пока демон не запустится, поэтому синхронизация ваших аппаратных часов также помогает между включением питания и моментом синхронизации демона времени с сервером времени.
Если текстовый редактор отличается от kubuntu (по умолчанию в редакторе используется kate), используйте свой собственный с sudo
команда в терминале.
- запустить терминал
- скопируйте и вставьте эту команду
sudo kate /etc/default/rcS
нажимать Входить - введите пароль пользователя (ваш пароль для входа) нажмите Входить
- текстовый редактор откроется на рабочем столе
- изменить строку
UTC=yes
кUTC=no
- и нажмите «Сохранить» (вверху панели вкладок текстового редактора)
- перезагрузить