如何在 Linux 中将 NTPSynchronized 设置为 yes,而不需要实际的 NTP 同步?
我只是想欺骗一些程序。
]$ timedatectl show -p NTPSynchronized
NTPSynchronized=yes
答案1
如果您指的是 D-Bus 属性org.freedesktop.timedate1
,相关 D-Bus 文档说:
NTPSynchronized
显示内核是否将时间报告为同步 (cfadjtimex(3)
)。TimeUSec
并RTCTimeUSec
显示系统和 RTC 中的当前时间。这三个属性的目的是允许远程客户端通过 D-Bus 访问此信息。本地客户可以直接访问信息。
它是一个只读属性,因此不能直接设置它。但是,可以使用命令的-S
/选项(通常需要作为单独的包安装)来修改内核的同步状态,并且 D-Bus 属性应遵循内核的状态。--status
adjtimex
经过一些测试,我发现当将时钟设置为“假同步”状态时,您还需要将maxerror
和设置esterror
为一些合理的值:如果这些值处于默认的“不同步”值(两个时钟均为 16000000) ),内核会立即将状态恢复为“不同步”。因此,例如:
adjtimex --status 0 --maxerror 50632 --esterror 438
将使时钟看起来是同步的(并timedatectl
确认它),并且
adjtimex --status 64 --maxerror 16000000 --esterror 16000000
将恢复到不同步状态。
实际上,D-Bus 值似乎NTPSynchronized
更多地取决于错误变量是否处于最大值,而不是实际状态值。
(我使用了运行时的maxerror
和值,并禁用并重新启动进行测试。任何合理的和值都可能用于伪造同步状态。)esterror
chronyd
chronyd
maxerror
esterror