Archlinux on ThinkPad L430

计算机 arch linux systemd XFCE 优化 笔记本 软件 电源管理



	甲、前言

	出于特殊需求,花将近3000买了这个 ThinkPad L430。

	一、配置


CPU:Intel Pentium B980 @ 2.40GHz  #Sandy Bridge 的,主频还可以

显卡:HD 3000 核显 + Quadro NVS 5400M 独显  #奇葩的型号,好像是啥绘图卡,感觉和610M水准差不多

内存:2GB  #跑Win7HB和Linux足矣

硬盘:320GB HDD

14吋屏幕、DVD刻录机、有摄像头、没指纹识别、预装Win7HB


	二、吐槽


		指纹识别呢?我一直觉得 ThinkPad 这个很厉害,结果发现便宜货上没有……

		第一天就发现光驱是坏的,送回去修了,略郁闷。

		Win7 预装了一坨联想的东西,还有啥QQ电脑管家,去死吧……


	 


	乙、正文

	一、安装

	没啥特别的,按照 Archwiki 走即可。无线有线都能用。

	注意要是之前在 Windows 用 Fn+F5 关闭了无线,必须在 Windows 打开才能用。后面还会提到这个问题。

	 

	二、硬件驱动

	显卡

	还是用 bumblebee + bbswitch 处理 NVIDIA + Intel 的双显卡问题,资料自己看 wiki 吧。

	至于双显示器,我测试了是没问题的。禁用N卡的情况下无法用 nvidia-xconfig 配置 TwinView,而Xfce自带那个又特别简陋。推荐使用 arandr 配置,挺好使的:



	触摸板

	很普通的型号,安装 xf86-input-synaptics 即可。

	键盘


		音量调节、静音在 Xfce 下工作正常。

Fn+F3 大概是锁屏,我没用过,Xfce 貌似没锁屏的工具。

Fn+F4 是休眠键,Xfce 下无需配置即可使用。可在电源管理器中配置具体行为。

Fn+F5 是无线开关,可以用于软件禁用无线。相关的一个 bug 见上文。

Fn+F6/7 是屏幕亮度调节,Xfce 下无需配置即可正常使用。

Fn+F8 是显示器切换,Xfce 下使用会弹出一个简单的显示设置,正常。

		大写锁定没有屏显,不过自己配置一下应该也不难。

		剩下的Fn组合,我准备随便绑定些特殊功能


	指点杆(小红点)

	参考:http://crunchbang.org/forums/viewtopic.php?pid=284647#p284647

	指点杆有点小问题,不配置的话用不了。

	创建 /etc/modprobe.d/trackpoint-elantech.conf,内容:

options psmouse proto=bare


	重新载入 psmouse 模块或重启即可。

	无线网卡

	开箱即用,Fn+F5 可以软件关闭 wifi。

	但有个bug:Windows 下禁用 wifi 后, Linux 下无法唤醒,rfkill 显示已通过硬件开关禁用。目前没找到解决方案,所以轻易不要卸载预装的 Windows。

	我在英文论坛发了个帖子,至今无回复,求挽尊……

	以太网卡

	型号是 Realtek RTL8111/8168B。内核里有兼容的 r8169 的驱动。但 wiki 建议用Realtek官方提供的 r8168 驱动,仓库里有。

	摄像头

	开箱即用,可以安装 cheese 自己试试,打开 cheese 后摄像头旁就会有个灯亮,表示正常工作。

	 

	三、电源管理

	Linux 下电源管理工具繁多,功能多有重叠。而 Arch 刚全面切换 systemd,很多文档跟不上,只能摸索着走,让人头大。

	ACPI 事件处理

	概览


		所谓 ACPI 事件,就是使用电源键、开合笔记本盖、切换AC电源等和电源有关的事件。

systemd 能处理部分 ACPI 事件,包括按下开机键、使用睡眠/待机键、开合笔记本盖等。但不能处理电池、电源事件。

acpid 能处理各种 ACPI 事件,以前 sysvinit 时代几乎是必装的。

		主流桌面环境(Gnome/KDE/Xfce等)有自己的电源管理,能处理各种 ACPI 事件、监视电池状态等。


	软件选择

	systemd 的处理机制对于 tty 用户一般足用,反正命令行下貌似也不用考虑屏幕亮度。电池/电源切换时,使用其他工具改变性能策略即可,详见后文。

	acpid 删除了貌似也没啥事儿,而且说是会和 systemd 啥的冲突,就别装了。

	我是“普通用户”,没理由不选择桌面环境自带的 GUI 的电源管理器。据 Archwiki,GNOME、KDE 的电源管理会在运行时自动取代 systemd 的,不会
	冲突。但我用的是 Xfce,需要考虑冲突问题。

	解决 Xfce 电源管理和 systemd 的冲突

参考:ArchWiki

	用 /etc/systemd/logind.conf 配置 systemd 的 ACPI 事件处理方式:

#HandlePowerKey=poweroff        #按下开机键或等价的组合键——关机
#HandleSuspendKey=suspend       #按下待机键或等价的组合键——待机
#HandleHibernateKey=hibernate   #按下休眠键或等价的组合键——休眠
#HandleLidSwitch=suspend        #合上笔记本盖——待机
#PowerKeyIgnoreInhibited=no     #最后四行:“放权”后是否仍处理该事件
#SuspendKeyIgnoreInhibited=no
#HibernateKeyIgnoreInhibited=no
#LidSwitchIgnoreInhibited=yes


	把四种事件的处理方式都设置为 ignore,这样 systemd 就不会处理相关事件了,也就不会与桌面环境自带的电源管理器冲突。

	但我采取了另一种方法。Archwiki 上提到 GNOME、KDE 会通过发送 inhibited 指令暂时关闭 systemd 的处理机制,我就 man 了一把,发现了 systemd-inhibit 这个命令,可以让 systemd 在运行某个程序时不处理 ACPI 事件。

	在 Xfce 启动项中创建新启动项,命令为:

systemd-inhibit xfce4-power-manager --no-daemon

	禁用自带“电源管理器”启动项即可。(简单起见,也可以在 .xinitrc 直接用 exec systemd-inhibit xfce4-session 启动 Xfce。)


	性能策略

	概览


		所谓“性能策略”,就是在切换电池/电源时,自动切换低功耗/高性能模式。具体调节内容包括:CPU频率、硬盘转速、屏幕亮度等等。处理的工具也有很多,且功能多有重叠。

		首先,内核自身就能完成一部分。最新内核的默认CPU性能策略是 ondmand,即根据CPU使用率动态降频。另外还有 laptop mode 的设置,可以减少系统的硬盘操作。

		Arch 源里提供了 Laptop Mode Tools 这个工具。可以在开机或电源切换时自动完成CPU、硬盘、光驱、网卡等设备的性能策略的切换。是个大综合工具。

		AUR 里的 TLP 和 Laptop Mode Tools 功能差不多,安装一个即可。

		桌面环境的电源管理也能处理一部分,包括空闲时降低屏幕亮度、关闭显示屏等。


	解决方案

	Laptop Mode Tools 配置好麻烦,而且还依赖 acpid,所以弃了改用 TLP。TLP 的配置文件(/etc/default/tlp)各项都挺好懂的,绝大多数配置用默认的即可。如果想设置无线设备节能策略,还需要安装 tlp-rdw,这样配置文件最后一部分就能起效了。具体参见 Archwiki。

	CPU性能策略让 TLP 切换即可,然后留一个 cpupower,方便手动调节。

	显示器嘛,让桌面环境处理挺好的。唯一的瑕疵是Xfce没锁屏工具。

	解决方案 —— 小心硬盘

	硬盘有个大坑,就是传说中的 Load_Cycle_Count 问题。据说到了几十万硬盘就会挂。我观察了一下,果然默认设置下 Linux 下这玩意儿增长的很快。

	物理特征是:过一段时间机器会变得好像一点声音都没有(其实是硬盘停转了),然后突然发出细微的“吱~”音,此时 Load_Cycle_Count 增长1下。

	虽然我觉得没声音的那会儿感觉特棒,但为了硬盘寿命还是悠着点儿吧。解决方法是调节硬盘 APM 级别,这个也可以由 TLP 完成。经我的实验,我把 TLP 配置里的硬盘 APM 级别配置为:

DISK_APM_LEVEL_ON_AC="230"
DISK_APM_LEVEL_ON_BAT="115"


	其中,数值 1~127 会触发硬盘自动停转,127 以上则不会(但貌似 Load_Cycle_Count 还是会增长)。电池供电时用 115 其实还是增长得比较快,但考虑到一般还是用 AC,所以不会有太大风险吧,算是节能与寿命的折中。

	BTW,知道 Windows 下为何没这个 Load_Cycle_Count 的问题吗?因为 Windows 貌似会一直读硬盘,根本不会触发节能……
	 

	待机与休眠

	待机/休眠应该算是开箱即用的了,Network Manager 会自动断线和重连。待机问题不大,但休眠还是有不少问题,我遇到的有:


		睡不过去,只能强关 —— 偶尔

		醒不过来,那就扔了副本直接启动吧 —— 偶尔

		醒过来了是黑屏,必须切 tty 再切回来才行 —— 每次都是

		醒来后 TLP 状态不对 —— 每次都是


	算的上解决的只有最后一个。方法是,建立一个睡眠唤醒时执行的重置TLP的脚本,放到 /lib/systemd/system-sleep/tlp.sh ,内容为:

#!/bin/sh
case $1 in
  post)
    /usr/sbin/tlp start
    ;;
esac
exit 0

	= = 唉,头两个问题摸不着规律,管不了。第三个不知从何下手。

	 

	丙、后记

	诶,过完春节才想起来我还有个 Blog…… 本文补完。

	现在发觉2G内存确实有点小,虽然一般看个网页用不完,但要同时打 Minecraft 同时看网页教程……

	目前这个本本运行得还是不错滴。如果成功无故障运行三个月,我就去亚马逊给评一下。

__RAW_HTML__

Page created on 2013-01-29