adjust clock 20ms with current time

  • As for my pi5 i know the it has ~5PPM, so it drift ~20ms every hours
#include <stdio.h>
#include <time.h>

int main(void)
{
    struct timespec ts;

    if (clock_gettime(CLOCK_REALTIME, &ts) != 0)
        return 1;

    ts.tv_nsec += 20000000L;  // +20 ms

    if (ts.tv_nsec >= 1000000000L) {
        ts.tv_sec++;
        ts.tv_nsec -= 1000000000L;
    }

    if (clock_settime(CLOCK_REALTIME, &ts) != 0)
        return 1;

    return 0;
}
gcc add20ms.c -o add20ms
./add20ms
  • Other tool adjtimex that can update the frequency of current clock
@home:~$ adjtimex --print
         mode: 0
       offset: 0
    frequency: -1058757
     maxerror: 3752
     esterror: 1145
       status: 0
time_constant: 2
    precision: 1
    tolerance: 32768000
         tick: 10000
     raw time:  1787551740s 373129us = 1787551740.373129


frequency: -1058757
1 ppm = 65536
So +5.556 ppm corresponds to:
5.556 × 65536 ≈ 364446

add +5.556 ppm to the clock's existing frequency correction
-1058757 + 364446
= -694311


sudo adjtimex --freq -694311
root@lp-arm-5:/opt/docker# ntpdate 192.168.10.196
2026-08-24 13:32:32.978000 (+0530) +166337.977652 +/- 0.003123 192.168.10.196 s1 no-leap
CLOCK: time stepped by 166337.977652
CLOCK: time changed from 2026-08-22 to 2026-08-24

#### After reboot

root@lp-arm-5:~# date
Mon Aug 24 13:40:46 IST 2026

root@lp-arm-5:~# ntpdate -q 192.168.10.90
2026-08-24 14:18:12.673999 (+0530) +2234.752511 +/- 0.004031 192.168.10.90 s1 no-leap

root@lp-arm-5:~# ntpdate 192.168.10.90
2026-08-24 14:18:15.906000 (+0530) +2234.750451 +/- 0.005585 192.168.10.90 s1 no-leap
CLOCK: time stepped by 2234.750451

Openwrt ntpd and ntpq time server

root@OpenWrt:~# ntpd -w -d -p 192.168.10.196
ntpd: sending query to 192.168.10.196
ntpd: reply from 192.168.10.196: offset:-0.002124 delay:0.010506 status:0x24 strat:1 refid:0x00535047 rootdelay:0.000000 reach:0x01
ntpd: sending query to 192.168.10.196
ntpd: reply from 192.168.10.196: offset:-0.001935 delay:0.008853 status:0x24 strat:1 refid:0x00535047 rootdelay:0.000000 reach:0x03
ntpd: sending query to 192.168.10.196
ntpd: reply from 192.168.10.196: offset:+0.003002 delay:0.008686 status:0x24 strat:1 refid:0x00535047 rootdelay:0.000000 reach:0x07


uci show system | grep ntp

cat /etc/config/system

/etc/init.d/sysntpd status
Usage: ntpd [-dnqNwl] [-I IFACE] [-S PROG] [-p PEER]...

NTP client/server

	-d[d]	Verbose
	-n	Run in foreground
	-q	Quit after clock is set
	-N	Run at high priority
	-w	Do not set time (only query peers), implies -n
	-S PROG	Run PROG after stepping time, stratum change, and every 11 min
	-p PEER	Obtain time from PEER (may be repeated)
	-l	Also run as server on port 123
	-I IFACE Bind server to IFACE, implies -l

Pi5 PTP clock – /dev/ptp0

  • Pi5 has ptp
root@lp-arm-5:~# ethtool -T eth0
Time stamping parameters for eth0:
Capabilities:
	hardware-transmit
	software-transmit
	hardware-receive
	software-receive
	software-system-clock
	hardware-raw-clock
Hardware timestamp provider index: 0
Hardware timestamp provider qualifier: Precise (IEEE 1588 quality)
Hardware Transmit Timestamp Modes:
	off
	on
	onestep-sync
Hardware Receive Filter Modes:
	none
	all

root@lp-arm-5:~# phc_ctl /dev/ptp0 get
phc_ctl[644486.511]: clock time is 1787465854.590438111 or Sun Aug 23 11:47:34 2026

