联想T440s电池状态未知,但正在充电?


14

我正在尝试在Arch Linux上配置我的Lenovo。我需要做的最后一件事是让电池100%工作。

现在看来主电池的状态是未知的:

> acpi -V
Battery 0: Unknown, 97%
Battery 0: design capacity 5849 mAh, last full capacity 5956 mAh = 100%
Battery 1: Charging, 96%, 00:05:50 until charged
Battery 1: design capacity 1861 mAh, last full capacity 1536 mAh = 82%
Adapter 0: on-line
Thermal 0: ok, 43.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 200.0 degrees C
Cooling 0: x86_pkg_temp no state information available
Cooling 1: intel_powerclamp no state information available
Cooling 2: Processor 0 of 10
Cooling 3: Processor 0 of 10
Cooling 4: Processor 0 of 10
Cooling 5: Processor 0 of 10

但是,如果直接查询电池,则会得到完全不同的响应:

> cat /sys/class/power_supply/BAT0/status
Charging

> cat /sys/class/power_supply/BAT0/uevent
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Charging
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000
POWER_SUPPLY_VOLTAGE_NOW=12389000
POWER_SUPPLY_POWER_NOW=0
POWER_SUPPLY_ENERGY_FULL_DESIGN=23200000
POWER_SUPPLY_ENERGY_FULL=19150000
POWER_SUPPLY_ENERGY_NOW=19050000
POWER_SUPPLY_CAPACITY=99
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=45N1773
POWER_SUPPLY_MANUFACTURER=SANYO
POWER_SUPPLY_SERIAL_NUMBER=16120

我完全不知道该怎么办。我有一个报告电池寿命的脚本,该脚本使用了其中一些命令的输出,因此我希望它尽可能完整。显然,电池正在充电,但是为什么acpi -V表示未知?有人知道吗?


2
我在T460上看到的大致相同。我认为两节电池轮流充电/放电。据acpi称,目前我的BAT0为“正在充电,98%,00:04:52直到被充电”,而我的BAT1为“未知,79%”。便携式计算机工具报告“您的电池坏了。无法确定实际状态”,但是UPower 可以通过启发式方法确定电池的实际状态为“正在充电”。
Mathias Rav'3

1
如果笔记本电脑只有一块电池,则只有两种可能的状态:“正在放电”和“正在充电”(当然,“已充电100%”)。当笔记本电脑有两节电池时,它只能使用其中的一块,那么第二块电池的状态将被视为“未知”(因为它既不充电也不放电)。我的Thinkpad X250发生了相同的事情,因此我认为这是预期的行为。
ddnomad

Answers:


0

在Arch上运行时,您可以尝试安装软件包tpacpi-bat(tp_smapi不支持电池阈值的最新ThinkPad(例如T420和W520)的ACPI调用Perl脚本),

pacman -S tpacpi-bat

它可以帮助修复它。在此处查看有关配置的信息


0

这是双电池Thinkpad笔记本电脑的常见问题。

当您插入笔记本电脑时,它将从对BAT0充电开始,而BAT1报告未知状态。当BAT0充满并且BAT1实际上开始充电时,BAT1将报告充电状态。

您需要在脚本中考虑到这一点,并组合BAT0和BAT1的值以使用一些东西:

battery_level=$(("$battery_level_0 + $battery_level_1"))
battery_max=$(("$battery_max_0 + $battery_max_1"))

battery_percent=$(("$battery_level * 100"))
battery_percent=$(("$battery_percent / $battery_max"))

这是一个完整的例子:

#!/bin/sh

path_ac="/sys/class/power_supply/AC"
path_battery_0="/sys/class/power_supply/BAT0"
path_battery_1="/sys/class/power_supply/BAT1"

ac=0
battery_level_0=0
battery_level_1=0
battery_max_0=0
battery_max_1=0

if [ -f "$path_ac/online" ]; then
    ac=$(cat "$path_ac/online")
fi

if [ -f "$path_battery_0/energy_now" ]; then
    battery_level_0=$(cat "$path_battery_0/energy_now")
fi

if [ -f "$path_battery_0/energy_full" ]; then
    battery_max_0=$(cat "$path_battery_0/energy_full")
fi

if [ -f "$path_battery_1/energy_now" ]; then
    battery_level_1=$(cat "$path_battery_1/energy_now")
fi

if [ -f "$path_battery_1/energy_full" ]; then
    battery_max_1=$(cat "$path_battery_1/energy_full")
fi

battery_level=$(("$battery_level_0 + $battery_level_1"))
battery_max=$(("$battery_max_0 + $battery_max_1"))

battery_percent=$(("$battery_level * 100"))
battery_percent=$(("$battery_percent / $battery_max"))

if [ "$ac" -eq 1 ]; then
    plug=""

    echo "$plug $battery_percent %"
else
    if [ "$battery_percent" -gt 95 ]; then
        echo ""
    elif [ "$battery_percent" -gt 85 ]; then
        icon=""
    elif [ "$battery_percent" -gt 60 ]; then
        icon=""
    elif [ "$battery_percent" -gt 35 ]; then
        icon=""
    elif [ "$battery_percent" -gt 10 ]; then
        icon=""
    else
        icon=""
    fi

    echo "$icon $battery_percent %"
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.