Automatically switch power profiles between Balanced and Power Saver based on laptop power status (plugged/unplugged), including on boot and resume — now with cross‑distro support!
power-mode-switcher/
├── README.md # This file
├── install.sh # Cross‑distro installation script
├── uninstall.sh # Uninstallation script
├── LICENSE
└── src/
├── power-mode-switch.sh # Main switching script
├── 99-power-mode.rules # udev rule
└── power-mode.service # systemd service definition
powerprofilesctl
supportbash
, udev
, systemd
(default on all supported distros)git clone https://github.com/md8-habibullah/power-mode-switcher.git
cd power-mode-switcher
Make scripts executable
chmod +x install.sh uninstall.sh src/power-mode-switch.sh
Run the installer
./install.sh
You’ll see coloured, step‑by‑step output:
apt
, pacman
, or dnf
)power-profiles-daemon
(or swaps in tuned‑ppd
on Fedora ≥ 41)Automatic switching
Check current profile
powerprofilesctl get
(on Fedora/RHEL with tuned‑ppd you can also run tuned-adm active
)
Manual invocation
sudo /usr/local/bin/power-mode-switch.sh
In the repo directory:
./uninstall.sh
This will:
power-mode.service
unit/etc/udev/rules.d/99-power-mode.rules
/usr/local/bin/power-mode-switch.sh
AC device name
If your AC path differs, edit in src/power-mode-switch.sh
:
for P in /sys/class/power_supply/ADP* /sys/class/power_supply/AC* /sys/class/power_supply/ACAD*; do
…
done
Enable logging
Uncomment in power-mode-switch.sh
:
# echo "$(date +'%F %T'): AC=$STATUS → $(powerprofilesctl get)" >> /var/log/power-mode.log
Ensure /var/log/power-mode.log
is writable by root.
Custom profiles
Replace balanced
/power-saver
with any profile name supported by your system.
No switching on plug/unplug
udevadm monitor --udev
Verify POWER_SUPPLY_ONLINE
events and that your rule matches the device.
Service errors on boot/resume
journalctl -u power-mode.service -b
systemctl status power-mode.service
Permissions
Ensure /usr/local/bin/power-mode-switch.sh
is chmod +x
and owned by root.
Supports Debian/Ubuntu, Zorin, Mint, Arch, Manjaro, EndeavourOS, Fedora, CentOS, RHEL and any system with systemd & udev. Created by Md. Habibullah (md8-habibullah)