Skip to main content

Prevent sleep/suspend when there are (active) SSH or NFS clients.

Project description

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.

Project details


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.

Supported by

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