跳转至内容

Laptop Mode Tools

来自 ArchWiki

Laptop Mode Tools 是一个适用于 Linux 系统的笔记本电脑节能软件包。它是启用 Linux 内核 Laptop Mode 功能的主要方式,该功能可以让你的硬盘停转。此外,它允许你通过一个简单的配置文件来调整许多其他与电源相关的设置。

结合 acpidCPU 频率缩放,LMT 为大多数用户提供了一套完整的笔记本电源管理方案。

注意 Laptop Mode 功能已从 Linux 内核 7.0 版本开始移除,请参阅此 commit 以了解原因和相关讨论。

安装

安装 laptop-mode-toolsAUR 软件包。

配置

配置通过以下方式处理:

  • /etc/laptop-mode/laptop-mode.conf - 主配置文件。
  • /etc/laptop-mode/conf.d/* - 数十个特定功能的“模块”。

通过更改 conf.d/ 中任何文件的 CONTROL_* 参数,可以将每个模块显式设置为 enabled(启用)、disabled(禁用)或 auto(自动)。如果 /etc/laptop-mode/laptop-mode.conf 中设置了 ENABLE_AUTO_MODULES,LMT 将尝试启用所有 CONTROL_* 设置为 auto 的模块。上述规则有两个例外:auto-hibernate.confbattery-level-polling.conf 使用 ENABLE_* 变量而不是 CONTROL_*

要快速检查哪些模块已启用、禁用或设置为自动,请运行:

$ grep -r '^\(CONTROL\|ENABLE\)_' /etc/laptop-mode/conf.d

最后,启用 laptop-mode.service

硬盘

为此,你需要安装 hdparm 和/或 sdparm。参阅 Hdparm

通过 hdparm -S 值让硬盘停转可以节省电量并让运行环境更加安静。LMT 还可以设置 hdparm -B 值。硬盘电源节省的最大值为 1,最小值为 254。例如,在接通交流电时将其设置为 254,在电池供电时设置为 20。如果你发现正常活动经常在等待磁盘启动时卡顿,建议将其设置为更高的值(例如 128),这样它停转的频率会降低。hdparm -Shdparm -B 的值在 /etc/laptop-mode/laptop-mode.conf 中配置。

警告 硬盘过于频繁地停转可能会缩短其寿命。在选择合适的值时请小心。

通过 CONTROL_MOUNT_OPTIONS 变量(默认开启),laptop-mode-tools 会自动重新挂载你的分区,并在挂载选项中追加 commit=600,noatime。这可以防止日志程序 jbd2 每隔几秒就访问一次磁盘,改为每 10 分钟更新一次磁盘日志。

警告 使用此设置可能会丢失最多 10 分钟的工作进度。此外,请确保不要使用 atime 挂载选项,请使用 noatimerelatime 代替。
注意 nilfs2 分区不应开启 CONTROL_MOUNT_OPTIONS。请参考论坛上的此讨论帖:https://bbs.archlinux.org/viewtopic.php?id=134656

固态硬盘

摘自 官方上游 FAQ

问: 我的机器使用的是固态硬盘 (SSD)。我应该启用 laptop-mode-tools 中任何与磁盘相关的部分吗,还是它们无关紧要?

答: 它们可能是相关的,因为 (a) laptop mode 将减少写入次数,从而延长 SSD 的寿命;(b) laptop mode 使写入变得具有突发性,这使得 ALPM 等省电机制能够生效。不过,具体效果取决于具体的硬件。对于某些硬件,你可能完全没有收益;而对于另一些硬件,收益可能会非常可观。

CPU 频率

为此,你需要安装 CPU 频率驱动程序。参阅 CPU 频率缩放

# cpufreq.conf
# ThinkPad T40/T42/T60 Example
#
CONTROL_CPU_FREQUENCY=1
BATT_CPU_MAXFREQ=fastest
BATT_CPU_MINFREQ=slowest
BATT_CPU_GOVERNOR=ondemand
BATT_CPU_IGNORE_NICE_LOAD=1
LM_AC_CPU_MAXFREQ=fastest
LM_AC_CPU_MINFREQ=slowest
LM_AC_CPU_GOVERNOR=ondemand
LM_AC_CPU_IGNORE_NICE_LOAD=1
NOLM_AC_CPU_MAXFREQ=fastest
NOLM_AC_CPU_MINFREQ=slowest
NOLM_AC_CPU_GOVERNOR=ondemand
NOLM_AC_CPU_IGNORE_NICE_LOAD=0
CONTROL_CPU_THROTTLING=0

设备与总线

Intel SATA

启用 Intel SATA AHCI 控制器的 Aggressive Link Power Management 功能,在没有磁盘 IO 时将磁盘链路设置为极低功耗模式。

# intel-sata-powermgmt.conf
# ThinkPad T40/T42/T60 Example
#
DEBUG=0
CONTROL_INTEL_SATA_POWER=1
BATT_ACTIVATE_SATA_POWER=1
LM_AC_ACTIVATE_SATA_POWER=1
NOLM_AC_ACTIVATE_SATA_POWER=0
注意 请查阅文档详尽的 /etc/laptop-mode/conf.d/intel-sata-powermgmt.conf 文件以获取更多配置细节。

USB 自动挂起

提示 USB 自动暂停功能已从 usb-autosuspend 模块移至 runtime-pm 模块。请确保在 /lib/udev/rules.d/99-laptop-mode.rules 中将 usb-autosuspend 替换为 runtime-pm。
# runtime-pm.conf
# ThinkPad T40/T42/T60 Example
#
DEBUG=0
CONTROL_RUNTIME_AUTOSUSPEND=1
BATT_SUSPEND_RUNTIME=1
LM_AC_SUSPEND_RUNTIME=1
NOLM_AC_SUSPEND_RUNTIME=1
AUTOSUSPEND_TIMEOUT=2
注意 请查阅 /etc/laptop-mode/conf.d/runtime-pm.conf 文件以获取更多配置细节。如果你有一个经常使用的 USB 设备(如 USB 鼠标),将其列入黑名单可以防止其进入暂停状态。

显示与图形

LCD 亮度

某些笔记本电脑可用的亮度值可以通过运行以下命令获得

$ cat /proc/acpi/video/VID/LCD/brightness
ThinkPad T40/T42

对于 ThinkPad T40/T42 笔记本,可以通过运行以下命令获取最小和最大亮度值

$ cat /sys/class/backlight/acpi_video0/brightness
$ cat /sys/class/backlight/acpi_video0/max_brightness
# lcd-brightness.conf
# ThinkPad T40/T42 Example
#
DEBUG=0
CONTROL_BRIGHTNESS=1
BATT_BRIGHTNESS_COMMAND="echo 0"
LM_AC_BRIGHTNESS_COMMAND="echo 7"
NOLM_AC_BRIGHTNESS_COMMAND="echo 7"
BRIGHTNESS_OUTPUT="/sys/class/backlight/thinkpad_screen/brightness"
ThinkPad T60

对于 ThinkPad T60 笔记本,可以通过运行以下命令获取最小和最大亮度值

$ cat /sys/class/backlight/thinkpad_screen/max_brightness
$ cat /sys/class/backlight/thinkpad_screen/brightness
# lcd-brightness.conf
# ThinkPad T60 Example
#
DEBUG=0
CONTROL_BRIGHTNESS=1
BATT_BRIGHTNESS_COMMAND="echo 0"
LM_AC_BRIGHTNESS_COMMAND="echo 7"
NOLM_AC_BRIGHTNESS_COMMAND="echo 7"
BRIGHTNESS_OUTPUT="/sys/class/backlight/acpi_video0/brightness"
注意 请查阅文档详尽的 /etc/laptop-mode/conf.d/lcd-brightness.conf 文件以获取更多配置细节。
Asus 笔记本
LCD

对于大多数(可能所有)搭载 Intel CPU 的 Asus ROG 和 TUF 笔记本,可以通过运行以下命令获得最大亮度值

# cat /sys/class/backlight/intel_backlight/max_brightness
# lcd-brightness.conf
# Asus TUF Dash F15 2022 Example
#
DEBUG=0
CONTROL_BRIGHTNESS=1
BATT_BRIGHTNESS_COMMAND="echo 32000"
LM_AC_BRIGHTNESS_COMMAND="echo 96000"
NOLM_AC_BRIGHTNESS_COMMAND="echo 96000"
BRIGHTNESS_OUTPUT="/sys/class/backlight/intel_backlight/brightness"
键盘背光

Asus 笔记本通过一个 Asus 特有的模块与内核通信,因此标准的键盘亮度命令将不起作用。可以通过运行以下命令获得最大亮度级别

# cat /sys/class/leds/asus::kbd_backlight/max_brightness
# kbd-backlight.conf
# Asus TUF Dash F15 2022 Example
#
DEBUG=0
CONTROL_BRIGHTNESS=1
BATT_BRIGHTNESS_COMMAND="echo 1"
LM_AC_BRIGHTNESS_COMMAND="echo 3"
NOLM_AC_BRIGHTNESS_COMMAND="echo 3"
BRIGHTNESS_OUTPUT="/sys/class/leds/asus::kbd_backlight/max_brightness"

终端黑屏

# terminal-blanking.conf
# ThinkPad T40/T42/T60 Example
#
DEBUG=0
CONTROL_TERMINAL=1
TERMINALS="/dev/tty1"
BATT_TERMINAL_BLANK_MINUTES=1
BATT_TERMINAL_POWERDOWN_MINUTES=2
LM_AC_TERMINAL_BLANK_MINUTES=10
LM_AC_TERMINAL_POWERDOWN_MINUTES=10
NOLM_AC_TERMINAL_BLANK_MINUTES=10
NOLM_AC_TERMINAL_POWERDOWN_MINUTES=10
注意 请查阅文档详尽的 /etc/laptop-mode/conf.d/terminal-blanking.conf 文件以获取更多配置细节。

网络

以太网

# ethernet.conf
# ThinkPad T40/T42/T60 Example
#
DEBUG=0
CONTROL_ETHERNET=1
LM_AC_THROTTLE_ETHERNET=0
NOLM_AC_THROTTLE_ETHERNET=0
DISABLE_WAKEUP_ON_LAN=1
DISABLE_ETHERNET_ON_BATTERY=1
ETHERNET_DEVICES="eth0"

无线局域网

无线接口的电源管理设置取决于硬件,因此配置起来较为复杂。根据无线芯片组的不同,设置在以下三个文件之一中管理

  1. /etc/laptop-mode/conf.d/wireless-power.conf 用于通用的省电方法(使用 "iwconfig wlan0 power on/off")。这适用于大多数芯片组(即除下面列出的 Intel 芯片组以外的所有芯片组)。
  2. /etc/laptop-mode/conf.d/wireless-ipw-power.conf 用于由旧版 ipw 驱动程序驱动的 Intel 芯片组。适用于 IPW3945, IPW2200 和 IPW2100。目前(截至 LMT 1.55-1)它对 IPW3945 使用 iwpriv,对 IPW2100 和 IPW220 使用 iwconfig 和 iwpriv 的组合设置。详情见 /usr/share/laptop-mode-tools/modules/wireless-ipw-power。(注意 ipw3945 已不再使用,见下文)
  3. /etc/laptop-mode/conf.d/wireless-iwl-power.conf 用于由 iwl4965, iwl3945 和 iwlagn 模块驱动的 Intel 芯片组(后者支持芯片组 4965, 5100, 5300, 5350, 5150, 1000 和 6000)

注意,同时激活这三个文件应该没有大问题,因为 LMT 会检测接口所使用的模块并据此采取行动。

上述每个配置文件支持的模块直接取自 LMT。然而,这似乎有些过时,因为当前的 2.6.34 内核不再提供 ipw3945 和 iwl4965 模块(3945 芯片组改用 iwl3945,4965 使用通用模块 iwlagn)。此处仅提供信息,因为这不会(或不应该)影响 LMT 的工作方式。

某些运行 iwlagn 模块的芯片组(特别是 5300 芯片组,可能还有其他芯片组)存在已知问题。在这些芯片组上,/etc/laptop-mode/conf.d/wireless-iwl-power.conf 的以下设置

IWL_AC_POWER
IWL_BATT_POWER

会被忽略,因为 /sys/class/net/wlan*/device/power_level 文件不存在。相反,系统会自动使用标准方法(使用 iwconfig wlan0 power on/off)。

