URI: 
       Title: How to trigger a command on Linux when disconnected from power
       Author: Solène
       Date: 31 May 2025
       Tags: security linux
       Description: In this blog post, you will learn how to trigger a command
       when a laptop is disconnected from power supply
       
       # Introduction
       
       After thinking about BusKill product that triggers a command once the
       USB cord disconnects, I have been thinking at a simple alternative.
       
  HTML BusKill official project website
       
       When using a laptop connected to power most of the time, you may want
       it to power off once it gets disconnected, this can be really useful if
       you use it in a public area like a bar or a train.  The idea is to
       protect the laptop if it gets stolen while in use and unlocked.
       
       Here is how to proceed on Linux, using a trigger on an udev rule
       looking for a change in the power_supply subsystem.
       
       For OpenBSD users, it is possible to use apmd as I explained in this
       article:
       
  HTML => Rarely known OpenBSD features: apmd daemon hooks
       
       In the example, the script will just power off the machine, it is up to
       you to do whatever you want like destroy the LUKS master key or trigger
       the coffee machine :D
       
       # Setup
       
       Create a file `/etc/udev/rules.d/disconnect.rules`, you can name it how
       you want as long as it ends with `.rules`:
       
       ```
       SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", ENV{POWER_SUPPLY_TYPE}=="Mains", RUN+="/usr/local/bin/power_supply_off"
       ```
       
       Create a file `/usr/local/bin/power_supply_off` that will be executed
       when you unplug the laptop:
       
       ```
       #!/bin/sh
       echo "Going off because power supply got disconnected" | systemd-cat
       systemctl poweroff
       ```
       
       This simple script will add an entry in journald before triggering the
       system shutdown.
       
       Mark this script executable with:
       ```
       chmod +x /usr/local/bin/power_supply_off
       ```
       
       Reload udev rules using the following commands:
       
       ```
       udevadm control --reload-rules
       udevadm trigger
       ```
       
       # Testing
       
       If you unplug your laptop power, it should power off, you should find
       an entry in the logs.
       
       If nothing happens, looks at systemd logs to see if something is wrong
       in udev, like a syntax error in the file you created or an incorrect
       path for the script.
       
       # Script ideas
       
       Depending on your needs, here is a list of actions the script could do,
       from gentle to hardcore:
       
       * Lock user sessions
       * Hibernate
       * Proper shutdown
       * Instant power off (through sysrq)
       * Destroy LUKS master key to make LUKS volume unrecoverable + Instant
       power off
       
       # Conclusion
       
       While BusKill is an effective / unusual product that is certainly
       useful for a niche, protecting a running laptop against thieves is an
       extra layer when being outside.
       
       Obviously, this use case works only when the laptop is connected to
       power.