acpi 是一个用于显示ACPI(Advanced Configuration and Power Interface)信息的工具。ACPI是一种开放标准,定义了操作系统、固件和硬件之间的电源管理接口。
acpi 通常需要单独安装,因为它不是所有Linux发行版的标准命令:
sudo apt update
sudo apt install acpi
sudo yum install acpi
which acpi 或 acpi -V 2>/dev/null || echo "未安装"
acpi [选项]
选项:可选参数,用于控制输出内容和格式| 参数 | 说明 |
|---|---|
-h 或 --help |
显示帮助信息 |
-V 或 --version |
显示版本信息 |
-b 或 --battery |
显示电池信息 |
-a 或 --ac-adapter |
显示AC适配器(电源)信息 |
-t 或 --thermal |
显示温度信息 |
-c 或 --cooling |
显示冷却设备(风扇)信息 |
-i 或 --details |
显示详细信息 |
-s 或 --show-empty |
显示所有设备,即使没有数据 |
-f 或 --fahrenheit |
使用华氏温度显示(默认是摄氏温度) |
-k 或 --kelvin |
使用开尔文温度显示 |
-d 或 --directory <路径> |
使用指定路径代替默认的/proc/acpi |
-p 或 --proc |
使用/proc接口(默认) |
-S 或 --sysfs |
使用/sys接口 |
-v 或 --verbose |
详细输出模式 |
显示所有可用的ACPI信息:
acpi
输出示例:
Battery 0: Charging, 85%, 01:15:00 until charged
Battery 0: design capacity 5200 mAh, last full capacity 4800 mAh = 92%
Thermal 0: ok, 45.0 degrees C
Thermal 1: ok, 50.0 degrees C
Adapter 0: on-line
只显示电池信息:
acpi -b
只显示温度信息:
acpi -t
只显示电源适配器信息:
acpi -a
只显示冷却设备(风扇)信息:
acpi -c
显示详细电池信息:
acpi -bi
输出示例:
Battery 0: Charging, 85%, 01:15:00 until charged
Battery 0: design capacity 5200 mAh, last full capacity 4800 mAh = 92%
Battery 0: present rate: 1500 mA
Battery 0: remaining capacity: 4080 mAh
Battery 0: present voltage: 12500 mV
显示所有信息(包括空设备):
acpi -s
使用详细输出模式:
acpi -v
使用华氏温度显示:
acpi -tf
输出示例:
Thermal 0: ok, 113.0 degrees F
Thermal 1: ok, 122.0 degrees F
使用开尔文温度显示:
acpi -tk
输出示例:
Thermal 0: ok, 318.2 degrees K
Thermal 1: ok, 323.2 degrees K
获取电池电量百分比:
acpi -b | grep -o '[0-9]*%' | tr -d '%'
检查是否连接了电源适配器:
if acpi -a | grep -q "on-line"; then
echo "电源已连接"
else
echo "使用电池供电"
fi
监控系统温度:
#!/bin/bash
echo "系统温度监控"
echo "============="
echo "开始时间: $(date)"
echo ""
while true; do
clear
echo "当前时间: $(date '+%H:%M:%S')"
echo "温度信息:"
acpi -t
echo ""
echo "电池状态:"
acpi -b
sleep 5
done
电池低电量警告:
#!/bin/bash
# 电池低电量警告脚本
LOW_BATTERY=20
CRITICAL_BATTERY=10
while true; do
# 获取电池百分比
battery_percent=$(acpi -b | grep -o '[0-9]*%' | tr -d '%' | head -1)
if [ -n "$battery_percent" ]; then
# 检查是否在使用电池
if acpi -a | grep -q "off-line"; then
if [ "$battery_percent" -le "$CRITICAL_BATTERY" ]; then
echo "⚠️ 紧急:电池电量仅剩 ${battery_percent}%,请立即连接电源!"
# 可以添加声音警告或桌面通知
# notify-send "电池电量紧急" "电池电量仅剩 ${battery_percent}%,请立即连接电源!" -u critical
elif [ "$battery_percent" -le "$LOW_BATTERY" ]; then
echo "⚠️ 警告:电池电量低,仅剩 ${battery_percent}%"
# notify-send "电池电量低" "电池电量仅剩 ${battery_percent}%" -u normal
fi
fi
fi
sleep 60 # 每分钟检查一次
done
温度过高警告:
#!/bin/bash
# 温度监控警告脚本
MAX_TEMP=80 # 最高允许温度(摄氏度)
while true; do
# 获取所有温度值
temps=$(acpi -t | grep -o '[0-9]*\.[0-9]*' | sort -nr)
for temp in $temps; do
if (( $(echo "$temp > $MAX_TEMP" | bc -l) )); then
echo "⚠️ 警告:系统温度过高:${temp}°C"
# 可以触发降频或其他冷却措施
# notify-send "系统温度过高" "当前温度:${temp}°C" -u critical
fi
done
sleep 30 # 每30秒检查一次
done
电池状态输出的各个字段说明:
| 字段 | 说明 | 示例 |
|---|---|---|
| Battery N | 电池编号(如果有多个电池) | Battery 0 |
| 状态 |
|
Charging |
| 电量百分比 | 当前电量占总电量的百分比 | 85% |
| 剩余时间 | 充满或耗尽的时间估计 | 01:15:00 |
| 设计容量 | 电池出厂设计容量 | 5200 mAh |
| 当前容量 | 电池当前最大容量(随老化减少) | 4800 mAh |
| 健康度 | 当前容量/设计容量的百分比 | 92% |
| 充电速率 | 当前充电或放电速率 | 1500 mA |
| 剩余容量 | 当前剩余电量 | 4080 mAh |
| 当前电压 | 电池当前电压 | 12500 mV |
温度监控输出的各个字段说明:
| 字段 | 说明 | 示例 |
|---|---|---|
| Thermal N | 温度传感器编号 | Thermal 0 |
| 状态 |
|
ok |
| 温度值 | 当前温度(默认摄氏度) | 45.0 degrees C |
| 传感器类型 |
|
CPU |
| 温度阈值 | 温度警告和临界阈值 | crit at 95.0 C |
acpi -b监控电池健康度#!/bin/bash
# ACPI系统健康报告脚本
echo "ACPI系统健康报告"
echo "================="
echo "生成时间: $(date)"
echo ""
# 检查ACPI服务
if [ -d /proc/acpi ]; then
echo "✅ ACPI支持已启用"
else
echo "❌ ACPI支持未启用"
exit 1
fi
echo ""
# 电池信息
echo "电池状态:"
echo "-----------"
if acpi -b &>/dev/null; then
BATTERY_INFO=$(acpi -bi)
echo "$BATTERY_INFO"
# 检查电池健康度
health=$(echo "$BATTERY_INFO" | grep -o '= [0-9]*%' | tr -d '=%')
if [ -n "$health" ]; then
if [ "$health" -lt 80 ]; then
echo "⚠️ 电池健康度较低:${health}%"
else
echo "✅ 电池健康度良好:${health}%"
fi
fi
else
echo "未检测到电池"
fi
echo ""
# 温度信息
echo "温度状态:"
echo "-----------"
if acpi -t &>/dev/null; then
TEMP_INFO=$(acpi -t)
echo "$TEMP_INFO"
# 检查是否过热
max_temp=0
while read -r line; do
temp=$(echo "$line" | grep -o '[0-9]*\.[0-9]*')
if (( $(echo "$temp > $max_temp" | bc -l) )); then
max_temp=$temp
fi
done <<< "$TEMP_INFO"
if (( $(echo "$max_temp > 80" | bc -l) )); then
echo "⚠️ 最高温度 ${max_temp}°C,建议检查散热"
else
echo "✅ 温度正常,最高 ${max_temp}°C"
fi
else
echo "未检测到温度传感器"
fi
echo ""
# 电源适配器
echo "电源适配器:"
echo "-----------"
if acpi -a &>/dev/null; then
ADAPTER_INFO=$(acpi -a)
echo "$ADAPTER_INFO"
if echo "$ADAPTER_INFO" | grep -q "on-line"; then
echo "✅ 电源已连接"
else
echo "🔋 使用电池供电"
fi
else
echo "未检测到电源适配器信息"
fi
echo ""
echo "报告生成完成"
acpi命令无输出:
which acpils /proc/acpilsmod | grep acpiacpi -Sdmesg | grep -i acpi电池信息不准确:
upower命令作为替代upower - 电源管理守护进程和工具powertop - 电源使用情况诊断工具tlp - 笔记本电脑电源管理工具cpufreq - CPU频率调节工具pm-suspend - 系统挂起工具sensors - 显示传感器信息(来自lm-sensors)hddtemp - 硬盘温度监控smartctl - SMART磁盘监控dmidecode - DMI/SMBIOS信息lscpu - CPU信息acpi 与 sensors 的主要区别:
| 特性 | acpi |
sensors |
|---|---|---|
| 数据源 | ACPI接口(/proc/acpi或/sys/class) | 硬件传感器芯片(通过lm-sensors驱动) |
| 主要功能 | 电池、温度、电源、冷却设备 | 温度、电压、风扇转速 |
| 精度 | 通常较低,依赖ACPI实现 | 通常较高,直接读取传感器 |
| 硬件支持 | 需要ACPI兼容硬件 | 需要lm-sensors支持的传感器 |
| 使用场景 | 电源管理、电池监控 | 硬件监控、超频、散热 |
建议:
acpisensorssensorsacpi命令的输出取决于硬件和内核的ACPI实现,不同系统可能有所不同sensors命令进行验证