音频

AC97

# ac97-powersave.conf
# ThinkPad T40/T42/T60 Example
#
DEBUG=0
CONTROL_AC97_POWER=1

Intel HDA

# intel-hda-powersave.conf
# ThinkPad T40/T42/T60 Example
#
DEBUG=0
CONTROL_INTEL_HDA_POWER=1
BATT_INTEL_HDA_POWERSAVE=1
LM_AC_INTEL_HDA_POWERSAVE=1
NOLM_AC_INTEL_HDA_POWERSAVE=0
INTEL_HDA_DEVICE_TIMEOUT=10
INTEL_HDA_DEVICE_CONTROLLER=0

故障排除

Laptop-mode-tools 未能捕获事件

安装 acpid启用 acpid.service

如果这没有帮助,请检查 laptop-mode 配置文件,确保你想要启用的服务被设置为 1。许多服务(包括 cpufreq 控制)默认设置为 "auto",这可能导致它们未被启用。

电池启动时蓝牙无法工作的问题可以通过禁用 runtime-pm 来解决。

使用电池时 USB 鼠标在 5 秒后进入睡眠

首先找到你的设备 ID(看起来应该是 046d:c534 这样的格式)

$ lsusb

将此值放入 /etc/laptop-mode/conf.d/runtime-pm.confAUTOSUSPEND_DEVID_BLACKLIST 变量中,例如:

/etc/laptop-mode/conf.d/runtime-pm.conf
...
AUTOSUSPEND_DEVID_BLACKLIST="046d:c534"
...

多个 ID 可以用空格分隔。

注意 不要忘记 重启 laptop-mode.service。你可能还需要重新连接 USB 设备。

NVIDIA 驱动相关问题

KDE 显示黑屏

当启用 laptop mode 时,KDE 无法启动。原因是默认的 KDE 显示管理器 (SDDM) 在 NVIDIA 驱动程序之前启动。为了防止这种情况发生,你需要移除 nomodeset 内核参数

启用 laptop-mode.service 后启动速度变慢

如前所述,laptop-mode-tools 会影响 NVIDIA 驱动程序。添加 nvidia-drm.modeset=1 内核参数 可以显著缩短启动时间。

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.