ubuntu桌面环境无低电量自动节能功能,因gnome/kde不监听电池百分比,upower仅报告状态而桌面不响应,需用systemd用户服务+upower轮询实现;tlp与power-profiles-daemon共存时易冲突,应统一由tlp或gnome管理。

Ubuntu桌面环境在低电量时不会自动切换节能策略,必须手动触发或预设规则——系统默认不感知“低电量”状态,也没有内置的电池百分比阈值响应机制。
为什么 Ubuntu 没有“低电量自动节能”功能
GNOME、KDE 等主流桌面环境不监听电池剩余百分比来触发电源策略变更;upower 虽能报告 percentage 和 state(如 discharging),但桌面本身不据此调用 powerprofilesctl 或修改 cpufreq。这意味着:你看到电池图标变红,系统却什么也不做。
- 没有内核级或 systemd 级的“低电量钩子”,不像 Windows 的
PowerSettingChange事件 -
powerprofilesctl是被动命令行工具,不监听电池状态变化 -
gnome-settings-daemon仅响应“AC/DC 切换”,不响应“电量低于20%”这类细粒度事件
用 upower + systemd 用户服务实现低电量自动切换
核心思路:写一个每 30 秒检查一次电量的 systemd 用户服务,当 percentage 且 <code>state == 'discharging' 时,执行 powerprofilesctl set power-saver 并调低屏幕亮度。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 创建服务文件:
~/.config/systemd/user/battery-saver.service - 内容示例:
[Unit]
Description=Switch to power-saver on low battery
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'if [ $(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "percentage|state" | grep -E "discharging|percentage.*[0-9]{1,3}%" | awk '\''NR==1 {print $2} NR==2 {print $2}'\'' | head -n1) = "discharging" ] && [ $(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage | awk '\''{print $2}'\'' | sed '\''s/%//'\'' ) -lt 20 ]; then powerprofilesctl set power-saver; xrandr --output eDP-1 --brightness 0.4; fi'
RemainAfterExit=yes
[Install]
WantedBy=default.target
- 启用并启动:
systemctl --user daemon-reload && systemctl --user enable --now battery-saver.service - 注意:设备路径
/org/freedesktop/UPower/devices/battery_BAT0需根据upower -e输出确认,常见为battery_BAT0或battery_0
避免被 TLP 或 laptop-mode-tools 覆盖节能设置
TLP 默认启用时会接管 CPU 频率、SATA 链路、USB 自动挂起等策略,但它不读取当前电量,只按 AC/Battery 模式静态应用配置。如果你同时启用了 TLP 和上述 systemd 服务,可能出现冲突:
- TLP 在 Battery 模式下已设
CPU_SCALING_GOVERNOR_ON_BAT=powersave,再运行powerprofilesctl set power-saver可能重复或覆盖 - 检查是否重复生效:
cpupower frequency-info查看当前 governor;tlp-stat -s查看 TLP 实际应用的策略 - 建议统一由 TLP 管理:编辑
/etc/tlp.conf,把POWER_SAVING_ON_BAT=1设为启用,并将RESTORE_DEVICE_STATE_ON_STARTUP=1,避免 systemd 服务与 TLP 抢占硬件控制权
GNOME 桌面下最简可行方案(无须写脚本)
如果你只想要“插电时性能、拔电即节能”,GNOME 原生支持这个二元切换,无需额外工具:
- 确保
power-profiles-daemon已启用:systemctl --user is-active power-profiles-daemon - 拔掉电源适配器后,运行:
powerprofilesctl set power-saver - 该设置会持续到下次插电;插电后 GNOME 自动恢复为
balanced(前提是未被 TLP 或其他工具锁定) - 验证方式:
powerprofilesctl get返回power-saver,且cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor全部为powersave
真正容易被忽略的是:很多用户装了 TLP 却没关掉 GNOME 自带的 power-profiles-daemon,结果两个服务都在改同一个 sysfs 参数,造成 governor 频繁抖动、风扇忽快忽慢。先停一个,再测效果。