root@lp-arm-5:~# phc_ctl /dev/ptp0 caps
phc_ctl[644504.310]: 
capabilities:
  64000000 maximum frequency adjustment (ppb)
  0 programable alarms
  0 external time stamp channels
  0 programmable periodic signals
  0 configurable input/output pins
  has pulse per second support
  doesn't have cross timestamping support
  doesn't have adjust phase support


root@lp-arm-5:~# date
sudo phc_ctl /dev/ptp0 get
sudo hwclock -r
Sun Aug 23 13:21:04 IST 2026
phc_ctl[645456.567]: clock time is 1787466824.601451911 or Sun Aug 23 12:03:44 2026

2026-08-23 13:21:04.580550+05:30

  • Update clock on pi5
root@lp-arm-5:~# ntpdate -q 192.168.10.196
2026-08-24 11:06:42.867000 (+0530) +0.802164 +/- 0.004007 192.168.10.196 s1 no-leap
root@lp-arm-5:~# ntpdate 192.168.10.196
2026-08-24 11:06:45.468000 (+0530) +0.802924 +/- 0.003670 192.168.10.196 s1 no-leap
CLOCK: time stepped by 0.802924

Rpi4/5 NTP server and PPM Time drift test

  • So pi has 1PPM error rate on it’s clock. it should dirft ~1second per day
systemctl status systemd-timesyncd

root@lp-arm-5:~# timedatectl timesync-status
       Server: 192.168.10.196 (192.168.10.196)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 1
    Reference: GPS
    Precision: 1us (-20)
Root distance: 0 (max: 5s)
       Offset: -79.759ms
        Delay: 177.920ms
       Jitter: 392.723ms
 Packet count: 437

root@lp-arm-5:~# timedatectl show-timesync
SystemNTPServers=192.168.10.196
FallbackNTPServers=0.debian.pool.ntp.org 1.debian.pool.ntp.org
ServerName=192.168.10.196
ServerAddress=192.168.10.196
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=34min 8s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=1, Precision=-20, RootDelay=0, RootDispersion=0, Reference=GPS, OriginateTimestamp=Sat 2026-08-22 13:55:50 IST, ReceiveTimestamp=Sat 2026-08-22 13:55:50 IST, TransmitTimestamp=Sat 2026-08-22 13:55:50 IST, DestinationTimestamp=Sat 2026-08-22 13:55:50 IST, Ignored=yes, PacketCount=437, Jitter=392.723ms }
Frequency=278345

  • Sync every 30 second
PollIntervalMaxSec=30
PollIntervalMinSec=30
root@lp-arm-5:~# cat  /etc/systemd/timesyncd.conf
[Time]
NTP=192.168.10.196
#sync every 30 second
PollIntervalMaxSec=30
PollIntervalMinSec=30
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
#ConnectionRetrySec=30
#SaveIntervalSec=60

  • stoped ntp service
root@lp-arm-5:~# timedatectl  && ntpdate -q 192.168.10.90
               Local time: Sat 2026-08-22 14:55:11 IST
           Universal time: Sat 2026-08-22 09:25:11 UTC
                 RTC time: Sat 2026-08-22 09:25:11
                Time zone: Asia/Kolkata (IST, +0530)
System clock synchronized: yes
              NTP service: inactive
          RTC in local TZ: no
2026-08-22 14:55:11.120999 (+0530) +0.017578 +/- 0.004635 192.168.10.90 s1 no-leap



root@lp-arm-5:~# while true; do     ntpdate -q 192.168.10.90;     sleep 1; done
2026-08-22 14:56:07.223000 (+0530) +0.014346 +/- 0.009613 192.168.10.90 s1 no-leap
2026-08-22 14:56:08.310000 (+0530) +0.016642 +/- 0.008483 192.168.10.90 s1 no-leap
2026-08-22 14:56:09.393000 (+0530) +0.019201 +/- 0.004101 192.168.10.90 s1 no-leap
2026-08-22 14:56:10.473000 (+0530) +0.016223 +/- 0.012315 192.168.10.90 s1 no-leap
  • After ~12 hours
