Skip to main content

Linux systemd service to prevent a server from going to sleep when there are (active) clients.

Supports SSH and NFS clients. Uses D-Bus inhibit to prevent sleep/suspend.

Note: For full functionality you must run this as root to allow access to /proc/.... in order to determine if SSH sessions are active or idle. Depending on Linux configuration, access to the system D-Bus may also require root. In this case the program must be run as root. Installation instructions are for a service running as root.

Tested on Fedora 39 with NFSv4.

Installation

Install OS package dependencies

sudo dnf install python3-pystemd

Create a python virtual environment and install prevent-sleep

cd /opt
sudo python -m venv prevent_sleep --system-site-packages --upgrade-deps
sudo prevent_sleep/bin/python -m pip install --upgrade prevent-sleep  # or use path to sourcedir
prevent_sleep/bin/prevent-sleep --version

Setup systemd service

sudo prevent_sleep/bin/prevent-sleep --install-service
sudo systemctl daemon-reload
sudo systemctl enable --now prevent-sleep

Verify

Note: Use systemd-inhibit to check if this or other programs are preventing suspend.

[xxx@yyy opt]$ systemd-inhibit
WHO            UID USER PID  COMM           WHAT              WHY                                                           MODE
ModemManager   0   root 1197 ModemManager   sleep             ModemManager needs to reset devices                           delay
NetworkManager 0   root 1239 NetworkManager sleep             NetworkManager needs to turn off networks                     delay
UPower         0   root 1794 upowerd        sleep             Pause device polling                                          delay
prevent-sleep  0   root 4678 prevent-sleep  sleep             SSH: 2 active clients [(3567, 'john'), (4007, 'jane')]        block
gdm            42  gdm  1846 gsd-power      handle-lid-switch External monitor attached or configuration changed recently   block
gdm            42  gdm  1846 gsd-power      sleep             GNOME needs to lock the screen                                delay

6 inhibitors listed.
[xxx@yyy opt]$ systemd-inhibit
WHO            UID USER PID  COMM           WHAT              WHY                                                             MODE
ModemManager   0   root 1197 ModemManager   sleep             ModemManager needs to reset devices                             delay
NetworkManager 0   root 1239 NetworkManager sleep             NetworkManager needs to turn off networks                       delay
UPower         0   root 1794 upowerd        sleep             Pause device polling                                            delay
prevent-sleep  0   root 4678 prevent-sleep  sleep             NFS: 1 clients [('4', '192.168.4.107, Linux NFSv4.2 mylaptop')] block
prevent-sleep  0   root 4678 prevent-sleep  sleep             SSH: No activity. Will remove block at 2024-01-28T19:36:51      block
gdm            42  gdm  1846 gsd-power      handle-lid-switch External monitor attached or configuration changed recently     block
gdm            42  gdm  1846 gsd-power      sleep             GNOME needs to lock the screen                                  delay

7 inhibitors listed.

Note that only SSH clients with traffic during the last check period will prevent sleep!

Development

sudo dnf install systemd-devel python3{.10,.11,.12}-devel  # For all python versions listen in noxfile.py
pip install nox
nox  # In root of checked out sources

Note that the test is rather rudimentary. It is not mocked (yet) so running it will require D-Bus access and it will fail if being run on a server with NFS clients (if not run as root).

More

This program [https://pypi.org/project/sleep-inhibitor/], which I found after writing prevent-sleep, does a similar thing.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prevent_sleep-0.1.1.tar.gz (20.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prevent_sleep-0.1.1-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file prevent_sleep-0.1.1.tar.gz.

File metadata

  • Download URL: prevent_sleep-0.1.1.tar.gz
  • Upload date:
  • Size: 20.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for prevent_sleep-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7c7a5b01f624db5bcc5b44b80028c6c2376c1c89f9aecb021716247f71ddfca6
MD5 b9ba0e4db25b57c1b17f52ab5a159d62
BLAKE2b-256 e743e262ed6717bae54d1a520cdb1e82cdddefdca4cb1a90570dee44ef74459e

See more details on using hashes here.

File details

Details for the file prevent_sleep-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: prevent_sleep-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for prevent_sleep-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fe8dd320f9e1bd889fe8f3a854ed98a37059ac5eab06d8187ccc4930960f3987
MD5 2c36d3d42464deabfc59554f87b91117
BLAKE2b-256 0a7feaf01070275a40bf59c0c66dbaca8712e2ffb00d66329503768c1d9b0a62

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page