Provided by: autosuspend_6.0.0-1_all bug

NAME

       autosuspend.conf - autosuspend config file Documentation

SYNOPSIS

       /etc/autosuspend.conf

GENERAL CONFIGURATION

       Configures the autosuspend daemon.

   Configuration file
   Syntax
       The  autosuspend  configuration  file  uses  INI syntax and needs to be processable by the
       Python configparser <https://docs.python.org/3/library/configparser.html> module.

       A simple configuration file could look like:

          [general]
          interval = 30
          idle_time = 900
          suspend_cmd = /usr/bin/systemctl suspend
          wakeup_cmd = echo {timestamp:.0f} > /sys/class/rtc/rtc0/wakealarm
          notify_cmd_wakeup = su myuser -c notify-send -a autosuspend 'Suspending the system. Wake up at {iso}'
          notify_cmd_no_wakeup = su myuser -c notify-send -a autosuspend 'Suspending the system.'
          lock_file = /var/lock/autosuspend.lock
          lock_timeout = 30

          [check.Ping]
          enabled = false
          hosts = 192.168.0.7

          [check.RemoteUsers]
          class = Users
          enabled = true
          name = .*
          terminal = .*
          host = [0-9].*

          [wakeup.File]
          enabled = True
          path = /var/run/autosuspend/wakeup

       The configuration file consists of a [general] section, which specifies general processing
       options,  and  multiple  sections  of the format [check.*] and [wakeup.*].  These sections
       describe the activity and wake up checks to execute.

   General configuration
       The [general] section contains options controlling the overall behavior of the autosuspend
       daemon. These are:

       interval
              The time to wait after executing all checks in seconds.

       idle_time
              The  required  amount  of time in seconds with no detected activity before the host
              will be suspended.  Default: 300 seconds

       min_sleep_time
              The minimal amount of time  in  seconds  the  system  has  to  sleep  for  actually
              triggering  suspension.   If a scheduled wake up results in an effective time below
              this value, the system will not sleep.  Default: 1200 seconds

       wakeup_delta
              Wake up the system this amount of seconds earlier than the time that was determined
              for  an  event  that requires the system to be up.  This value adds a safety margin
              for the time a the wake up effectively takes.  Default: 30 seconds

       suspend_cmd
              The command to execute in case the host shall be suspended.  This line can  contain
              additional command line arguments to the command to execute.

       wakeup_cmd
              The command to execute for scheduling a wake up of the system.  The given string is
              processed using Python's  str.format()  and  a  format  argument  called  timestamp
              encodes  the  UTC  timestamp of the planned wake up time (float).  Additionally iso
              can be used to acquire the timestamp in ISO 8601 format.

       notify_cmd_wakeup
              A command to execute before the system is going  to  suspend  for  the  purpose  of
              notifying  interested  clients.   This  command is only called in case a wake up is
              scheduled.  The given string is processed using Python's str.format() and a  format
              argument  called  timestamp  encodes  the UTC timestamp of the planned wake up time
              (float).  Additionally iso can be used to acquire the timestamp in ISO 8601 format.
              If empty or not specified, no command will be called.

       notify_cmd_no_wakeup
              A  command  to  execute  before  the  system is going to suspend for the purpose of
              notifying interested clients.  This command is only called in case NO  wake  up  is
              scheduled.   Hence,  no  string  formatting options are available.  If empty or not
              specified, no command will be called.

       woke_up_file
              Location of a file that indicates to autosuspend that the  computer  has  suspended
              since  the  last  time  checks  were  executed.   This file is usually created by a
              systemd   <https://www.freedesktop.org/wiki/Software/systemd/>   service.     Thus,
              changing  the  location  also  requires  adapting the respective service.  Refer to
              systemd integration for further details.

       lock_file
              Location of a file that is used to synchronize the continuously running daemon  and
              the systemd callback.

       lock_timeout
              Timeout  in  seconds  used  when trying to acquire the lock.  This should be longer
              than the maximum run time of all configured checks.  In the worst cases, suspending
              the  system  is  delayed by this amount of time because presuspend hook has to wait
              before all checks have passed.

   Activity check configuration
       For each activity check to execute, a section with the name format [check.*] needs  to  be
       created.  Each check has a name and an executing class which implements the behavior.  The
       fraction of the section name check. determines the name, and in case no  class  option  is
       given  inside  the  section, also the class which implements the check.  In case the class
       option is specified, the name is completely user-defined and the same check  can  even  be
       instantiated multiple times with differing names.

       For each check, these generic options can be specified:

       class  Name  of the class implementing the check.  If the name does not contain a dot (.),
              this is assumed to be  one  of  the  checks  provided  by  autosuspend  internally.
              Otherwise,  this  can be used to pull in third-party checks.  If this option is not
              specified, the section name must represent a valid internal check class.

       enabled
              Needs to be true for a  check  to  actually  execute.   false  is  assumed  if  not
              specified.

       Furthermore, each check might have custom options.

   Wake up check configuration
       Wake  up  checks  uses  the  same configuration logic as the previously described activity
       checks.  However, the configuration file sections start with wakeup. instead of check..

       For options of individual checks, please refer to Available activity checks and  Available
       wake up checks.

AVAILABLE ACTIVITY CHECK

   Available activity checks
       The  following  checks  for  activity are currently implemented.  Each of the is described
       with its available configuration options and required optional dependencies.

   ActiveCalendarEvent
       Checks an online iCalendar <https://icalendar.readthedocs.io> file  for  events  that  are
       currently  running.   If  so,  this indicates activity and prevents suspending the system.
       Thus, a calendar can be provided with times at which the system should not  go  to  sleep.
       If  this  calendar resides on an online service like a groupware it might even be possible
       to invite the system.

   Options
       url    The URL to query for the iCalendar file

       timeout
              Timeout for executed requests in seconds. Default: 5.

       username
              Optional user name to use for authenticating at a server requiring  authentication.
              If used, also a password must be provided.

       password
              Optional  password  to use for authenticating at a server requiring authentication.
              If used, also a user name must be provided.

   Requirementsrequests <https://pypi.python.org/pypi/requests>

       • icalendar <https://icalendar.readthedocs.io>

       • dateutil <https://dateutil.readthedocs.io>

       • tzlocal <https://pypi.org/project/tzlocal/>

   ActiveConnection
       Checks whether there is currently a client connected to a TCP  server  at  certain  ports.
       Can  be  used to e.g. block suspending the system in case SSH users are connected or a web
       server is used by clients.

   Options
       ports  list of comma-separated port numbers

   Requirements
   ExternalCommand
       Executes an arbitrary command.  In case this command returns 0, the system is  assumed  to
       be active.

       The  command  is  executed  as  is using shell execution.  Beware of malicious commands in
       obtained configuration files.

       SEE ALSO:External command scripts for activity detection for  a  collection  of  user-provided
            scripts for some common use cases.

   Options
       command
              The command to execute including all arguments

   Requirements
   JsonPath
       A generic check which queries a configured URL and expects the reply to contain JSON data.
       The   returned   JSON   document   is    checked    against    a    configured    JSONPath
       <https://goessner.net/articles/JsonPath/>  expression  and in case the expression matches,
       the system is assumed to be active.

   Options
       url    The URL to query for the XML reply.

       jsonpath
              The JSONPath <https://goessner.net/articles/JsonPath/> query to execute.   In  case
              it returns a result, the system is assumed to be active.

       timeout
              Timeout for executed requests in seconds. Default: 5.

       username
              Optional  user name to use for authenticating at a server requiring authentication.
              If used, also a password must be provided.

       password
              Optional password to use for authenticating at a server  requiring  authentication.
              If used, also a user name must be provided.

   Requirementsrequests <https://pypi.python.org/pypi/requests>

       • jsonpath-ng <https://github.com/h2non/jsonpath-ng>

   Kodi
       Checks whether an instance of Kodi <https://kodi.tv/> is currently playing.

   Options
       url    Base    URL    of   the   JSON   RPC   API   of   the   Kodi   instance,   default:
              http://localhost:8080/jsonrpc

       timeout
              Request timeout in seconds, default: 5

       username
              Optional user name to use for authenticating at a server requiring  authentication.
              If used, also a password must be provided.

       password
              Optional  password  to use for authenticating at a server requiring authentication.
              If used, also a user name must be provided.

       suspend_while_paused
              Also suspend the system when media playback is paused instead  of  only  suspending
              when playback is stopped.  Default: false

   Requirementsrequests <https://pypi.python.org/pypi/requests>

   KodiIdleTime
       Checks  whether  there  has  been interaction with the Kodi user interface recently.  This
       prevents suspending the system in case someone  is  currently  browsing  collections  etc.
       This  check is redundant to XIdleTime on systems using an X server, but might be necessary
       in case Kodi is used standalone.  It does not replace the Kodi check, as the idle time  is
       not updated when media is playing.

   Options
       idle_time
              Marks  the  system  active  in case a user interaction has appeared within the this
              amount of seconds until now.  Default: 120

       url    Base   URL   of   the   JSON   RPC   API   of   the   Kodi    instance,    default:
              http://localhost:8080/jsonrpc

       timeout
              Request timeout in seconds, default: 5

       username
              Optional  user name to use for authenticating at a server requiring authentication.
              If used, also a password must be provided.

       password
              Optional password to use for authenticating at a server  requiring  authentication.
              If used, also a user name must be provided.

   Requirementsrequests <https://pypi.python.org/pypi/requests>

   LastLogActivity
       Parses  a  log  file  and  uses  the  most  recent time contained in the file to determine
       activity.  For this purpose, the log file lines are iterated from the back  until  a  line
       matching  a  configurable regular expression is found.  This expression is used to extract
       the contained timestamp in that log line, which is then compared to the current time  with
       an  allowed  delta.   The check only looks at the first line from the back that contains a
       timestamp.  Further lines are ignored.  A typical use case for this check would be  a  web
       server access log file.

       This  check  supports  all  date  formats  that  are  supported  by  the  dateutil  parser
       <https://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.parse>.

   Options
       log_file
              path to the log file that should be analyzed

       pattern
              A regular expression used to determine whether a line of the log  file  contains  a
              timestamp to look at.  The expression must contain exactly one matching group.  For
              instance, ^\[(.*)\] .*$ might be used to find dates  in  square  brackets  at  line
              beginnings.

       minutes
              The  number of minutes to allow log file timestamps to be in the past for detecting
              activity.  If a timestamp is older than <now> - <minutes> no activity is  detected.
              default: 10

       encoding
              The encoding with which to parse the log file. default: ascii

       timezone
              The  timezone  to  assume  in  case a timestamp extracted from the log file has not
              associated timezone information.  Timezones are expressed using the names from  the
              Olson timezone database (e.g. Europe/Berlin).  default: UTC

   Requirementsdateutil <https://dateutil.readthedocs.io>

       • pytz <https://pythonhosted.org/pytz/>

   Load
       Checks whether the system load 5 <https://en.wikipedia.org/wiki/Load_(computing)> is below
       a certain value.

   Options
       threshold
              a float for the maximum allowed load value, default: 2.5

   Requirements
   LogindSessionsIdle
       Prevents  suspending  in  case  IdleHint  for  one  of   the   running   sessions   logind
       <https://www.freedesktop.org/wiki/Software/systemd/logind/>   sessions   is   set  to  no.
       Support for setting this hint currently varies greatly  across  display  managers,  screen
       lockers  etc.   Thus,  check  exactly  whether the hint is set on your system via loginctl
       show-session.

   Options
       types  A comma-separated list of sessions  types  to  inspect  for  activity.   The  check
              ignores sessions of other types.  Default: tty, x11, wayland

       states A  comma-separated  list  of  session  states  to inspect.  For instance, lingering
              sessions used for background programs might not be of interest.   Default:  active,
              online

       classes
              A  comma-separated  list  of  session  classes  to  inspect.  For instance, greeter
              sessions used by greeters such as lightdm might not be of interest.  Default: user

   Requirementsdbus-python <https://cgit.freedesktop.org/dbus/dbus-python/>

   Mpd
       Checks whether an instance of MPD <http://www.musicpd.org/> is currently playing music.

   Options
       host   Host containing the MPD daemon, default: localhost

       port   Port to connect to the MPD daemon, default: 6600

       timeout
              Request timeout in seconds, default: 5

   Requirementspython-mpd2 <https://pypi.python.org/pypi/python-mpd2>

   NetworkBandwidth
       Checks whether more network bandwidth is currently being used than specified.   A  set  of
       specified  interfaces  is  checked  in this regard, each of the individually, based on the
       average bandwidth on that interface.   This  average  is  based  on  the  global  checking
       interval specified in the configuration file via the interval option.

       NOTE:
          This  check  assumes  stable network interface names.  If this is not the case for your
          system, consider adding the required udev rules to ensure persistent device names.  The
          Archlinux          Wiki          page          on         network         configuration
          <https://wiki.archlinux.org/title/Network_configuration#Change_interface_name> explains
          the necessary configuration steps.

   Options
       interfaces
              Comma-separated list of network interfaces to check

       threshold_send <byte/s>
              If  the  average sending bandwidth of one of the specified interfaces is above this
              threshold, then activity is detected. Specified in bytes/s, default: 100

       threshold_receive <byte/s>
              If the average receive bandwidth of one of the specified interfaces is  above  this
              threshold, then activity is detected. Specified in bytes/s, default: 100

   Requirements
   Ping
       Checks whether one or more hosts answer to ICMP requests.

   Options
       hosts  Comma-separated list of host names or IPs.

   Requirements
   Processes
       If  currently  running  processes  match  an expression, the suspend will be blocked.  You
       might use this to hinder the system from suspending when for example your rsync runs.

   Options
       processes
              list of comma-separated process names to check for

   Requirements
   Smb
       Any active Samba connection will block suspend.

   Options
       smbstatus
              executable needs to be present.

   Requirements
   Users
       Checks whether a user currently logged in at the system  matches  several  criteria.   All
       provided criteria must match to indicate activity on the host.

       To find the applicable values for a given scenario on a system, use the following command:

          $ python3 -c "import psutil; print(psutil.users())"
          [suser(name='someone', terminal='tty7', host='', started=1670269568.0, pid=77179)]

   Options
       All  regular  expressions are applied against the full string.  Capturing substrings needs
       to be explicitly enabled using wildcard matching.

       name   A regular expression specifying which users to capture, default: .*.

       terminal
              A regular expression specifying the terminal on which the user needs to  be  logged
              in, default: .*.

       host   A  regular  expression specifying the host from which a user needs to be logged in.
              Users logged in locally on the machine are usually reported with an empty string as
              the  host  value.   In case this check should only match local users, use ^$ as the
              value for this option.  default: .* (i.e. accept users from any host).

   Requirements
   XIdleTime
       Checks whether all active local X displays have been idle for a  sufficiently  long  time.
       Determining  which  X11  sessions  currently exist on a running system is a harder problem
       than one might expect.  Sometimes, the server runs as root, sometimes under the real user,
       and  many  other  configuration variants exist.  Thus, multiple sources for active X serer
       instances are implemented for this check, each of them having different  requirements  and
       limitations.  They can be changed using the provided configuration option.

   Options
       timeout
              required idle time in seconds

       method The  method to use for acquiring running X sessions.  Valid options are sockets and
              logind.  The default is sockets.

              sockets
                     Uses the X server  sockets  files  found  in  /tmp/.X11-unix.   This  method
                     requires  that  all  X server instances run with user permissions and not as
                     root.

              logind Uses logind  <https://www.freedesktop.org/wiki/Software/systemd/logind/>  to
                     obtain  the  running  X  server  instances.   This does not support manually
                     started servers.

       ignore_if_process
              A regular expression to match against the process names executed by each X  session
              owner.   In  case the use has a running process that matches this expression, the X
              idle time is ignored and the check continues as if there was no activity.  This can
              be useful in case of processes which inevitably tinker with the idle time.

       ignore_users
              Do not check sessions of users matching this regular expressions.

   Requirementsdbus-python <https://cgit.freedesktop.org/dbus/dbus-python/> for the logind method

   XPath
       A  generic check which queries a configured URL and expects the reply to contain XML data.
       The    returned    XML    document    is    checked    against    a    configured    XPath
       <https://www.w3.org/TR/xpath/>  expression  and in case the expression matches, the system
       is assumed to be active.

       Some common applications and their respective configuration are:

       tvheadend <https://tvheadend.org/>
              The required URL for tvheadend <https://tvheadend.org/> is (if running on the  same
              host):

                 http://127.0.0.1:9981/status.xml

              In  case  you  want to prevent suspending in case there are active subscriptions or
              recordings, use the following XPath:

                 /currentload/subscriptions[number(.) > 0] | /currentload/recordings/recording/start

              If you  have  a  permantently  running  subscriber  like  Kodi  <https://kodi.tv/>,
              increase the 0 to 1.

       Plex <https://www.plex.tv/>
              For  Plex  <https://www.plex.tv/>,  use  the  following URL (if running on the same
              host):

                 http://127.0.0.1:32400/status/sessions/?X-Plex-Token={TOKEN}

              Where       acquiring       the       token        is        documented        here
              <https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-
              token/>.

              If suspending should be prevented in  case  of  any  activity,  this  simple  XPath
              <https://www.w3.org/TR/xpath/> expression will suffice:

                 /MediaContainer[@size > 2]

   Options
       url    The URL to query for the XML reply.

       xpath  The  XPath query to execute.  In case it returns a result, the system is assumed to
              be active.

       timeout
              Timeout for executed requests in seconds. Default: 5.

       username
              Optional user name to use for authenticating at a server requiring  authentication.
              If used, also a password must be provided.

       password
              Optional  password  to use for authenticating at a server requiring authentication.
              If used, also a user name must be provided.

   Requirementsrequests <https://pypi.python.org/pypi/requests>

       • lxml <http://lxml.de/>

