I’m looking for a reliable way to log when my laptop is:

  • powered down
  • boots up
  • goes to sleep
  • wakes up

Currently I’m checking both the systemd-suspend and tlp systemctl services, but these don’t really feel very robust, and I don’t have TLP installed on all my machines.

Is there an easier way to do this, or a better systemctl unit that logs all the power states of my machine. Preferably laptop agnostic?

Laptop snippet so far:

journalctl --since -9days -u systemd-suspend -u tlp \
    | grep -P "Finish|Start|Stopped" | sed '/.*Finished TLP.*/d;
            s|Starting TLP.*|╭╴System Boot  |;
 s|Starting System Suspend.*|┤ · Sleep      |;
 s|Finished System Suspend.*|├ · Wake       |;
             s|Stopped TLP.*|╰╴Power Off    |;' \
    | sed -r 's|^(.*:[0-9]+)+:[0-9]+.*:(.*)|   \1 \2 |'
  • limelight79@lemm.ee
    link
    fedilink
    arrow-up
    4
    ·
    5 days ago

    I’m not clear on your use case here - the system obviously can’t report if it’s off. Initially I thought this was in the Home Assistant community, and I was going to suggest just pinging the machine at regular intervals from the HA system. That makes sense if you’re trying to monitor various systems.

    • tetris11@lemmy.mlOP
      link
      fedilink
      arrow-up
      4
      ·
      edit-2
      5 days ago

      It can report just before it’s shutting down. Hell, if I run shutdown -P 20:00 "OH WE GOIN DOWN" you bet your ass that I will get a wall message on every tty with that message at 8pm.

      I’m just wondering how to reliably capture the shutdown messages without having to scan the entire system log. I just assumed that there would be one service file that I would have to check for these types of events, but apparently the best bet I have is the TLP service daemon which typically only runs on laptops.

        • tetris11@lemmy.mlOP
          link
          fedilink
          arrow-up
          1
          ·
          3 days ago

          Very good shout on last – I see the boot up and power down states very nicely described there. Sadly, no hibernate info is there, so I would still need to check journalctl for that info

    • tetris11@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      ·
      6 days ago

      Hmm! I never considered checking to see what loginctl was doing

      And yep I think you’re right, the most portable way of doing this is to maybe write my own service with hooks for OnBoot OnShutdown OnSleep OnWake (if that’s a systemctl hook…)

  • just_another_person@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    7 days ago

    Are you asking about uptime monitoring on a remote host, or the actual last state of the machine once X happens via logged info on the machine?

    If the former, you can add a hook that pings somewhere before X action takes place.

    For the latter, it should be in dmesg, both going not and coming out of different states.