Last active
February 4, 2025 15:52
-
-
Save 0xdeafbeef/38406dead8ef0ca116785f033312e388 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh -- | |
sysd=/etc/systemd/system | |
set -e | |
mkdir -p "$sysd/systemd-suspend.service.d" | |
cat > "$sysd/systemd-suspend.service.d/99-trigger-system-back-after-suspend.conf" <<'EOF' | |
[Service] | |
ExecStopPost=-/bin/systemctl --no-block start system-is-back-after-suspend.target | |
EOF | |
cat > "$sysd/cancel-self-poweroff.service" <<'EOF' | |
[Unit] | |
Description=Cancel self-poweroff after suspend | |
After=system-is-back-after-suspend.target | |
Conflicts=self-poweroff.timer | |
[Service] | |
Type=oneshot | |
ExecStart=/bin/rm -f /run/systemd/system/self-poweroff.timer | |
[Install] | |
WantedBy=system-is-back-after-suspend.target | |
EOF | |
cat > "$sysd/self-poweroff.service" <<'EOF' | |
[Unit] | |
Description=Actual self-poweroff after suspend | |
After=suspend.target | |
Before=system-is-back-after-suspend.target | |
RefuseManualStart=true | |
[Service] | |
Type=oneshot | |
ExecStart=/bin/systemctl --no-block poweroff | |
# Uncomment the following line while commenting out the above line for testing. | |
#ExecStart=/bin/echo poweroff | |
# Note the echoed string goes to systemd journal log. | |
# Do a `systemctl daemon-reload` after modifying this file. | |
EOF | |
cat > "$sysd/schedule-self-poweroff.service" <<'EOF' | |
[Unit] | |
Description=Schedulation of self-poweroff after some time spent in suspend state | |
Before=systemd-suspend.service | |
Requisite=suspend.target | |
[Service] | |
Type=oneshot | |
EnvironmentFile=/etc/self-poweroff.conf | |
ExecStart=/bin/sh -c 'systemd-run --on-calendar="$(date -d "now + ${MY_SUSPEND_TIMEOUT}" "+%%Y-%%m-%%d %%H:%%M:%%S")" --timer-property=AccuracySec=1s --timer-property=WakeSystem=yes --timer-property=Persistent=yes --unit=self-poweroff.service' | |
# Do a `systemctl daemon-reload` after modifying this file. | |
[Install] | |
WantedBy=suspend.target | |
EOF | |
cat > "$sysd/system-is-back-after-suspend.target" <<'EOF' | |
[Unit] | |
Description=Synchronization point for self-poweroff after suspend | |
DefaultDependencies=no | |
After=suspend.target | |
StopWhenUnneeded=yes | |
EOF | |
cat > /etc/self-poweroff.conf <<'EOF' | |
MY_SUSPEND_TIMEOUT=4 hours | |
EOF | |
systemctl enable schedule-self-poweroff.service cancel-self-poweroff.service | |
systemctl daemon-reload | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment