Linux 作为我的主力机已经有快半年时间了,从 Manjaro 到 Archlinux ,从 dwm 到 kde-kwin-tiling,从 Neovim + CoC 到 VSCode-Neovim 插件,充分说明了什么叫生命不息,折腾不止,渐渐地我已经完全适应了 Linux 下的生活,也构建起来一套自己的工作流,除了玩游戏,很少再打开磁盘上的 window。
尽管 Linux 的高自定义度非常对我胃口,但对于我这种较新的机器(Lenovo Legion R9000P)来说,硬件驱动始终是个硬伤,就比如最近在 Linux-lts、nvidia-lts 更新到 5.15.24 之后,我的电脑才能正常地调节亮度,此前我一直用的是自己写的蹩脚 xrandr 脚本,依靠改变 Color Channel 来对亮度进行伪调节。
大概也是因为驱动的问题,在我的机器上,Linux 的耗电速度比 windows 要快,还好有 tlp 能救一把,配合 kde plasma 自带的电源管理,我现在 Linux 的耗电速度已经基本和 windows 持平了,这里就记录一下我的 tlp 做了哪些配置。
TLP 及其他省电工具的安装
sudo pacman -S tlp
sudo pacman -S tlp-rdw // tlp 无线设备省电
sudo pacman -S x86_energy_perf_policy //CPU性能与节能策略
sudo pacman -S ethtool //可用于禁用 Linux 的网络唤醒
此处夸一夸 Arch 系的包管理,确实非常香,安装各种东西都非常方便
如果你想要 tlp-rdw 正常工作的话,还需要安装 NetworkManager,一般来说都是安装过的,很多桌面环境都是用 NetworkManager 做为默认的网络管理,即使是只用命令行的猛男,在安装 Arch Linux 时,也一般会用它来连接网络,如果你不用 NetworkManager,需要自行编辑 tlp.service,注释掉里面的 NetworkManager.service
sudo pacman -S networkmanager
TLP 开机启动
systemctl enable tlp
如果安装了 tlp-rdw 无线设备管理的话还需要(确保安装了 networkmanager):
systemctl enable NetworkManager-dispatcher
同时屏蔽 systemd 服务 systemd-rfkill.service
以及 套接字 systemd-rfkill.socket
来防止冲突:
systemctl mask systemd-rfkill.service
systemctl mask systemd-rfkill.socket
reboot 之后,tlp 就启动了
TLP 及其他配置
禁用网络唤醒功能
后来才发现原来 tlp 默认就帮你把网络唤醒给关了= =
可以在 WOL_DISABLE=Y
那里直接设置,就不需要后面的那些步骤了
禁用网络唤醒功能后,就无法通过网络远程开机,个人电脑用不到,所以我这里就直接关掉了
使用 networkmanager 查看本地网络设备:
nmcli device
我这里的输出:
DEVICE TYPE STATE CONNECTION
wlp4s0 wifi 已连接 *****
p2p-dev-wlp4s0 wifi-p2p 已断开 --
eno1 ethernet 不可用 --
lo loopback 未托管 --
可以看到我的物理网卡名字叫 eno1,别的机器可能是 eth0 啥的,使用 ethtool 查看网络唤醒功能的状态
sudo ethtool eno1 | grep -i "wake"
输出如下:
Supports Wake-on: pumbg
Wake-on: d
上面一行显示了网卡支持的唤醒模式,下一行则显示了当前网卡的唤醒模式,含义如下:
- d -- 禁用
- p -- 物理活动唤醒
- u -- 单播消息唤醒
- m -- 多播(组播)消息唤醒
- b -- 广播消息唤醒
- a -- ARP 唤醒
- g -- 特定数据包 magic packet 唤醒
- s -- 设有密码的特定数据包 magic packet 唤醒
要禁用网络唤醒,将网卡模式改为 d 即可:
ethtool -s eno1 wol d
修改/etc/tlp.conf
默认电源模式设为 BAT,没有接通电源时采用 BAT 电源模式
TLP_DEFAULT_MODE=BAT
默认持续模式设为 0,根据是否接通电源来决定电源模式,若设为 1 则总是使用 TLP_DEFAULT_MODE
TLP_PERSISTENT_DEFAULT=0
CPU 性能模式设置
CPU_SCALING_GOVERNOR_ON_AC=performance CPU_SCALING_GOVERNOR_ON_BAT=schedutil
接通电源时,性能优先,无电源时使用 schedutil 模式 (似乎是近几年出的省电又顺畅的调度模式,推荐),另外也有 ondemand(按需,推荐),powersave(节能),conservative(保守供电) 可选
CPU 相对节能模式
CPU_ENERGY_PERF_POLICY_ON_AC=performance CPU_ENERGY_PERF_POLICY_ON_BAT=power
接通电源时使用性能模式,否则省电模式,另外也有 balance_performance 和 balance_power 可选
硬盘设置
DISK_DEVICES="nvme0n1"
使用
sudo fdisk -l
查看你的硬盘名称,向我只有一块 NVMe 的固态硬盘就只需要写一个"nvme0n1",如果你还有一块 SATA 固态,那么就应该写 "nvme0n1 sda",以 fdisk 指令的结果为准硬盘空闲速度设置
DISK_APM_LEVEL_ON_AC="254" DISK_APM_LEVEL_ON_BAT="128"
设置范围是[1,255],[1,127]会使硬盘降速,所以电源模式设置为 128 就好,注意如果你有两块硬盘,就要分别对每块硬盘设置,比如写成"254 254"和"254 128"
(*) 根据不同的硬件型号,有不同的可选项可设置
比如 Intel CPU() 就可以设置 CPU_HWP_ON_AC/BAT,SATA 模式的硬盘就可以设置 SATA_LINKPWR_AC/BAT,具体如何设置 /etc/tlp.conf 的备注部分都有写,因为我是锐龙 CPU,硬盘也不支持 SATA 模式,所以就不启用这些设置了
TLP 常用命令
最后再列举几个 TLP 常用的命令
sudo tlp start //启动 tlp 服务
sudo tlp-stat -s //查看 tlp 运行状态
sudo tlp-stat -c //查看 tlp 设置
sudo tlp-stat -b //查看电池状态
sudo tlp-stat -t //查看风扇转速,CPU温度
最后附上一张 TLP 效果图
