Linux acpi命令

acpi 是一个用于显示ACPI(高级配置与电源接口)信息的命令,它可以提供系统的电源管理状态,包括电池信息、温度监控、电源适配器状态等,特别适用于笔记本电脑用户。

命令简介

acpi 是一个用于显示ACPI(Advanced Configuration and Power Interface)信息的工具。ACPI是一种开放标准,定义了操作系统、固件和硬件之间的电源管理接口。

主要功能
  • 显示电池状态和电量信息
  • 监控系统温度
  • 显示电源适配器状态
  • 检查系统散热风扇状态
  • 查看ACPI电源管理事件
  • 支持热区和热键信息
注意事项
  • 需要ACPI内核支持
  • 不同硬件的ACPI实现可能不同
  • 某些信息可能需要root权限
  • 输出格式可能因系统而异
  • 某些功能可能不受支持

安装方法

acpi 通常需要单独安装,因为它不是所有Linux发行版的标准命令:

Ubuntu/Debian
sudo apt update
sudo apt install acpi
CentOS/RHEL
sudo yum install acpi
检查是否已安装: 运行 which acpiacpi -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 详细输出模式

使用示例

示例1:基本使用

显示所有可用的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
示例2:显示特定信息

只显示电池信息:

acpi -b

只显示温度信息:

acpi -t

只显示电源适配器信息:

acpi -a

只显示冷却设备(风扇)信息:

acpi -c
示例3:详细输出

显示详细电池信息:

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
示例4:温度单位转换

使用华氏温度显示:

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
示例5:脚本中使用

获取电池电量百分比:

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
示例6:高级监控和警告

电池低电量警告:

#!/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

ACPI信息详解

电池状态信息

电池状态输出的各个字段说明:

字段 说明 示例
Battery N 电池编号(如果有多个电池) Battery 0
状态
  • Charging:正在充电
  • Discharging:正在放电
  • Full:已充满
  • Unknown:未知状态
Charging
电量百分比 当前电量占总电量的百分比 85%
剩余时间 充满或耗尽的时间估计 01:15:00
设计容量 电池出厂设计容量 5200 mAh
当前容量 电池当前最大容量(随老化减少) 4800 mAh
健康度 当前容量/设计容量的百分比 92%
充电速率 当前充电或放电速率 1500 mA
剩余容量 当前剩余电量 4080 mAh
当前电压 电池当前电压 12500 mV
温度信息

温度监控输出的各个字段说明:

字段 说明 示例
Thermal N 温度传感器编号 Thermal 0
状态
  • ok:正常状态
  • active:活跃状态
  • critical:临界状态
ok
温度值 当前温度(默认摄氏度) 45.0 degrees C
传感器类型
  • CPU:处理器温度
  • GPU:显卡温度
  • Memory:内存温度
  • Ambient:环境温度
  • Other:其他温度
CPU
温度阈值 温度警告和临界阈值 crit at 95.0 C
常见温度传感器位置:
  • Thermal 0:CPU核心温度
  • Thermal 1:CPU封装温度
  • Thermal 2:GPU温度
  • Thermal 3:硬盘温度
  • Thermal 4:主板温度

实用技巧

笔记本电脑用户
  • 使用acpi -b监控电池健康度
  • 设置电池低电量警告脚本
  • 监控温度防止过热
  • 检查电源适配器是否正常工作
  • 记录电池使用历史
服务器管理员
  • 监控服务器温度防止过热
  • 检查UPS电源状态
  • 监控风扇工作状态
  • 设置温度阈值警报
  • 记录温度趋势分析
脚本示例:ACPI健康报告
#!/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命令无输出:

  1. 检查是否安装了acpi包:which acpi
  2. 检查ACPI内核支持:ls /proc/acpi
  3. 检查内核模块是否加载:lsmod | grep acpi
  4. 尝试使用sysfs接口:acpi -S
  5. 查看内核消息:dmesg | grep -i acpi

电池信息不准确:

  1. 尝试校准电池
  2. 更新BIOS/UEFI固件
  3. 检查内核ACPI驱动
  4. 使用upower命令作为替代
电源管理命令
  • upower - 电源管理守护进程和工具
  • powertop - 电源使用情况诊断工具
  • tlp - 笔记本电脑电源管理工具
  • cpufreq - CPU频率调节工具
  • pm-suspend - 系统挂起工具
硬件监控命令
  • sensors - 显示传感器信息(来自lm-sensors)
  • hddtemp - 硬盘温度监控
  • smartctl - SMART磁盘监控
  • dmidecode - DMI/SMBIOS信息
  • lscpu - CPU信息
命令比较

acpisensors 的主要区别:

特性 acpi sensors
数据源 ACPI接口(/proc/acpi或/sys/class) 硬件传感器芯片(通过lm-sensors驱动)
主要功能 电池、温度、电源、冷却设备 温度、电压、风扇转速
精度 通常较低,依赖ACPI实现 通常较高,直接读取传感器
硬件支持 需要ACPI兼容硬件 需要lm-sensors支持的传感器
使用场景 电源管理、电池监控 硬件监控、超频、散热

建议:

  • 查看电池和电源状态使用 acpi
  • 查看详细的硬件温度使用 sensors
  • 在笔记本电脑上结合使用两者
  • 对于服务器监控,优先使用 sensors
  • 编写监控脚本时,根据需求选择合适的工具
注意事项
  • acpi命令的输出取决于硬件和内核的ACPI实现,不同系统可能有所不同
  • 某些ACPI信息可能需要root权限才能访问
  • 温度读数可能不准确,建议使用sensors命令进行验证
  • 电池健康度会随时间下降,这是正常现象
  • 如果ACPI信息不准确,可能需要更新BIOS/UEFI或内核
  • 某些笔记本电脑可能需要在BIOS中启用ACPI支持
  • 在生产服务器上使用ACPI监控时,确保不会影响系统性能