跳转至内容

笔记本

来自 ArchWiki
AcerAppleASUSDellFrameworkHPIBM/LenovoMSISamsungSonyToshiba其他

笔记本电脑主页面包含配置笔记本电脑以获得最佳体验所需的文章(章节)链接。设置笔记本电脑在许多方面与设置台式机相同。然而,两者存在一些关键差异。Arch Linux 提供了完全掌控笔记本电脑所需的所有工具和程序。这些程序和实用工具在下文中进行了重点介绍,并附带了相应的提示和教程。

提示 若要了解特定笔记本型号在 Arch Linux 下的报告/实际硬件兼容性概况,请参阅上述子页面的各供应商结果。

如果有针对笔记本型号的具体说明,相关文章会链接在供应商子页面的第一列中。如果该型号未列在供应商表格中,可以通过 Category:Laptops 供应商子分类查找类似型号的现有说明,这可能会有所帮助。

电源 management

注意 您应该首先阅读电源管理CPU 频率调节文章。其他笔记本特有的功能将在下文描述。

电源管理对于任何希望充分利用电池容量的用户来说都非常重要。以下工具和程序有助于延长电池寿命并使笔记本电脑保持凉爽和安静。

电池状态

读取电池状态的方法有多种。经典方法是使用守护进程通过 ACPI 接口定期轮询电池电量。在某些系统上,当电池充/放电 1% 时,电池会向 udev 发送事件,该事件可以通过 udev 规则连接到特定动作。

可以直接从内核通过以下方式检查电池

$ cat /sys/class/power_supply/BAT0/capacity

BAT0 也可能拥有供应商名称。例如,Wacom 手写笔的 wacom_battery_0

或者,您可以使用 upower 抽象实用程序

$ for BAT_PATH in $(upower -e | grep BAT); do upower -i "$BAT_PATH"; done

ACPI

可以通过终端使用 ACPI 实用程序读取电池状态。ACPI 命令行实用程序通过 acpi 软件包提供。更多信息请参阅 ACPI 模块

  • cbatticon 是一个位于系统托盘中的电池图标。
  • batifyAUR 是一个 udev 规则文件,用于触发插电和电池电量通知(支持多 X 会话)。
  • batsignal 是一个轻量级的电池监视守护进程,使用 libnotify 来警告低电量。

低电量休眠

如果您的电池在充/放电 1% 时向 udev 发送事件,您可以使用此 udev 规则在电池电量临界时自动休眠系统,从而防止未保存的工作丢失。或者,如果 启用upower.serviceupower 也可以在电池电量处于可配置的临界水平时采取行动。

udev
注意 并非所有电池都会报告放电事件。请在电池供电时运行 udevadm monitor --property 进行测试,查看是否有事件报告。您应该至少等待 1% 的电量下降。如果没有事件报告且 /sys/class/power_supply/BAT0/alarm 不为零,则电池很可能在 BAT0/energy_now 低于报警值时触发事件,只要百分比计算正确,udev 规则就会生效。有些笔记本电脑在 BIOS 中默认禁用了此功能。
/etc/udev/rules.d/99-lowbat.rules
# Suspend the system when battery level drops to 5% or lower
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-5]", RUN+="/usr/bin/systemctl hibernate"
  • 在示例中,[0-5] 是一个类似 shell 的模式匹配表达式,匹配 0 到 5 范围内的单个字符。它并不意味着“当容量在 0 到 5 的范围内时”,使用类似 [20-25] 的写法不会匹配 20 到 25 范围内的容量。请参阅此处了解 udev 规则可用的模式匹配。
  • 请事先测试要运行的命令,以确保其有效。例如,/usr/bin/systemctl hibernate 可能会返回错误:“Call to Hibernate failed: Not enough swap space for hibernation”。

此规则会在条件满足时重复执行。因此,从低电量导致的休眠恢复时,电脑会直接再次休眠。有些笔记本电脑在低于一定电量时无法启动,因此可以相应地调整规则。

