Skip to main content

SLEEP-INHIBITOR

PyPi AUR

This is a simple program to inhibit sleep/suspend on systemd based Linux systems (or on compatible systems running elogind). Some examples of the default plugins provided are:

  1. Plugin to inhibit sleep while any audio is playing.

  2. Plugins to inhibit sleep while Plex or Jellyfin media server is serving media server is serving content.

  3. Plugin to inhibit sleep while a specified process is running. I use this to prevent sleep while my home backup is running.

You can also create your own custom plugins. They are extremely trivial to create as can be seen in the provided examples. A plugin can be created in shell script or any programming language. It must simply return an exit code to indicate whether the system should can be slept/suspended, or not. Sleep-inhibitor runs each plugin at the period you specify (or the default 5 minutes) and checks the result to inhibit sleep or not until at least the next check period.

The latest version of this document and code is available at https://github.com/bulletmark/sleep-inhibitor.

:warning: Warning: Unfortunately this program is currently somewhat handicapped due to this systemd issue (and/or this GNOME issue). Until this issue is addressed, your system may not automatically [re-]suspend if still idle after it has been inhibited, even though sleep-inhibitor has removed the inhibit.

Motivation

When looking for a solution for this issue I found the autosuspend package but, in addition to providing plugins, that package also implements the complete sleep, resume, and wakeup logic. I also found the configuration and documentation confusing. I am happy with and prefer to use the native Linux sleep systems and I desired a simpler more lightweight approach that merely provided the ability to inhibit these sleep systems for some special situations.

  1. On Linux desktop systems, I prefer to use the standard GNOME power management GUI tools to automatically manage sleep/suspend (via systemd). All the major DE's provide similar GUI tools.

  2. On Linux server systems, I prefer to use standard systemd power management to manage sleep/suspend, configured via logind.conf and sleep.conf.

These native approaches work well, and are easy to configure. Sleep-inhibitor assumes you are using the native systemd based sleep facilities and merely adds the ability to add/create tiny plugins to inhibit sleep for specified conditions. Sleep-inhibitor uses systemd-inhibit to execute the sleep inhibition lock.

Installation

Arch users can just install sleep-inhibitor from the AUR then skip to the next Configuration section.

Python 3.7 or later is required. The 3rd party ruamel.yaml package is also required. Note sleep-inhibitor is on PyPI so just ensure that pipx is installed then:

To install:

$ sudo PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/bin pipx install sleep-inhibitor

To upgrade:

$ sudo PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/bin pipx upgrade sleep-inhibitor

To remove:

$ sudo PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/bin pipx uninstall sleep-inhibitor

Some plugins require other software to be installed. E.g. If you use the plex-media-server or jellyfin-server plugins then you must install curl.

Configuration

To start, copy the sample sleep-inhibitor.conf configuration file to /etc/sleep-inhibitor.conf and then edit the sample settings in that target file to add/configure plugins to your requirements. The instructions and a description of all configuration options are fully documented in the sample configuration file.

$ sudo cp "$(sleep-inhibitor -P)/sleep-inhibitor.conf" /etc
$ sudoedit /etc/sleep-inhibitor.conf

Automatic Startup as systemd Service

If you installed from source or via pip then copy the included sleep-inhibitor.service to /etc/systemd/system/ (note that Arch users who installed from AUR can skip this first step):

$ sudo cp "$(sleep-inhibitor -P)/sleep-inhibitor.service" /etc/systemd/system/

Start sleep-indicator and enable it to automatically start at reboot with:

$ sudo systemctl enable --now sleep-inhibitor

If you change the configuration file then restart with:

$ sudo systemctl restart sleep-inhibitor

To see status and logs:

$ systemctl status sleep-inhibitor
$ journalctl -u sleep-inhibitor

Plugins

To use the standard plugins distributed with this package just specify the plugin name (i.e. the file name) as the path parameter in the configuration file. To use your own custom plugins, just specify the absolute path to that plugin. E.g. you can put your custom plugin at /home/user/bin/myplugin and just specify that full path in the configuration file.

A plugin can be any executable script/program which simply returns exit code 254 to inhibit suspend, or anything else (usually 0 of course) to not suspend. They can be very trivial to create as the provided example plugins demonstrate. A plugin can be created in any language you prefer such as Shell, Python, Ruby, C/C++, etc.

The plugin does not normally receive any arguments although you can choose to specify arbitrary arguments to any plugin via the configuration file, e.g. a sensitive token/password as the example plex-media-server plugin requires, or the process name for the example is-process-running plugin.

Command Line Usage

Type sleep-inhibitor -h to view the usage summary:

usage: sleep-inhibitor [-h] [-c CONFIG] [-p PLUGIN_DIR] [-P]

Program to run plugins to inhibit system sleep/suspend.

options:
  -h, --help            show this help message and exit
  -c, --config CONFIG   alternative configuration file
  -p, --plugin-dir PLUGIN_DIR
                        alternative plugin dir
  -P, --package-dir     just show directory where sample conf/service files,
                        and default plugins can be found

License

Copyright (C) 2020 Mark Blakeney. This program is distributed under the terms of the GNU General Public License. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License at https://en.wikipedia.org/wiki/GNU_General_Public_License for more details.

Metadata

Release files for sleep-inhibitor 1.26

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sleep-inhibitor 1.26
File Size Uploaded
sleep_inhibitor-1.26.tar.gz 14.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sleep-inhibitor 1.26
File Interpreter ABI Platform
sleep_inhibitor-1.26-py3-none-any.whl Python 3 none any Details

Total release size: 26.0 kB

Release files / sleep_inhibitor-1.26.tar.gz

Download URL sleep_inhibitor-1.26.tar.gz
Size 14.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2d8f0694c6536933f9ce5429ed84557784b82af5b57ab368e3b0846e77f25185
BLAKE2b-256 checksum
How to use checksums
5f4119c95121010595fcb96f770bd0a1f0b9e236463bacfce0041e1142e881c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / sleep_inhibitor-1.26-py3-none-any.whl

Download URL sleep_inhibitor-1.26-py3-none-any.whl
Size 12.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
01e113f1c3def4e2dd05f5bec0c20664d2bc9d05ba6296eaea126565f92112b4
BLAKE2b-256 checksum
How to use checksums
7c13a300c4c3a895a2e7e061ebcee097da8b712996f10f09c01acbca105f3706
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.26 This release

2 release files

1.25

2 release files

1.24

2 release files

1.23

2 release files

1.22

2 release files

1.21

2 release files

1.20

2 release files

1.19

2 release files

1.18

2 release files

1.17

2 release files

1.16

2 release files

1.15

2 release files

1.14

2 release files

1.13

2 release files

1.12

2 release files

1.11.1

2 release files

1.10

2 release files

1.9

2 release files

1.8.1

2 release files

1.6

1 release file

1.5

1 release file

1.4

1 release file

1.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page