Состояние батареи Lenovo T440s неизвестно, но зарядка?

14

Я пытаюсь настроить свой Lenovo на Arch Linux. Последнее, что мне нужно сделать, это заставить аккумулятор работать на 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 сказать, что это неизвестно? Кто-нибудь знает?

Aqyr
источник
2
Я вижу примерно то же самое на моем T460s. Я думаю, что две батареи по очереди заряжаются / разряжаются; в настоящее время мой BAT0 - «Зарядка, 98%, 00:04:52 до зарядки», а мой BAT1 - «Неизвестно, 79%», согласно acpi. Инструменты для работы в ноутбуке сообщают: «У вас сломан аккумулятор. Невозможно определить фактическое состояние» , но UPower имеет эвристический метод для определения того, что фактическое состояние аккумулятора «Зарядка».
Матиас Рав
1
Если у ноутбука только одна батарея, есть только 2 возможных состояния: «разрядка» и «зарядка» (и, ну, в общем, «заряд 100%»). Если в ноутбуке 2 батареи, он может использовать только одну из них, тогда состояние второй батареи будет считаться «неизвестным» (так как он не заряжается и не разряжается). У меня происходит то же самое с моим Thinkpad X250, поэтому я предполагаю, что это ожидаемое поведение.
ddnomad

Ответы:

0

Находясь в Arch, вы можете попробовать установить пакет tpacpi-bat(скрипт Perl с ACPI-вызовами для последних ThinkPad (таких как T420 и W520), пороги батареи которых не поддерживаются tp_smapi) с

pacman -S tpacpi-bat

Это может помочь исправить это. Смотрите информацию о конфигурации здесь .

PCFreak
источник
0

Это общая проблема ноутбуков Thinkpad с двумя батареями.

Когда вы подключаете ноутбук, он начинает заряжать BAT0, а BAT1 сообщает о неизвестном состоянии. BAT1 сообщит о состоянии зарядки, когда BAT0 заполнен и 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
ldclrcq
источник