如果您有多个电池或者正在使用电池供电的外设,该规则可能会被另一个电池的放电意外触发;可以通过获取另一个属性/值对并将其添加到专门匹配主电池的 udev 规则中来解决,例如 model_name。可以通过检查 /sys/class/power_supply/nameOfMainBattery/attributesAndOtherDirectories 或运行 udevadm monitor --property 并等待电池事件来获取此类新属性/值对。

电池电量可能会跳变而非连续放电,因此使用了一个匹配 0 到 5 所有容量的 udev 字符串匹配模式。

若要关机而非休眠,请使用 /usr/bin/systemctl poweroff。可以使用 -i 标志来忽略关机抑制,请参阅 systemctl(1) § OPTIONS。可以添加其他规则,根据电源状态和/或容量执行不同操作。

如果您的系统没有 ACPI 事件或事件缺失,请定期运行以下使用 acpi 的脚本:

#!/bin/sh
acpi -b | awk -F'[,:%]' '{print $2, $3}' | {
	read -r status capacity

	if [ "$status" = Discharging -a "$capacity" -lt 5 ]; then
		logger "Critical battery threshold"
		systemctl hibernate
	fi
}

如果您有多个电池或者正在使用电池供电的外设,您应该通过添加 grep 来监视正确的电池,从而修改脚本的第二行,例如:acpi -b | grep "Battery 0" | awk -F'[,:%]' '{print $2, $3}' | {。将 Battery 0 替换为您通过 acpi -b 报告的所需电池。

注意 拔出电池或外设可能会破坏脚本,因为它可能导致剩余电池重命名。例如,当 Battery 0 被拔出时,Battery 1 会自动变为 Battery 0,依此类推。
测试事件

测试 udev 规则的一种方法是让它们在运行时创建一个文件。例如:

/etc/udev/rules.d/98-discharging.rules
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", RUN+="/usr/bin/touch /home/username/discharging"

当拔出笔记本充电器时,这会在 /home/用户名/discharging 处创建一个文件。您可以通过拔出电源并检查该文件是否存在来测试规则是否生效。有关更高级的 udev 规则测试,请参阅 Udev#加载前的规则测试

UPower

配置 UPower,例如:

/etc/UPower/UPower.conf
UsePercentageForPolicy=true

PercentageLow=20.0
PercentageCritical=10.0
PercentageAction=5.0

CriticalPowerAction=HybridSleep

之后启用启动 upower.service

待机和休眠

手动将操作系统挂起(至内存)或休眠(至磁盘)有时是优化电池寿命最有效的方式,具体取决于笔记本电脑的使用模式。

请参阅主文章 挂起与休眠

硬盘磁头归位问题

记录在此处

为了防止笔记本硬盘过于频繁地磁头归位,请按照 hdparm#电源管理配置 的描述设置不那么激进的电源管理。即使是默认值也可能过于激进。

唤醒触发器

唤醒源/事件/触发器会使系统从任何硬件节能状态中唤醒。要查找和配置这些内容,请参阅 唤醒触发器

硬件支持

屏幕亮度

请参阅 背光

触控板

要使触摸板正常工作,请参阅 libinput 页面。Touchpad Synaptics 是较旧的输入驱动程序,目前处于维护模式且不再更新。

触摸板完全无法识别

如果触摸板设备完全未被检测到或未显示为设备,一种可能的解决方案是使用以下一个或多个内核参数:

i8042.noloop i8042.nomux i8042.nopnp i8042.reset
Elantech

如果 Elantech 触摸板未被识别,并且您的 日志中出现以下行:

elan_i2c 5-0015: 5-0015 supply vcc not found, using dummy regulator

这与 psmouse 模块尝试为触摸板设备使用辅助总线而 elan_i2c 失败的问题有关。解决方法是强制其使用主总线。创建以下文件并重新加载 psmouse 模块或重启:

/etc/modprobe.d/psmouse.conf
options psmouse elantech_smbus=0

如果触摸板被检测到(可以使用 libinput 测试)但仍然无法工作,黑名单 elan_i2c 内核模块可能会有帮助,详见 [1]

/etc/modprobe.d/psmouse.conf
blacklist elan_i2c

指纹识别器

请参阅 Fingerprint-guifprintThinkFinger(适用于 ThinkPad)。

摄像头

请参阅 摄像头设置

硬盘防震保护

有许多不同厂商的笔记本电脑具备震动保护功能。由于制造商迄今为止拒绝支持所需软件组件的开源开发,Linux 对震动保护的支持在不同硬件实现之间差异很大。

目前,名为 HDAPSHpfall 的两个项目支持此类保护。HDAPS 适用于 IBM/Lenovo ThinkPad,hpfall 适用于 HP/Compaq 笔记本电脑。

混合显卡

笔记本制造商开发了涉及单机双显卡的新技术,以兼顾高性能和节能。这些笔记本通常默认使用 Intel 芯片进行显示,因此首先需要 Intel 显卡驱动。之后您可以选择方法来利用第二块显卡。

硬件视频加速

使用硬件解码和编码可以延长电池寿命。请参阅 视频加速

静音指示灯

在使用 Intel HD Audio 的笔记本电脑上,用户可能需要手动指定编解码器型号才能使音频静音指示灯正常工作。首先,检查您的笔记本是否使用 Intel HD Audio;如果是,以下命令将产生输出:

$ lsmod | grep snd_hda_intel

接下来,您需要找到您的音频编解码器型号:

$ grep Codec /proc/asound/card*/codec*

现在您需要在可用型号名称列表中找到它们的编解码器。如果您无法找到针对您特定型号的编解码器,可以通过反复尝试找到一个能用的。

为了告诉内核模块加载哪些特定型号的选项,请指定 model= 内核模块参数。例如:

/etc/modprobe.d/mute-led.conf
options snd_hda_intel model=model_name

要测试这是否有效,必须重新加载内核模块。可以通过重启来实现。

如果您需要测试大量编解码器,更有效的方法是避免重启。先使系统处于没有进程使用该内核模块的状态,然后使用新参数重新加载模块。这可以通过注销所有图形和控制台会话(如果正在使用显示管理器则需停止它)来完成。回到控制台重新登录后,运行以下命令:

# modprobe -r snd_hda_intel
# modprobe snd_hda_intel model=model_name

该模块现在将使用 model_name 中指定的编解码器。

网络时间同步

对于笔记本电脑,使用 Chrony 代替 NTPdOpenNTPDsystemd-timesyncd 通过网络同步时钟可能是一个好主意。Chrony 的设计即使在没有永久网络连接的系统(如笔记本电脑)上也能很好地工作,并且能够比标准 ntp 更快地进行时间同步。在虚拟机上运行时,Chrony 具有多项优势,例如更大的频率校正范围以帮助校正快速漂移的时钟,以及对时钟频率快速变化的更好响应。它还具有更小的内存占用且没有不必要的进程唤醒,从而提高了电源效率。

撰写笔记本页面

如果您想创建或修改任何笔记本电脑页面,请参阅 Help:Laptop page guidelines

参见

常规

  • CPU 频率调节是一项主要由笔记本使用的技术,它允许操作系统根据当前系统负载和/或电源方案向上或向下调节 CPU 频率。
  • 显示电源管理信号 (DPMS) 描述了如何在一段不活动时间后自动关闭笔记本屏幕(不仅仅是通过屏幕保护程序黑屏,而是完全关闭)。
  • 无线网络配置提供了关于设置无线连接的信息。
  • 键盘输入描述了媒体键的配置。
  • acpid 是一个用于分发 ACPI 事件的灵活且可扩展的守护进程。

特定笔记本电脑类型的页面

  • 请参阅 Category:Laptops 及其子分类,获取针对特定型号/供应商的页面。
  • ThinkPad 的电池调整可以在 TLPtp_smapi 文章中找到。
  • 请参阅 ASUS Linux 获取为新款 ROG 和 TUF 笔记本电脑设计的一套工具。

外部资源

© . 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.