Skip to content

Instantly share code, notes, and snippets.

@lbussy
Last active August 18, 2025 11:35
Show Gist options
  • Select an option

  • Save lbussy/2884187dcad127b1b9ad3bbeb5697d90 to your computer and use it in GitHub Desktop.

Select an option

Save lbussy/2884187dcad127b1b9ad3bbeb5697d90 to your computer and use it in GitHub Desktop.
Disable Sleep/Hibernate on Debian

Disable Power Management and Graphical Login on Debian

If you use a laptop tucked away as a Linux host, you may want to disable any power manegement (sleep/hibernate) as well as any desktop environments, use this script:

disable_power_and_gui.sh

wget -qO- https://gist.githubusercontent.com/lbussy/2884187dcad127b1b9ad3bbeb5697d90/raw/disable_power_and_gui.sh | sudo bash

If you wish to reverse it:

restore_power_and_gui.sh

wget -qO- https://gist.githubusercontent.com/lbussy/2884187dcad127b1b9ad3bbeb5697d90/raw/restore_power_and_gui.sh | sudo bash
#!/usr/bin/env bash
set -euo pipefail
require_root() {
if [[ $EUID -ne 0 ]]; then
printf "%s\n" "Please run as root."
exit 1
fi
}
mask_sleep_targets() {
printf "%s\n" "Masking sleep and hibernate targets."
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
}
configure_logind() {
printf "%s\n" "Configuring logind to ignore lid and sleep keys."
mkdir -p /etc/systemd/logind.conf.d
cat > /etc/systemd/logind.conf.d/disable-suspend.conf << 'EOF'
[Login]
HandleLidSwitch=ignore
HandleLidSwitchDocked=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
EOF
systemctl restart systemd-logind
}
install_polkit_rule() {
printf "%s\n" "Installing polkit rule to remove suspend and hibernate options."
mkdir -p /etc/polkit-1/rules.d
cat > /etc/polkit-1/rules.d/disable-suspend.rules << 'EOF'
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.suspend" ||
action.id == "org.freedesktop.login1.suspend-multiple-sessions" ||
action.id == "org.freedesktop.login1.hibernate" ||
action.id == "org.freedesktop.login1.hibernate-multiple-sessions") {
return polkit.Result.NO;
}
});
EOF
systemctl restart polkit 2>/dev/null || systemctl restart polkit.service 2>/dev/null || true
}
disable_graphical_boot() {
printf "%s\n" "Setting default boot target to multi-user."
systemctl set-default multi-user.target
# Stop and disable common display managers if present
local dms=(gdm gdm3 lightdm sddm lxdm slim)
for dm in "${dms[@]}"; do
if systemctl list-unit-files | grep -q "^${dm}\.service"; then
printf "%s\n" "Disabling ${dm}.service."
systemctl disable --now "${dm}.service" || true
fi
done
}
verify() {
printf "%s\n" "Verification."
systemctl is-enabled sleep.target && printf "%s\n" "sleep.target enabled." || printf "%s\n" "sleep.target is masked."
systemctl is-enabled suspend.target && printf "%s\n" "suspend.target enabled." || printf "%s\n" "suspend.target is masked."
systemctl is-enabled hibernate.target && printf "%s\n" "hibernate.target enabled." || printf "%s\n" "hibernate.target is masked."
systemctl is-enabled hybrid-sleep.target && printf "%s\n" "hybrid-sleep.target enabled." || printf "%s\n" "hybrid-sleep.target is masked."
local current_target
current_target=$(systemctl get-default)
printf "%s\n" "Current default target: ${current_target}."
}
main() {
require_root
mask_sleep_targets
configure_logind
install_polkit_rule
disable_graphical_boot
verify
printf "%s\n" "Done. Reboot to apply graphical target change."
}
main "$@"
#!/usr/bin/env bash
set -euo pipefail
require_root() {
if [[ $EUID -ne 0 ]]; then
printf "%s\n" "Please run as root."
exit 1
fi
}
unmask_sleep_targets() {
printf "%s\n" "Unmasking sleep and hibernate targets."
systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
}
restore_logind() {
printf "%s\n" "Removing logind override."
rm -f /etc/systemd/logind.conf.d/disable-suspend.conf || true
systemctl restart systemd-logind
}
remove_polkit_rule() {
printf "%s\n" "Removing polkit rule."
rm -f /etc/polkit-1/rules.d/disable-suspend.rules || true
systemctl restart polkit 2>/dev/null || systemctl restart polkit.service 2>/dev/null || true
}
enable_graphical_boot() {
printf "%s\n" "Setting default boot target to graphical."
systemctl set-default graphical.target
# Re-enable display managers if installed
local dms=(gdm gdm3 lightdm sddm lxdm slim)
for dm in "${dms[@]}"; do
if systemctl list-unit-files | grep -q "^${dm}\.service"; then
printf "%s\n" "Enabling ${dm}.service."
systemctl enable --now "${dm}.service" || true
fi
done
}
verify() {
printf "%s\n" "Verification."
local current_target
current_target=$(systemctl get-default)
printf "%s\n" "Current default target: ${current_target}."
}
main() {
require_root
unmask_sleep_targets
restore_logind
remove_polkit_rule
enable_graphical_boot
verify
printf "%s\n" "Done. Reboot to reach the graphical desktop."
}
main "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment