acpid、upower和systemd的电源管理功能。
apmd 是Linux系统中用于高级电源管理(APM)的守护进程。它主要用于笔记本电脑和移动设备,监控电池状态、处理挂起/恢复事件,并在电池电量不足时执行预定义的操作。apmd通过读取/proc/apm文件获取电池状态信息,并根据配置执行相应的操作。
apmd [选项]
| 选项 | 说明 |
|---|---|
-v, --verbose |
详细输出模式,显示更多信息 |
-V, --version |
显示版本信息 |
-p, --proxy |
作为其他程序的代理运行 |
-c, --check |
检查配置并退出 |
-W, --wall |
电池电量不足时向所有用户发出警告 |
-P, --pidfile 文件 |
指定PID文件位置 |
-L, --logfile 文件 |
指定日志文件位置 |
-u, --utc |
使用UTC时间记录日志 |
-s, --syslog |
使用系统日志(syslog) |
-S, --shutdown 百分比 |
设置关机阈值百分比 |
-w, --warn 百分比 |
设置警告阈值百分比 |
-h, --help |
显示帮助信息 |
以后台模式启动apmd:
sudo apmd
启动apmd守护进程,默认使用/etc/apmd.conf配置文件。
sudo apmd -v
以详细模式运行apmd,显示更多调试信息。
sudo apmd -w 15 -S 5
设置电池警告阈值为15%,关机阈值为5%。
apmd -c
检查apmd配置文件语法并退出,不实际启动守护进程。
sudo apmd -W -w 10
当电池电量低于10%时,向所有登录用户发送警告消息。
sudo apmd -L /var/log/apmd.log
将apmd日志输出到指定的日志文件。
sudo apmd -s
将apmd日志发送到系统日志(syslog)。
| 特性 | APM (apmd) | ACPI (acpid) |
|---|---|---|
| 技术标准 | 高级电源管理 (1992) | 高级配置与电源接口 (1996) |
| 控制方式 | BIOS控制,操作系统被动响应 | 操作系统完全控制 |
| 硬件支持 | 较旧的硬件(2000年以前) | 现代硬件(2000年以后) |
| 功能特性 | 基本的电源状态管理 | 完整的电源、热管理和设备配置 |
| 配置复杂度 | 简单,配置选项有限 | 复杂,高度可配置 |
| 当前状态 | 已过时,逐渐被淘汰 | 现代标准,广泛使用 |
| 配置文件 | 描述 | 默认位置 |
|---|---|---|
apmd.conf |
主配置文件 | /etc/apmd.conf |
apm/目录 |
事件脚本目录 | /etc/apm/ |
apmd_proxy |
代理程序配置文件 | /etc/apmd_proxy |
resume.d/ |
恢复时执行的脚本 | /etc/apm/resume.d/ |
suspend.d/ |
挂起时执行的脚本 | /etc/apm/suspend.d/ |
/etc/apmd.conf 配置示例:
# APM 守护进程配置文件
# 常规设置
VERBOSE=yes # 启用详细输出
SYSLOG=no # 禁用系统日志
UTC=no # 使用本地时间
# 电池阈值设置
BATTERY_LOW=15 # 低电量警告阈值(百分比)
BATTERY_CRITICAL=5 # 临界电量关机阈值(百分比)
# 事件脚本
SUSPEND_CMD="/etc/apm/suspend"
RESUME_CMD="/etc/apm/resume"
BATTERY_LOW_CMD="/etc/apm/battery_low"
# 网络设置(挂起前断开网络)
NET_DOWN="yes"
NET_UP="yes"
# 特殊处理
AC_IGNORE="no" # 忽略交流电源状态
BATTERY_INTERVAL=60 # 电池检查间隔(秒)
# X Window 系统支持
X_USER="username" # X Window 系统用户名
X_SUSPEND_CMD="/etc/apm/x_suspend"
X_RESUME_CMD="/etc/apm/x_resume"
事件脚本示例(/etc/apm/suspend):
#!/bin/bash
# /etc/apm/suspend - 系统挂起时执行的脚本
# 记录日志
logger "APM: 系统即将挂起"
# 停止网络服务(如果需要)
if [ -x /etc/init.d/networking ]; then
/etc/init.d/networking stop
fi
# 停止其他服务
if [ -x /etc/init.d/bluetooth ]; then
/etc/init.d/bluetooth stop
fi
# 同步文件系统
sync
# 在X Window系统中,可能需要通知桌面环境
if [ -n "$X_USER" ]; then
su $X_USER -c 'export DISPLAY=:0; xset dpms force off'
fi
exit 0
事件脚本示例(/etc/apm/resume):
#!/bin/bash
# /etc/apm/resume - 系统恢复时执行的脚本
# 记录日志
logger "APM: 系统已恢复"
# 重新启动网络服务
if [ -x /etc/init.d/networking ]; then
/etc/init.d/networking start
fi
# 重新启动其他服务
if [ -x /etc/init.d/bluetooth ]; then
/etc/init.d/bluetooth start
fi
# 在X Window系统中,可能需要恢复显示
if [ -n "$X_USER" ]; then
su $X_USER -c 'export DISPLAY=:0; xset dpms force on'
fi
exit 0
apmd守护进程的工作流程:
/proc/apm文件获取当前电池状态/proc/apm 文件格式示例:
$ cat /proc/apm
1.16 1.2 0x03 0x01 0x03 0x09 100% 1080 sec
字段说明:
cat /proc/apm(如果文件存在则支持)apm -l 或 apm -mapm -vapm -S 或 echo -n mem > /sys/power/stateps aux | grep apmd 或 systemctl status apmdsudo apt install apmd (Debian/Ubuntu)sudo apmd -v -L /tmp/apmd.log 然后检查日志grep -i apm /boot/config-$(uname -r)-S参数| 工具/技术 | 描述 | 主要命令 |
|---|---|---|
| ACPI (acpid) | 现代电源管理标准,取代APM | acpid, acpi_listen |
| upower | D-Bus服务,提供电源管理信息 | upower, upower -d |
| systemd | 现代初始化系统,包含电源管理 | systemctl suspend, systemctl hibernate |
| tlp | 高级Linux电源管理工具 | tlp, tlp-stat |
| powertop | 电源消耗监控和优化工具 | powertop |
cat /proc/apm 确认支持APMsudo apt install apmdsudo cp /etc/apmd.conf /etc/apmd.conf.backupsudo vim /etc/apmd.conf
# 设置阈值
BATTERY_LOW=20
BATTERY_CRITICAL=10
# 启用详细日志
VERBOSE=yes
# 设置事件脚本
SUSPEND_CMD="/etc/apm/suspend"
RESUME_CMD="/etc/apm/resume"
sudo vim /etc/apm/suspend
#!/bin/bash
logger "APM: Suspending system"
sync
exit 0
sudo vim /etc/apm/resume
#!/bin/bash
logger "APM: Resuming system"
exit 0
sudo chmod +x /etc/apm/suspend /etc/apm/resume
sudo systemctl start apmd 或 sudo service apmd startsudo systemctl enable apmd在现代系统上使用ACPI的示例:
# 查看ACPI信息
acpi -V
# 查看电池状态
acpi -b
# 查看温度信息
acpi -t
# 监听ACPI事件
sudo acpi_listen
# 使用upower查看详细信息
upower -d
# 使用systemd挂起系统
systemctl suspend
# 使用tlp进行电源管理
sudo tlp start
tlp-stat -b
# 使用powertop优化功耗
sudo powertop --auto-tune