If a laptop stops reporting battery changes, the fix is rarely to launch upowerd by hand.
This guide checks whether UPower is running, reads the power state it publishes, and restarts the service properly after a deliberate configuration change. The installed package here is UPower 1.90.3-1.
Allow about 10 minutes for the checks. You need a shell account that can run systemctl status; changing the daemon configuration or restarting the service requires elevated privileges.
upowerd provides the org.freedesktop.UPower service on the system message bus. Its manual page says applications normally cause it to be started by dbus-daemon, so launching the daemon directly is not the normal administration method. On this installation, systemd starts /usr/libexec/upowerd as the D-Bus service and restarts it when it fails.
That distinction prevents a common trap: a missing upowerd command in your shell does not by itself mean UPower is absent. The executable is installed under /usr/libexec, while the supported service entry point is upower.service. Run this as your ordinary user first:
systemctl status --no-pager upower.service
Look for Active: active (running) and a process whose command ends in upowerd. A healthy result resembles:
● upower.service - Daemon for power management
Loaded: loaded (.../upower.service; disabled; preset: enabled)
Active: active (running) ...
Tip: the word disabled in the Loaded line is easy to misread. It describes whether the unit is enabled for boot, not whether a D-Bus request can activate it. The unit is D-Bus activated, and the installed daemon can be running even when it is not enabled in the usual systemd target.
Checkpoint: use the client rather than inspecting the daemon process alone:
upower --dump
The output should contain a Daemon: section with daemon-version, on-battery, and critical-action. It may also list a display device or physical batteries. Hardware without a battery is valid: an unknown display device or a missing battery is not automatically a daemon failure.
To see whether the service can deliver changes, run:
upower --monitor-detail
This waits in the foreground and prints full power-source details when a source is added, removed, or changed. Leave it running while connecting a charger or changing another supported power source. Stop it with Ctrl-C. If you only need event names, upower --monitor is less noisy.
Do not use a lack of immediate output as proof monitoring is broken. The command reports events; it does not manufacture one when it starts. Use upower --dump for the current snapshot.
The package installs its daemon configuration at /etc/UPower/UPower.conf. Read the relevant values without editing:
sudo sed -n '1,220p' /etc/UPower/UPower.conf
In this package the percentage policy is enabled, with low, critical, and action thresholds of 20, 5, and 2 per cent. The critical action is HybridSleep. UPower can also use time thresholds when percentage policy is disabled. Invalid values, or thresholds that are not in descending order, cause the documented defaults to be used.
Warning: these settings can lead to a service-disrupting or data-loss event at a critical battery level. Do not alter them casually, and do not test the action by draining a production laptop. Before changing the file, make a recoverable copy:
sudo cp -p /etc/UPower/UPower.conf /etc/UPower/UPower.conf.backup
The backup is local and includes the existing permissions. Keep it until the new policy has been observed on the intended hardware.
Edit only the setting you mean to change. For example, after reviewing your power policy, an administrator might change PercentageLow to 25. Use an editor with elevated privileges:
sudoedit /etc/UPower/UPower.conf
Restarting a power-management daemon briefly interrupts its D-Bus service. Applications should reconnect, but choose a quiet maintenance window if desktop power handling matters:
sudo systemctl restart upower.service
systemctl is-active --quiet upower.service
upower --dump
The first command changes system state and is the only command in this guide that deliberately restarts the service. The second should print active. The final command should again show the daemon version and policy summary.
If the service does not become active, inspect its recent journal:
sudo journalctl -u upower.service -b --no-pager -n 80
systemctl status --no-pager upower.service
Recovery: restore the known-good copy, then restart and verify again:
sudo cp -p /etc/UPower/UPower.conf.backup /etc/UPower/UPower.conf
sudo systemctl restart upower.service
systemctl is-active upower.service
If the backup is unavailable, remove only the line you changed and restore the documented default from the installed configuration comments. Do not delete the whole configuration file while troubleshooting. If the daemon repeatedly fails, leave the service stopped only long enough to capture the journal and seek the package or distribution's support route.
systemctl status --no-pager upower.service reports it.upower --dump reaches the daemon and shows its version and state.upowerd is D-Bus activated and have not launched it by hand.