root@lp-arm-5:~# head /var/log/gnss.log 
===== GNSS NTP measurement Sat Aug 22 23:12:48 IST 2026 =====
2026-08-22 23:11:43.945 offset=158783.000 us drift=N/A us/s drift=N/A ppm
2026-08-22 23:11:45.030 offset=156998.000 us drift=1625.399 us/s drift=1625.399 ppm
2026-08-22 23:11:46.114 offset=160638.000 us drift=-3348.105 us/s drift=-3348.105 ppm
2026-08-22 23:11:47.198 offset=162109.000 us drift=-1357.056 us/s drift=-1357.056 ppm

root@lp-arm-5:~# tail /var/log/gnss.log 
2026-08-23 12:07:41.968 offset=395067.000 us drift=-5542.332 us/s drift=-5542.332 ppm
2026-08-23 12:07:43.079 offset=397609.000 us drift=-2343.630 us/s drift=-2343.630 ppm
2026-08-23 12:07:44.187 offset=394536.000 us drift=2763.032 us/s drift=2763.032 ppm
First sample:
2026-08-22 23:11:43.945
offset = 158783 us
       = 158.783 ms

Last sample:
2026-08-23 12:07:50.758
offset = 389441 us
       = 389.441 ms

Therefore:
389.441 ms - 158.783 ms
= 230.658 ms

So if this trend continued, you'd expect roughly:
1 day    ≈ +428 ms
7 days   ≈ +3.0 seconds
30 days  ≈ +12.8 seconds
1 year   ≈ +156 seconds (~2.6 minutes)
  • So the Pi4 clock offset increased by approximately:
    +230.7 ms

Chrony Service useful parameter

systemctl status chrony

nano /etc/chrony/chrony.conf

server 192.168.10.196 iburst minpoll 5 maxpoll 5

#5 is (2 raise to 5) = 32sec
makestep 1 3

Startup:
update #1 → offset 2.5 s  → STEP immediately
update #2 → offset 0.2 s  → normal slew
update #3 → offset 1.2 s  → STEP immediately

Later:
update #4 → offset 2.0 s  → NO step; chrony slews it
maxupdateskew 100.0 

means if chrony estimates the clock's frequency correction with uncertainty greater than 100 ppm, it will not use that update to adjust the clock. Lower = stricter confidence requirement.

Local DNS server and Upstream forward

  • Get the DNS server names and config
@home:~$ resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: stub

Link 2 (enp3s0)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (wlo1)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 1.1.1.1
       DNS Servers: 192.168.1.1 1.1.1.1

@home:~$ resolvectl dns
Global:
Link 2 (enp3s0):
Link 3 (wlo1): 192.168.1.1


@home:~$ cat /etc/resolv.conf 
nameserver 127.0.0.53
options edns0 trust-ad
search .
  • to use your local DNS make only 1 DNS server in config and the other DNS server will upstream server of local dns so that they don’t interfere with each other

esp32 s3 issues with USB serial print – CDC/ JTAG

  • USB port can act as USB serial print port
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
build_flags =
	-DARDUINO_USB_MODE=1
	-DARDUINO_USB_CDC_ON_BOOT=1
upload_port = /dev/ttyACM0
monitor_port = /dev/ttyACM0
monitor_speed = 115200
monitor_dtr = 0
monitor_rts = 0
  • ESP32-S3 USB CDC not being enabled at boot
  • UART with chip CP2102 is not working on my esp32-s3
@home:~$ ls  /dev/ttyUSB*
/dev/ttyUSB0

@home:~$ esptool --chip esp32s3 --port /dev/ttyUSB0 chip_id
Warning: Deprecated: Command 'chip_id' is deprecated. Use 'chip-id' instead.
esptool v5.3.0
Serial port /dev/ttyUSB0:
Connecting......................................

A fatal error occurred: Failed to connect to ESP32-S3: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html

@home:~$ esptool --chip esp32s3 --port /dev/ttyUSB0 chip_id
Warning: Deprecated: Command 'chip_id' is deprecated. Use 'chip-id' instead.
esptool v5.3.0
Connected to ESP32-S3 on /dev/ttyUSB0:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded PSRAM 8MB (AP_3v3)
Crystal frequency:  40MHz
MAC:                28:84:85:xx:xx:xx

Stub flasher running.

Warning: ESP32-S3 has no chip ID. Reading MAC address instead.
MAC:                28:84:85:xx:xx:xx

Hard resetting via RTS pin...

Getting GPS location/Time using NEO-7M-0-000 Blox with ESP32 – NTP server

#include <WiFi.h>

const char *ssid = "wifi";
const char *password = "pass";

// GPS UART
HardwareSerial GPS(2); // UART2

// Standard NMEA TCP port
WiFiServer server(10110);

// Allow multiple clients
WiFiClient clients[5];

String line;

void setup() {
  Serial.begin(115200);

  // GPS on GPIO21 (RX), GPIO22 (TX)
  GPS.begin(9600, SERIAL_8N1, 21, 22);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  Serial.print("Connecting");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("Connected: ");
  Serial.println(WiFi.localIP());

  server.begin();
  server.setNoDelay(true);

  Serial.println("NMEA TCP server started on port 10110");
}

void loop() {

  // Accept new clients
  if (server.hasClient()) {

    for (int i = 0; i < 5; i++) {

      if (!clients[i] || !clients[i].connected()) {

        if (clients[i])
          clients[i].stop();

        clients[i] = server.available();
        clients[i].setNoDelay(true);

        Serial.printf("Client %d connected\n", i);
        break;
      }
    }

    // No room
    WiFiClient reject = server.available();
    reject.stop();
  }

  // Read GPS
  while (GPS.available()) {

    char c = GPS.read();

    // Echo to USB serial
    Serial.write(c);

    line += c;

    if (c == '\n') {

      // Send complete NMEA sentence to all clients
      for (int i = 0; i < 5; i++) {

        if (clients[i] && clients[i].connected()) {

          clients[i].print(line);

          if (clients[i].getWriteError()) {
            clients[i].stop();
          }
        }
      }

      line.clear();

      // Prevent runaway if malformed data
      if (line.length() > 256)
        line.clear();
    }
  }
}
  • xgps to view data
apt install gpsd gpsd-clients
nc ESP-IP 10110
#OR
gpsd tcp://192.168.1.150:10110

#lauch
xgps

#or
sudo systemctl stop gpsd.socket gpsd
gpsd -N -n -D 5 tcp://192.168.10.196:10110
gpspipe -r
#lauch
xgps

#check time of laptop
home@home:~$ ntpdate -q 192.168.10.196
2026-07-28 17:58:10.0 (+0530) -1.950956 +/- 0.001631 192.168.10.196 s1 no-leap

Your computer's clock is about -1.950956 seconds ahead of the GPS-based NTP server. To match the GPS time, your clock would need to move backward by about -1.950956 seconds.

systemctl enable --now chrony

@home: timedatectl 
               Local time: Tue 2026-07-28 18:09:42 IST
           Universal time: Tue 2026-07-28 12:39:42 UTC
                 RTC time: Tue 2026-07-28 12:39:42
                Time zone: Asia/Kolkata (IST, +0530)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

@home:~$ chronyc tracking
Reference ID    : 41007738 (ec2-65-0-119-56.ap-south-1.compute.amazonaws.com)
Stratum         : 5
Ref time (UTC)  : Tue Jul 28 12:41:44 2026
System time     : 0.000236698 seconds fast of NTP time
Last offset     : +0.000414969 seconds
RMS offset      : 0.000378138 seconds
Frequency       : 14.685 ppm fast
Residual freq   : +1.339 ppm
Skew            : 21.187 ppm
Root delay      : 0.010673190 seconds
Root dispersion : 0.000975857 seconds
Update interval : 64.2 seconds
Leap status     : Normal


chronyc sources -v
  • GPS time after connecting PPS pin to D7
@home:~$ chronyc sources -v

MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 192.168.10.196                1   6   377    40   -489ms[ -610ms] +/- 2671us
^- alphyn.canonical.com          2  10   367   366   -462ms[  +25ms] +/-  170ms
^- prod-ntp-4.ntp1.ps5.cano>     2  10   377    23   -486ms[ -486ms] +/-   76ms
^- prod-ntp-3.ntp4.ps5.cano>     2  10   377    54   -458ms[ -579ms] +/-   99ms
^- prod-ntp-5.ntp1.ps5.cano>     2  10   377   497   -486ms[+3998us] +/-   73ms
^- 172-233-155-39.ip.linode>     5   9   377    47   -484ms[ -605ms] +/-  154ms
^- 149.206.212.35.bc.google>     2  10   377   434   -472ms[  +18ms] +/-  167ms
^- time.cloudflare.com           3   6   377    44   -484ms[ -605ms] +/-   72ms
^- ntp2.ggsrv.de                 2   8   277   141   -442ms[ -654ms] +/-  123ms

#offset fix of 0.1 sec
home@home:~$ while true; do     ntpdate -q 192.168.10.196;     sleep 1; done
2026-07-29 12:49:02.649000 (+0530) -0.000654 +/- 0.002628 192.168.10.196 s1 no-leap
2026-07-29 12:49:03.711000 (+0530) -0.000765 +/- 0.002465 192.168.10.196 s1 no-leap
2026-07-29 12:49:04.767000 (+0530) -0.000835 +/- 0.002581 192.168.10.196 s1 no-leap
2026-07-29 12:49:05.830000 (+0530) -0.002471 +/- 0.003938 192.168.10.196 s1 no-leap
2026-07-29 12:49:06.895000 (+0530) -0.001071 +/- 0.002849 192.168.10.196 s1 no-leap
2026-07-29 12:49:07.969999 (+0530) -0.001286 +/- 0.002694 192.168.10.196 s1 no-leap
2026-07-29 12:49:09.57000 (+0530) +0.002670 +/- 0.006418 192.168.10.196 s1 no-leap
2026-07-29 12:49:10.113999 (+0530) -0.001435 +/- 0.001903 192.168.10.196 s1 no-leap
2026-07-29 12:49:11.193999 (+0530) -0.000183 +/- 0.003198 192.168.10.196 s1 no-leap
2026-07-29 12:49:12.251999 (+0530) -0.000521 +/- 0.002711 192.168.10.196 s1 no-leap
2026-07-29 12:49:13.350000 (+0530) -0.001052 +/- 0.002741 192.168.10.196 s1 no-leap
2026-07-29 12:49:14.455999 (+0530) -0.000497 +/- 0.002895 192.168.10.196 s1 no-leap
2026-07-29 12:49:15.520000 (+0530) -0.000422 +/- 0.002912 192.168.10.196 s1 no-leap
2026-07-29 12:49:16.622000 (+0530) +0.000399 +/- 0.003694 192.168.10.196 s1 no-leap
2026-07-29 12:49:17.690000 (+0530) +0.001445 +/- 0.004720 192.168.10.196 s1 no-leap
2026-07-29 12:49:18.751000 (+0530) -0.001759 +/- 0.001505 192.168.10.196 s1 no-leap
2026-07-29 12:49:19.813000 (+0530) -0.001110 +/- 0.003159 192.168.10.196 s1 no-leap
2026-07-29 12:49:20.876999 (+0530) -0.000605 +/- 0.002787 192.168.10.196 s1 no-leap


#Before correct PPS

^- 192.168.10.196                1   6   377    52    -15ms[  -15ms] +/-   17ms

^- 192.168.10.196                1   6   377    57    -67ms[  -67ms] +/-   68ms

^x 192.168.10.196                1   6   377    16   +707ms[ +707ms] +/- 3018us

^x 192.168.10.196                1   6   377     8  +1088ms[+1088ms] +/- 2698us


@home:~$ while true; do     ntpdate -q 192.168.10.196;     sleep 1; done
ntpdig: no eligible servers
2026-07-29 12:44:33.0 (+0530) -0.631612 +/- 0.002777 192.168.10.196 s1 no-leap
2026-07-29 12:44:34.0 (+0530) -0.708538 +/- 0.002867 192.168.10.196 s1 no-leap
2026-07-29 12:44:35.0 (+0530) -0.814500 +/- 0.045810 192.168.10.196 s1 no-leap
2026-07-29 12:44:36.0 (+0530) -0.925514 +/- 0.003359 192.168.10.196 s1 no-leap
2026-07-29 12:44:37.0 (+0530) -1.001159 +/- 0.003638 192.168.10.196 s1 no-leap
2026-07-29 12:44:38.0 (+0530) -1.063557 +/- 0.004615 192.168.10.196 s1 no-leap
2026-07-29 12:44:39.0 (+0530) -1.127265 +/- 0.003226 192.168.10.196 s1 no-leap
2026-07-29 12:44:41.0 (+0530) -0.272564 +/- 0.048974 192.168.10.196 s1 no-leap
2026-07-29 12:44:42.0 (+0530) -0.414035 +/- 0.002208 192.168.10.196 s1 no-leap
2026-07-29 12:44:43.0 (+0530) -0.521767 +/- 0.051125 192.168.10.196 s1 no-leap
  • What is PPM? Parts Per Million
