如何在没有 NTP 同步的 Linux 中将 NTP 同步设置为 yes?

如何在没有 NTP 同步的 Linux 中将 NTP 同步设置为 yes?

如何在 Linux 中将 NTPSynchronized 设置为 yes,而不需要实际的 NTP 同步?

我只是想欺骗一些程序。

]$ timedatectl show -p NTPSynchronized
NTPSynchronized=yes

答案1

如果您指的是 D-Bus 属性org.freedesktop.timedate1相关 D-Bus 文档说:

NTPSynchronized显示内核是否将时间报告为同步 (cf adjtimex(3))。TimeUSecRTCTimeUSec显示系统和 RTC 中的当前时间。这三个属性的目的是允许远程客户端通过 D-Bus 访问此信息。本地客户可以直接访问信息。

它是一个只读属性,因此不能直接设置它。但是,可以使用命令的-S/选项(通常需要作为单独的包安装)来修改内核的同步状态,并且 D-Bus 属性应遵循内核的状态。--statusadjtimex

经过一些测试,我发现当将时钟设置为“假同步”状态时,您还需要将maxerror和设置esterror为一些合理的值:如果这些值处于默认的“不同步”值(两个时钟均为 16000000) ),内核会立即将状态恢复为“不同步”。因此,例如:

adjtimex --status 0 --maxerror 50632 --esterror 438

将使时钟看起来是同步的(并timedatectl确认它),并且

adjtimex --status 64 --maxerror 16000000 --esterror 16000000

将恢复到不同步状态。

实际上,D-Bus 值似乎NTPSynchronized更多地取决于错误变量是否处于最大值,而不是实际状态值。

(我使用了运行时的maxerror和值,并禁用并重新启动进行测试。任何合理的和值都可能用于伪造同步状态。)esterrorchronydchronydmaxerroresterror

相关内容