Skip to main content

Program to run plugins to inhibit system sleep/suspend/hibernate

Project description

SLEEP-INHIBITOR

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 Plex media server is serving content.

  2. Plugin to inhibit sleep while Jellyfin 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.

Motivation

When looking for a solution for this issue I found the autosuspend package but, apart from providing plugins, that package actually 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 sleep systems and I desired a simpler more lightweight approach that merely provided the ability to inhibit sleep 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.6 or later is required. The 3rd party ruamel.yaml package is also required. Note sleep-inhibitor is on PyPI so just ensure that python3-pip and python3-wheel are installed then type the following to install (or upgrade):

$ sudo pip3 install -U sleep-inhibitor

If you want to install it yourself from the source repository:

$ git clone https://github.com/bulletmark/sleep-inhibitor.git
$ cd sleep-inhibitor
$ sudo pip3 install -U .

To uninstall:

$ sudo pip3 uninstall sleep-inhibitor

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 /usr/share/sleep-inhibitor/sleep-inhibitor.conf /etc
$ sudo vim /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 step):

$ sudo cp /usr/share/sleep-inhibitor/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 ~/bin/myplugin and just specify the full path (e.g. ~user/bin/myplugin) 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

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

Program to run plugins to inhibit system sleep/suspend.

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        alternative configuration file
  -p PLUGIN_DIR, --plugin-dir PLUGIN_DIR
                        alternative plugin dir

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://www.gnu.org/licenses/ for more details.

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

sleep-inhibitor-1.9.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

sleep_inhibitor-1.9-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file sleep-inhibitor-1.9.tar.gz.

File metadata

  • Download URL: sleep-inhibitor-1.9.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for sleep-inhibitor-1.9.tar.gz
Algorithm Hash digest
SHA256 9783944e3ee6796d2907186b2e8abc8ab5ccaf5a548ea038de4790d6c507efc6
MD5 1891bf317142bff7bc2e398f22bcd9f2
BLAKE2b-256 e10c4e177110002dd7654fa87c662a524b3dbc80c6f08624bede67ad498257ad

See more details on using hashes here.

File details

Details for the file sleep_inhibitor-1.9-py3-none-any.whl.

File metadata

  • Download URL: sleep_inhibitor-1.9-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for sleep_inhibitor-1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 3c16d56cbb4cd1c84d305935228fe275a852ba2b278b27953268e40bda56974d
MD5 ebdaf5120f3dfe9be2d1f58622babea2
BLAKE2b-256 7f97a7528796ebabeee5d874b0e33563b95892b0c12962a450fa236876f5b040

See more details on using hashes here.

Supported by

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