Linux: збереження заряду батареї ноутбуку

Автор |  18/11/2022
 

На цей раз стало мені цікаво – а чи можна якось поекономити заряд батерії ноутбука? Не сказати, що швидко разряжається – на 5-6 годин роботи вистачає, але зайвим не буде.

Знайшов декілька утіліт, про них сьогодні й запишу.

Upower

Перша утілітка – upower:

[simterm]

$ sudo pacman -S upower

[/simterm]

Спочатку можна визвати з опцією --monitor-detail – буде в ріалтаймі виводити інформацію про стан батареї:

[simterm]

$ $ sudo upower --monitor-detail
Monitoring activity from the power daemon. Press Ctrl+C to cancel.
[20:42:20.071]  device changed:     /org/freedesktop/UPower/devices/battery_BAT0
  native-path:          BAT0
  vendor:               SMP
  model:                LNV-5B10W13895
  serial:               2056
  power supply:         yes
  updated:              Fri Nov 18 20:42:20 2022 (0 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               charging
    warning-level:       none
    energy:              36.7 Wh
    energy-empty:        0 Wh
    energy-full:         0 Wh
    energy-full-design:  0 Wh
    energy-rate:         15.538 W
    voltage:             12.391 V
    charge-cycles:       N/A
    time to full:        22.7 minutes
    percentage:          86%
    technology:          lithium-polymer
    icon-name:          'battery-full-charging-symbolic'
  History (charge):
    1668796940  86.000  charging
    1668796850  85.000  charging
  History (rate):
    1668796940  15.538  charging
    1668796910  15.784  charging
    1668796880  16.006  charging
    1668796850  16.253  charging

[/simterm]

Відразу бачимо модель батареї ноута – LNV-5B10W13895, та її стан – кількість ватт-годин (36.7 Wh), та скількі споживає зараз (15.538 W), і на якій потужності – 12.391 V.

Можна порахувати в ампер-годинах:

[simterm]

>>> 37.31/12.3
3.03

[/simterm]

Тобто зараз 3033 mAh заряду в батареї.

Заодно побачили сам девайс батареї – /org/freedesktop/UPower/devices/battery_BAT0.

Отримати інфо про неї без моніторингу, а один раз – опція -i з пристроєм – sudo upower -i /org/freedesktop/UPower/devices/battery_BAT0.

ACPI

Друга, аналогічна утіліта – acpi, але ще вміє відображати температуру (і не тільки – див. About ACPI):

[simterm]

$ sudo pacman -S acpi

[/simterm]

Виводимо інформацію щодо батареї:

[simterm]

$ acpi -i
Battery 0: Charging, 91%, 00:21:40 until charged
Battery 0: design capacity 3649 mAh, last full capacity 3431 mAh = 94%

[/simterm]

“design capacity 3649 mAh” – все майже як рахували вище, тільки там брали поточний заряд, який зараз десь 94% від design capacity.

Batstat

Третя корисна річ – batstat. Простенька, але може стати в нагоді.

Качаємо репозіторій, збираємо:

[simterm]

$ git clone https://github.com/Juve45/batstat.git
$ cd batstat
$ make
$ chmod +x batstat
$ sudo mv batstat /usr/local/bin/

[/simterm]

І запускаємо:

Powertop

Powertop вміє не просто виводити інформацю про батарею, але й по-перше – виводити інформацю про процеси, які споживать енергію, по-друге – може виконати налаштування для економії заряду.

[simterm]

$ sudo pacman -S powertop

[/simterm]

Запускаємо під рутом:

[simterm]

$ sudo powertop

[/simterm]

В табі Tunables виводиться інформація по налаштуванням, які можуть оптимізувати споживання енергії.

Вибираємо потрібний пункт, Enter – і опція переключається:

Вміє генерувати html:

[simterm]

$ sudo powertop --html=powerreport.html

[/simterm]

І результат:

Можна додати systemd-сервіс, який буде виконувати автоматичний тюнінг при старті системи.

Створюємо файл /etc/systemd/system/powertop.service:

[Unit]
Description=Powertop tunings

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/powertop --auto-tune

[Install]
WantedBy=multi-user.target

Та активуємо:

[simterm]

$ sudo systemctl start powertop.service
$ sudo systemctl enable powertop.service

[/simterm]

TLP

Це просто монстр. Краще почитати більше інформації тут>>> та тут>>>, а зараз про основні можливості.

Встановлюємо:

[simterm]

$ sudo pacman -S tlp
$ sudo pacman -S tlp-rdw

[/simterm]

Є графічний інтерфейс:

[simterm]

$ yay -S tlpui
$ sudo tlpui

[/simterm]

Під капотом вже має всі налаштування, що робить powertop, тож powertop.service краще вікдлючити.

Стартуємо сервіс:

[simterm]

$ sudo systemctl enable tlp.service

[/simterm]

І блокуємо (mask) сервіси, які можуть завадити tlp:

[simterm]

$ sudo systemctl mask systemd-rfkill.service
$ sudo systemctl mask systemd-rfkill.socket

[/simterm]

Файл налаштувань – /etc/tlp.conf, в каталозі /etc/tlp.d/ можна задавати свої параметри.

Вивести параметри, що є зараз:

[simterm]

$ sudo tlp-stat
--- TLP 1.5.0 --------------------------------------------

+++ Configured Settings:
defaults.conf L0004: TLP_ENABLE="1"
defaults.conf L0005: TLP_WARN_LEVEL="3"
defaults.conf L0006: TLP_PERSISTENT_DEFAULT="0"
defaults.conf L0007: DISK_IDLE_SECS_ON_AC="0"
...

[/simterm]

Виводить прям купу всього, що стосується заліза та опцій по оптимізації, і все це можна налаштувати під себе.

Загальні поради

Ну і не забуваємо про самі базові речі.

Яскравість екрану та девайси

Перш за все це, звичайно, яскравість екрану – знизити кнопками Fn +/-brightness, або через файл, в мене це /sys/class/backlight/amdgpu_bl0/brightness:

[simterm]

$ sudo bash -c  'echo -n 25 > /sys/class/backlight/amdgpu_bl0/brightness'

[/simterm]

Ще можна відключити непотрібні USB-девайси, такі як миша/клава/зовнішній диск, та Bluetooth чи/або WiFi, якщо підключені кабелем.

Сервіси

Також має сенс перевірити сервіси в автостарті:

[simterm]

$ systemctl list-unit-files --state=enabled
UNIT FILE                          STATE   PRESET  
acpid.service                      enabled disabled
bluetooth-autoconnect.service      enabled disabled
bluetooth.service                  enabled disabled
gdm.service                        enabled disabled
[email protected]                     enabled enabled 
NetworkManager-dispatcher.service  enabled disabled
NetworkManager-wait-online.service enabled disabled
NetworkManager.service             enabled disabled
pritunl-client.service             enabled disabled
sshd.service                       enabled disabled
tlp.service                        enabled disabled
remote-fs.target                   enabled enabled 

[/simterm]

Bluetooth мені постійно не потрібен, рідко його включаю, теж саме з Притунлом.

tick_sched_timer та Polybar

Ще виявив цікаву річ – tick_sched_timer, шедулєр ядра, з’їдав аж 1.7W:

Погуглив, знайшов цей тред, прибив процес Polybar, який зверху виводить всяку інформацю по системі, використовуючи власні модулі – і tick_sched_timer почав споживати лише 150-300 mW.