Ubuntu – Prevent sleep/suspend when not logged in to a specific account

18.04hibernatepower-managementsuspend

We have a shared office desktop running Ubuntu 18.04 where several jobs (via ssh and screen) often run for weeks on multiple accounts. When logged into an account, sleep/suspend is deactivated through:

  1. Power settings in main System Setting
  2. Using gnome-tweak-tool, setting "Suspend when laptop lid is closed" to off.

This works fine as long as a user with these power settings is always directly logged into the machine (i.e., physically, not via ssh).

The problem is when no user is currently logged in directly i.e., when the machine is at the main login screen (like on boot up). There does not appear to be a way to set sleep/suspend settings when not logged into a specific account. So, if the machine remains on this screen, it eventually sleeps, suspending all the running jobs.

As I mentioned, things work fine as long as some user is logged in. However, this has been viewed as a security risk. So we'd like to find a better system-wide solution.

I should mention that we have another office desktop running Ubuntu 16.04 which does not have this problem.

Best Answer

When no user is signed on

When no user is signed on the power settings come from psuedo-user ID gdm. The following controls for GDM auto-suspend come from: ArchLinux GDM

GDM auto-suspend (GNOME 3.28)

GDM uses a separate dconf database to control power management. You can make GDM behave the same way as user sessions by copying the user settings to GDM's dconf database.

$ IFS=$'\n'; for x in $(sudo -u username gsettings list-recursively org.gnome.settings-daemon.plugins.power); do eval "sudo -u gdm dbus-launch gsettings set $x"; done; unset IFS

where username is your user's name.

Or to simply disable auto-suspend (also run the command with ac replaced with battery to also disable it while running on battery):

$ sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'