AVAILABLE WAKEUP CHECK

   Available wake up checks
       The following checks for wake up times are currently implemented.  Each of the  checks  is
       described with its available configuration options and required optional dependencies.

   Calendar
       Determines  next  wake  up time from an iCalendar <https://icalendar.readthedocs.io> file.
       The next event that starts after the current time is chosen as the next wake up time.

       Remember that updates to the calendar can only be reflected in case the  system  currently
       running.   Changes  to  the  calendar made while the system is sleeping will obviously not
       trigger an earlier wake up.

   Options
       url    The URL to query for the XML reply.

       username
              Optional user name to use for authenticating at a server requiring  authentication.
              If used, also a password must be provided.

       password
              Optional  password  to use for authenticating at a server requiring authentication.
              If used, also a user name must be provided.

       xpath  The XPath query to execute.  Must always return number strings or nothing.

       timeout
              Timeout for executed requests in seconds. Default: 5.

   Requirementsrequests <https://pypi.python.org/pypi/requests>

       • icalendar <https://icalendar.readthedocs.io>

       • dateutil <https://dateutil.readthedocs.io>

       • tzlocal <https://pypi.org/project/tzlocal/>

   Command
       Determines the wake up time by calling an external  command  The  command  always  has  to
       succeed.   If  something is printed on stdout by the command, this has to be the next wake
       up time in UTC seconds.

       The command is executed as is using shell execution.   Beware  of  malicious  commands  in
       obtained configuration files.

   Options
       command
              The command to execute including all arguments

   File
       Determines the wake up time by reading a file from a configured location.  The file has to
       contains the planned wake up time as an int or float in seconds UTC.

   Options
       path   path of the file to read in case it is present

   Periodic
       Always schedules a wake up at a specified delta from now on.   Can  be  used  to  let  the
       system  wake  up  every once in a while, for instance, to refresh the calendar used in the
       Calendar check.

   Options
       unit   A string indicating in which unit the  delta  is  specified.   Valid  options  are:
              microseconds, milliseconds, seconds, minutes, hours, days, weeks.

       value  The value of the delta as an int.

   SystemdTimer
       Ensures       that       the      system      is      active      when      a      systemd
       <https://www.freedesktop.org/wiki/Software/systemd/> timer is scheduled to run next.

   Options
       match  A         regular         expression         selecting         the          systemd
              <https://www.freedesktop.org/wiki/Software/systemd/>   timers   to   check.    This
              expression  matches  against  the  names  of  the   timer   units,   for   instance
              logrotate.timer.  Use systemctl list-timers to find out which timers exists.

   XPath
       A  generic check which queries a configured URL and expects the reply to contain XML data.
       The    returned    XML    document    is    parsed    using     a     configured     XPath
       <https://www.w3.org/TR/xpath/>  expression  that has to return timestamps UTC (as strings,
       not elements).  These are interpreted as the wake up  times.   In  case  multiple  entries
       exist, the soonest one is used.

   Options
       url    The URL to query for the XML reply.

       xpath  The XPath query to execute.  Must always return number strings or nothing.

       timeout
              Timeout for executed requests in seconds. Default: 5.

       username
              Optional  user name to use for authenticating at a server requiring authentication.
              If used, also a password must be provided.

       password
              Optional password to use for authenticating at a server  requiring  authentication.
              If used, also a user name must be provided.

   XPathDelta
       Comparable to XPath, but expects that the returned results represent the wake up time as a
       delta to the current time in a configurable unit.

       This check can for instance  be  used  for  tvheadend  <https://tvheadend.org/>  with  the
       following expression:

          //recording/next/text()

   Options
       url    The URL to query for the XML reply.

       username
              Optional  user name to use for authenticating at a server requiring authentication.
              If used, also a password must be provided.

       password
              Optional password to use for authenticating at a server  requiring  authentication.
              If used, also a user name must be provided.

       xpath  The XPath query to execute.  Must always return number strings or nothing.

       timeout
              Timeout for executed requests in seconds. Default: 5.

       unit   A  string  indicating  in  which  unit  the delta is specified.  Valid options are:
              microseconds, milliseconds, seconds, minutes, hours, days, weeks.  Default: minutes

AUTHOR

       Johannes Wienke

COPYRIGHT

       2024, Johannes Wienke