刚从 MacBook 13-inch 2016 换成 ThinkPad X1C 2019. 刷入 ArchLinux, 记录下针对 X1C 的CPU性能, 电源管理, 风扇调速配置.

CPU frequency scaling

参考: ArchLinux wiki: CPU frequency scaling, CPU优化建议使用cpupower设置CPU Performance模式

使用 cpupower 控制 cpu scaling

# 调整cpufreq的governor
sudo cpupower frequency-set -g performance # performance模式
sudo cpupower frequency-set -g powersave # powersave模式

Power Management

参考: ArchLinux wiki: Power Management, ThinkWiki: How to reduce power consumption

ArchLinux wiki: tpacpi-bat, ThinkWiki: Tpacpi-bat

首先安装tlp (Linux 高级电源管理功能)

再安装针对ThinkPad的 tpacpi-bat ( tp_smapi 在X1C上不起作用, 使用 tpacpi-bat 替代)

手动设置充电阈值:

tpacpi-bat -v -s startThreshold 0 40
tpacpi-bat -v -s stopThreshold 0 80

Fan speed control

根据 ArchLinux wiki: Fan speed control, Linux 常常使用 NBFC 控制风扇
由于我是ThinkPad, 有更简洁的 thinkfan 来控制风扇.

参考: ArchLinux wiki: thinkfan, ThinkFan项目主页

开始配置前最好先查看manpage: man thinkfan, man thinkfan.conf

需要修改配置文件/etc/thinkfan.conf, 示例配置在 GitHub: thinkfan/examples/ 和系统的 /usr/share/doc/thinkfan/examples/thinkfan.yaml 注意新版使用的是 yaml 语法, 不要使用旧版配置.

根据 man thinkfan.conf , ThinkFan 可以从 hwmon, thinkpad_acpi, NVML, atasmart 驱动程序获取温度信息. 我的 X1C 主要使用 hwmon 和 thinkpad_acpi.

查看哪些hwmon可以使用:

find /sys/ -name 'temp*_input*'

查到的路径有4种, 类似于:

/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/temp6_input
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp2_input
/sys/devices/pci0000:00/0000:00:1d.0/0000:03:00.0/hwmon/hwmon1/temp1_input
/sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input

查看各hwmon目录下的name文件得知:
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon4/ 是 thinkpad_acpi 附带的hwmon,
/sys/devices/platform/coretemp.0/hwmon/hwmon6/ 是coretemp (CPU核心温度*)
/sys/devices/pci0000:00/0000:00:1d.0/0000:03:00.0/hwmon/hwmon1/ 是nvme硬盘
/sys/devices/virtual/thermal/thermal_zone0/hwmon0/ acpitz (好像temp1是CPU插槽, temp4是电池*, 不过我没有temp4)
/sys/devices/virtual/thermal/thermal_zone6/hwmon7/iwlwifi (无线网卡*)

风扇速度控制就使用 thinkpad_acpi 接口了:

cat /proc/acpi/ibm/fan
status:     enabled
speed:      0
level:      auto
commands:   level <level> (<level> is 0-7, auto, disengaged, full-speed)
commands:   enable, disable
commands:   watchdog <timeout> (<timeout> is 0 (off), 1-120 (seconds))

最终配置如下:

sensors:
  - hwmon: /sys/devices/virtual/thermal/
    name: iwlwifi_1 # 根据name文件的值搜索
    indices: [1]
    optional: true # 网卡温度在启动一段时间后才能读取, 设成可选
  - hwmon: /sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input # acpitz
  - hwmon: /sys/devices/platform/coretemp.0/hwmon
    indices: [1, 2, 3, 4, 5, 6, 7] # CPU sensors
  - hwmon: /sys/devices/pci0000:00/0000:00:1d.0/0000:03:00.0/hwmon/hwmon1/temp1_input # nvme

fans:
  - tpacpi: /proc/acpi/ibm/fan
levels:
  - [0, 0, 35]
  - [1, 30, 40]
  - [2, 35, 45]
  - [3, 40, 50]
  - [4, 45, 55]
  - [5, 50, 60]
  - [6, 55, 65]
  - [7, 60, 70]
  - ["level disengaged", 65, 255] # 最大速度
  #- [0, 0, 50]
  #- ["level auto", 45, 75]
  #- ["level disengaged", 70, 255]

不知为什么, 我安装的 ThinkFan optional: true不生效. 每次启动, 服务都会挂掉. 所以使用 Github issues 中的方法, 添加systemd附加配置*

vim /etc/systemd/system/thinkfan.service.d/10-restart-on-failure.conf
[Unit]
StartLimitIntervalSec=60
StartLimitBurst=3

[Service]
Restart=on-failure
RestartSec=10

到2019年9月为止我已经有两个OpenWRT路由器了, 这篇文章用来记录配置方法和各种坑.

导入公钥实现免密码ssh

OpenWRT使用了dropbear作为ssh服务器
导入的公钥文件应存放在/etc/dropbear/
在本机执行以下命令:

cat ~/.ssh/id_rsa.pub | ssh <user>@<serveraddress> "cat >> /etc/dropbear/authorized_keys"

Continue reading