|         Accuracy |      Drift per day |
| ---------------: | -----------------: |
|           50 ppm |       ~4.3 seconds |
|           20 ppm |       ~1.7 seconds |
|           10 ppm |      ~0.86 seconds |
|            1 ppm |   ~86 milliseconds |
|          0.5 ppm |   ~43 milliseconds |
|         0.01 ppm | ~0.86 milliseconds |
| 10⁻¹¹ (Rubidium) | ~0.86 microseconds |

So Raspberry pi has 54MHZ oscillator that can drif by 20-30ppm means 1-3 seconds per day.
  • add to /etc/chrony/chrony.conf
cat /etc/chrony/chrony.conf
server 192.168.10.196 iburst


systemctl restart chronyd
  • From Blox MAX-M10S GNSS
@home:~$ while true; do     ntpdate -q 192.168.10.90;     sleep 1; done
2026-08-22 13:50:37.818999 (+0530) -0.002587 +/- 0.006596 192.168.10.90 s1 no-leap
2026-08-22 13:50:38.942999 (+0530) -0.000916 +/- 0.004280 192.168.10.90 s1 no-leap
2026-08-22 13:50:40.10000 (+0530) -0.001542 +/- 0.005918 192.168.10.90 s1 no-leap
2026-08-22 13:50:41.117000 (+0530) -0.000863 +/- 0.004926 192.168.10.90 s1 no-leap
2026-08-22 13:50:42.184000 (+0530) +0.000060 +/- 0.003520 192.168.10.90 s1 no-leap
2026-08-22 13:50:43.288000 (+0530) -0.003916 +/- 0.007181 192.168.10.90 s1 no-leap
2026-08-22 13:50:44.396999 (+0530) -0.008009 +/- 0.011557 192.168.10.90 s1 no-leap
2026-08-22 13:50:45.473000 (+0530) +0.000258 +/- 0.003518 192.168.10.90 s1 no-leap
2026-08-22 13:50:46.559000 (+0530) +0.010864 +/- 0.014502 192.168.10.90 s1 no-leap
2026-08-22 13:50:47.663000 (+0530) -0.058083 +/- 0.061995 192.168.10.90 s1 no-leap
2026-08-22 13:50:48.852000 (+0530) -0.001831 +/- 0.010806 192.168.10.90 s1 no-leap
2026-08-22 13:50:49.929000 (+0530) -0.003046 +/- 0.008400 192.168.10.90 s1 no-leap
2026-08-22 13:50:51.4000 (+0530) -0.000831 +/- 0.007201 192.168.10.90 s1 no-leap
2026-08-22 13:50:52.71000 (+0530) -0.000914 +/- 0.004927 192.168.10.90 s1 no-leap
2026-08-22 13:50:53.153999 (+0530) -0.003625 +/- 0.007565 192.168.10.90 s1 no-leap
2026-08-22 13:50:54.234000 (+0530) -0.000141 +/- 0.006826 192.168.10.90 s1 no-leap
2026-08-22 13:50:55.302000 (+0530) +0.000081 +/- 0.003850 192.168.10.90 s1 no-leap
2026-08-22 13:50:56.368000 (+0530) +0.000933 +/- 0.004076 192.168.10.90 s1 no-leap
2026-08-22 13:50:57.439000 (+0530) -0.002185 +/- 0.008926 192.168.10.90 s1 no-leap
2026-08-22 13:50:58.517000 (+0530) -0.003229 +/- 0.012751 192.168.10.90 s1 no-leap
2026-08-22 13:50:59.598000 (+0530) +0.001274 +/- 0.005002 192.168.10.90 s1 no-leap
2026-08-22 13:51:00.672999 (+0530) -0.015312 +/- 0.025618 192.168.10.90 s1 no-leap

Screen shut off / light off / lid down

Keep Proxmox running normally
Turn off only the laptop screen/backlight
Prevent suspend/sleep on lid close

nano /etc/systemd/logind.conf

#add

HandleLidSwitch=ignore

HandleLidSwitchDocked=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore

systemctl restart systemd-logind
  • Turn off the laptop display only
apt update
apt install vbetool
vbetool dpms off
vbetool dpms on