Linux で消費電力を節約する方法


Powertop は、バッテリー電力を節約するための優れたツールであり、別のツール acpid の助けを借りて、acpi イベントを観察し、自動的に構成します.

Acpid には、トリガーされたイベントの事前定義されたアクションが付属しています.デフォルトでは、これらのアクションは /etc/acpi/handler.sh で定義されています.

アクション「ac_adapter」にはデフォルトのオプションがあります

*)
                logger "ACPI action undefined: $2"


したがって、AC に接続されているかどうかに関係なく、次のログを表示できます.

journalctl -f

ene 12 20:54:49 msi root[3888]: ACPI action undefined: ACPI0003:00


この場合、/etc/acpi/handler.sh を次のように変更する必要があります.

ac_adapter)
        case "$2" in
            ACPI0003:00)


変更を保存し、AC のプラグを抜くと、ログに次のように表示されます.

ene 12 21:00:31 msi root[6101]: AC unpluged


変更が機能します.これで、powertop コマンドを追加できます.これは私の handler.sh です:

ac_adapter)
        case "$2" in
            ACPI0003:00)
                case "$4" in
                    00000000)
                        powertop --auto-tune
                        echo 'on' > '/sys/bus/usb/devices/3-2/power/control' # USB USB Receiver [Logitech]
                        echo 'enabled' > '/sys/class/net/wlo1/device/power/wakeup'
                        echo 'enabled' > '/sys/bus/usb/devices/usb1/power/wakeup'
                        echo 'enabled' > '/sys/bus/usb/devices/usb2/power/wakeup'
                        echo 'enabled' > '/sys/bus/usb/devices/usb3/power/wakeup'
                        echo 'enabled' > '/sys/bus/usb/devices/usb4/power/wakeup'
                        echo 'enabled' > '/sys/bus/usb/devices/3-2/power/wakeup'
                        echo 'enabled' > '/sys/bus/usb/devices/3-5/power/wakeup'
                        echo 'enabled' > '/sys/bus/usb/devices/3-10/power/wakeup'
                        logger 'AC unpluged'
                        ;;
                    00000001)
                        echo 'disabled' > '/sys/class/net/wlo1/device/power/wakeup'
                        echo 'disabled' > '/sys/bus/usb/devices/usb1/power/wakeup'
                        echo 'disabled' > '/sys/bus/usb/devices/usb2/power/wakeup'
                        echo 'disabled' > '/sys/bus/usb/devices/usb3/power/wakeup'
                        echo 'disabled' > '/sys/bus/usb/devices/usb4/power/wakeup'
                        echo 'disabled' > '/sys/bus/usb/devices/3-2/power/wakeup'
                        echo 'disabled' > '/sys/bus/usb/devices/3-5/power/wakeup'
                        echo 'disabled' > '/sys/bus/usb/devices/3-10/power/wakeup'
                        logger 'AC pluged'
                        ;;


ACなしでラップトップを起動すると、これは機能しないことに注意してください.どのように解決しますか?
次の post に触発されて、新しい systemd ユニットを作成しました.

/usr/lib/systemd/system/acpid-boot.service

[Unit]
Description=ACPI boot handle
Documentation=man:acpid(8)

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/acpi-boot-handle.sh

[Install]
WantedBy=multi-user.target


スクリプト /usr/local/sbin/acpi-boot-handle.sh には以下が含まれます.

#!/usr/bin/env bash
set -euo pipefail

if [[ $(acpi -a | grep on) ]]
then
        onBit=1
else
        onBit=0
fi
/etc/acpi/handler.sh ac_adapter ACPI0003:00 foo 0000000$onBit


このようにして、ラップトップの起動時に acpi アクションをシミュレートします.

私の場合、MSI Modern 14 では、すべてのパワートップ オプションが有効になっている場合、バッテリーは 3 時間以上持ちます.