刚从 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

挂掉的梯子

今天下午突然谷歌上不了了, 我以为是家里路由器上的 V2Ray 挂掉了, 但是手机上的客户端竟然也不能用了, 问题一定出在服务端. 使用 SSH 去服务器查看情况, 诡异的是服务器很容易就连上了.

原因

查看 /var/log/v2ray 下的日志 , 没有任何问题.
systemctl status v2ray, 发现服务已经停掉.

● v2ray.service - V2Ray Service
   Loaded: loaded (/etc/systemd/system/v2ray.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 六 2020-02-08 09:01:13 EST; 25min ago
  Process: 29457 ExecStart=/usr/bin/v2ray/v2ray -config /etc/v2ray/config.json (code=exited, status=2)
 Main PID: 29457 (code=exited, status=2)

2月 08 09:01:12 172.93.44.115.16clouds.com v2ray[29457]: /go/src/runtime/proc.go:543 +0x72 fp=0x7ffff600c1b0 sp=0x7ffff600c158 pc=0x430a62
2月 08 09:01:12 172.93.44.115.16clouds.com v2ray[29457]: runtime.rt0_go(0x7ffff600c1e8, 0x3, 0x7ffff600c1e8, 0x0, 0x0, 0x3, 0x7ffff600cf67, 0x7ffff600cf7c, 0x7ffff600cf84, 0x0, ...)
2月 08 09:01:12 172.93.44.115.16clouds.com v2ray[29457]: /go/src/runtime/asm_amd64.s:214 +0x125 fp=0x7ffff600c1b8 sp=0x7ffff600c1b0 pc=0x459065
2月 08 09:01:12 172.93.44.115.16clouds.com systemd[1]: v2ray.service failed.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: v2ray.service holdoff time over, scheduling restart.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: Stopped V2Ray Service.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: start request repeated too quickly for v2ray.service
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: Failed to start V2Ray Service.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: Unit v2ray.service entered failed state.
2月 08 09:01:13 172.93.44.115.16clouds.com systemd[1]: v2ray.service failed.

看起来像是内存错误, 这小破服务器只有512M内存. free 查看内存, 果然内存不足. 使用 top 命令, 发现 yum-cron 自动更新吃掉了所有内存.

systemctl stop yum-cron 发现没用, 进程还在. killall yum-cron 发现这台服务器竟然没有 killall 命令. 我只好把 yum-cron 服务 disable 掉然后重启服务器. 问题解决.

彩蛋

想看一下 CentOS 的版本号, 发现装不了 neofetch, 怎么办?

yum install yum-plugin-copr
yum copr enable konimex/neofetch
yum install neofetch

哈哈, 能用了!
此处有截屏

使用腾讯云可以很方便的申请HTTPS证书. 只需要一些简单的步骤就可以开启全站HTTPS

开启全站https: nginx部分

从腾讯云下载申请的证书, 解压后上传到服务器

scp ~/Downloads/superbear.me/Nginx/* root@superbear.me:/etc/nginx/

编辑vim /etc/nginx/nginx.conf, 在http中加入

Continue reading

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

导入公钥实现免密码ssh

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

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

Continue reading