Laptop Mode Tools

出自 ArchWiki

Laptop Mode Tools 是一个用于 Linux 系统的笔记本电脑省电软件包。它是启用 Linux 内核的 Laptop Mode 功能的主要方法,该功能可以让您的硬盘驱动器停止旋转。此外,它还允许您使用简单的配置文件调整许多其他与电源相关的设置。

结合 acpidCPU 频率调节,LMT 为大多数用户提供了完整的笔记本电脑电源管理套件。

安装

安装 laptop-mode-toolsAUR 软件包或 laptop-mode-tools-gitAUR 软件包。

配置

配置通过以下方式处理

  • /etc/laptop-mode/laptop-mode.conf - 主要配置文件。
  • /etc/laptop-mode/conf.d/* - 许多特定于功能的“模块”。

每个模块都可以通过更改 conf.d/ 中任何文件的 CONTROL_* 参数显式设置为 enableddisabledauto。如果 /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
注意: CONTROL_MOUNT_OPTIONS 不应与 nilfs2 分区一起打开。请参阅论坛上的这个帖子:https://bbs.archlinux.org/viewtopic.php?id=134656

固态硬盘

来自 官方上游 FAQ

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

回答: 它们可能是相关的,因为 (a) 笔记本电脑模式将减少写入次数,从而延长 SSD 的寿命,并且 (b) 笔记本电脑模式使写入突发性,这使得 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 控制器主动式链路电源管理功能,以便在没有磁盘 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 文件以获取更多配置详细信息。
华硕笔记本电脑
LCD

对于大多数(可能所有)配备 Intel CPU 的华硕 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"
键盘背光

华硕笔记本电脑通过华硕专用模块与内核对话,因此标准键盘亮度命令将不起作用。可以通过运行以下命令获得最大亮度级别

# 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.conf 中的 AUTOSUSPEND_DEVID_BLACKLIST 变量中,例如

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

多个 ID 可以用空格分隔。

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

NVIDIA 驱动程序问题

KDE 显示黑屏

启用笔记本电脑模式后,KDE 无法启动。原因是默认的 KDE 显示管理器 (SDDM) 在 NVIDIA 驱动程序之前启动。为了防止这种情况发生,您需要删除 nomodeset 内核参数

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

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

参见