前两天自用的 Arch Linux 系统出了点小问题,索性重新搞了一下,由 i686 迁移到 x86-64 平台。原先一直以为 64 位系统是高不可攀的贵族产品,后来才知道原来 64 位处理器最早是由 AMD 1999 年设计,几年前的 Intel Core Duo 早已经支持 64 位系统,只是软件产品和内存还跟不上,所以多数应用还是 32 位为主。

OS 版本用的是 Arch Linux 2010.05,在 mirrors.sohu.com 上下载 支持 32 位及 64 位架构的 Dual映像,用 UltraISO 刻录硬盘镜像到 U 盘上。基本的安装过程不再赘述, ArchWiki Beginner’s Guide 讲的明明白白。唯一注意的是分区格式化的时候需要格外注意,不要把自己原先的系统搞丢我曾经有过惨痛的教训,不过幸好那次做了数据备份。不过 100 G 的东西备份还原也是件耗时耗力的工作啊 ^)^。

基本系统装好后,装个 Desktop Environment,然后再做一下系统美化和针对小黑的特殊配置。过程还是挺繁琐的,因此写下来做个备忘。先上张图,KDE 4.6 我承认我越来越浮云了……

最新的 Xorg 已经变得十分人性化,再也不需要手工配置恼人的 xorg.conf ,最新的 Linux 内核驱动也能自动识别鼠标和键盘,不会再出现进入图形界面却无法使用鼠标键盘的窘境至少两年前是这样的。有个东西叫做 HAL,最近又出来个 evdev。总体而言 Linux 的驱动程序还是比较混乱的,hal、evdev、mesa、xorg、xf86、wayland、alsa、oss、 pulseaudio 等等,令人头大。

字体用的是 AUR 里面打过 Ubuntu 补丁的 cairo-ubuntu、libxft-cairo、 freetyp2-ubuntu 以及 WenQuanYi Micro Hei,加上次像素优化,效果还是不错,上图就是最好的说明。

网络客户端抛弃了废柴的 KDE 的 networkmanager,采用了 wicd,可以根据地点自动链接不同的无线网,而且非常稳定,从不崩溃。安装过程可以参考 ArchWiki Wicd。关于蓝牙的配置,我用的是 bluez 和 bluedevel,具体可以参考这里

剩下的都是小黑的特别配置。这方面的 Wiki 配置零零总总,并没有统一的解决方案。 ThinkWiki 是一个很好的去处,基本可以找到 ThinkPad 各个型号再主流 Linux 发行版上的安装配置。不过由此也看出开源软件的弊端顶级的 ThinkPad 支持尚且如此繁琐,可见 Linux 真正要普及还有很长的路要走。废话少说,还是回到 x201i 上的设置吧。ThinkPad 的设置主要有以下几处:

  • 电池电源控制
  • trackpoint 小红点
  • Active Protection System,硬盘保护系统
  • 风扇控制

电池的电源控制主要是用来延长电池寿命的。电池的充电次数是有限的,因此减少电池的冲放电次数是演唱电池寿命的关键。tpsmapi 是针对 ThinkPad 的一组内核模块,可以通过 AUR( yaourt -S tp_smapi )安装。对电源的保护主要是设置电源的冲放电阀值。比如我们设置 [start_charge=40, end_charge=90] ,意思就是当电池的电量低于 40% 的时候才开始充电,而一旦电量到达 90% 的时候就停止充电。举例说明,当我们野外需要频繁的野外工作时,如果不设置电池的充放电阀值 [start_charge, end_charge] ,那么我们的电量可能是这样的: 95(battery, discharge)–>80(AC power, charge)–>100(battery, discharge)–>70(AC power, charge)–>93(battery, discharge)–>70,而设置 [start_charge = 40, end_charge = 90] 后我们的电量变化就是这样的: 95(battery, discharge)–>80(AC power, but not charge)–>80(battery, discharge)–>50(AC power, but still not charge since 50 > 40)–>50(battery, discharge)–>27(If AC power now, charge, since 27 >= 40, charge until battery = 90) 。看明白了吗?估计没有。反正我也有点晕。ArchWiki 上提供了一个封装的脚本 set_bat_thresh

#!/bin/bash
#
# Bash script for setting the battery thresholds on ThinkPads using the tp_smapi interface.
# Written by Ignas Anikevicius (20/03/2010)

#HELP TEXT
if [ "x$1" == "x--help" -o "x$1" == "x-h" ]
then
  echo -e "
  WARNING!!! This script needs to be run as root in order to have effect!!!

  Possible options are:
    set_bat_thresh [BAT_N] [[LOWER] [UPPER]][--reset][-r]

    [BAT_N] number of the battery (can be either 0 or 1).

    LOWER - lower threshold.
    UPPER - upper threshold .
    [--reset] or [-r] sets the default thresholds.

  execute to see this text:
    set_bat_thresh [--help][-h]
"
  exit 0
fi

if [ ! -d /sys/devices/platform/smapi ]; then
  echo -e "\nSMAPI interface is NOT installed.\nPlease load the module.\n"
  exit 0; fi

#SETTING THRESHOLD VALUES
if [ "x$2" == "x--reset" -o "x$2" == "x-r" ]
then
  LOWER=96
  UPPER=100
else
  LOWER=$2
  UPPER=$3
fi

#VALUE TESTING
if [ ${LOWER} -ge ${UPPER} ]; then
  echo -e "\n  Please provide proper thresholds!!!  \n"
  exit 0
fi

#BATTERY NUMBER
BAT_N=$1
LOWER_F="/sys/devices/platform/smapi/BAT${BAT_N}/start_charge_thresh"
UPPER_F="/sys/devices/platform/smapi/BAT${BAT_N}/stop_charge_thresh"

#SETTING THE THRESHOLDS
echo ${LOWER} > ${LOWER_F}
echo ${UPPER} > ${UPPER_F}

#ECHOING THE STUFF
echo -e "\nSetting battery thresholds for Battery ${BAT_N}:
  Threshold for charging to start: ${LOWER}
  Threshold for charging to stop: ${UPPER}
"
exit 0;

执行用:

set_bat_thresh 0 start_charge end_charge

至于 trackpoint 小红点,AUR里面有一个 trackpoint 脚本,用 yaourt -S trackpoint 安装,安装完毕将 trackpoint 加到 /etc/rc.conf 的 DAEMONS 里面。 /etc/conf.d/trackpoint 里面可以更改一些设置如:

  • SPEED – 小红点光标移动速度。
  • SENSITIVITY – 小红点敏感度。
  • PRESS_TO_SELECT – 小红点单击功能。

中键模拟用如下的脚本设置下(我也忘了是从哪里找到的了):

xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 8 1 xinput
set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 8 2

硬盘保护 (Active Protection System) 用的是 AUR 里面的 HDAPS,参看 ArchWiki, Applet 用的是 thinkhdaps,根据需要改下 /etc/conf.d/hdapsd 里面的设置,效果还不错,抱着笔记本在床上看电影的时候视频会一卡一卡的。

风扇控制貌似不太不要,而且设置不好会影响散热效果,降低笔记本的寿命。这个功能主要目的貌似是使笔记本更安静些。用的软件包是 AUR 里面的 tpfand 和 tpfan-admin, tpfand.conf 是 copy 来的,参考这里。用了之后好像也没啥特别的效果。

最后 show 下 /etc/rc.conf 里面的设置,日后重装的时候也好有个参考:

#
# /etc/rc.conf - Main Configuration for Arch Linux
#

# -----------------------------------------------------------------
# LOCALIZATION
# -----------------------------------------------------------------
#
# LOCALE: available languages can be listed with the 'locale -a' command
# HARDWARECLOCK: set to "UTC" or "localtime", any other value will result
#   in the hardware clock being left untouched (useful for virtualization)
# TIMEZONE: timezones are found in /usr/share/zoneinfo
# KEYMAP: keymaps are found in /usr/share/kbd/keymaps
# CONSOLEFONT: found in /usr/share/kbd/consolefonts (only needed for non-US)
# CONSOLEMAP: found in /usr/share/kbd/consoletrans
# USECOLOR: use ANSI color sequences in startup messages
#
LOCALE="en_US.UTF-8"
HARDWARECLOCK="localtime"
TIMEZONE="Asia/Shanghai"
KEYMAP="us"
CONSOLEFONT=
CONSOLEMAP=
USECOLOR="yes"

# -----------------------------------------------------------------
# HARDWARE
# -----------------------------------------------------------------
#
# MOD_AUTOLOAD: Allow autoloading of modules at boot and when needed
# MOD_BLACKLIST: Prevent udev from loading these modules
# MODULES: Modules to load at boot-up. Prefix with a ! to blacklist.
#
# NOTE: Use of 'MOD_BLACKLIST' is deprecated. Please use ! in the MODULES array.
#
MOD_AUTOLOAD="yes"
#MOD_BLACKLIST=() #deprecated
MODULES=(uinput tp_smapi thinkpad_acpi thinkpad_ec vboxdrv)

# Scan for LVM volume groups at startup, required if you use LVM
USELVM="no"

# -----------------------------------------------------------------
# NETWORKING
# -----------------------------------------------------------------
#
# HOSTNAME: Hostname of machine. Should also be put in /etc/hosts
#
HOSTNAME="lox-pad"

# Use 'ifconfig -a' or 'ls /sys/class/net/' to see all available interfaces.
#
# Interfaces to start at boot-up (in this order)
# Declare each interface then list in INTERFACES
#   - prefix an entry in INTERFACES with a ! to disable it
#   - no hyphens in your interface names - Bash doesn't like it
#
# DHCP:     Set your interface to "dhcp" (eth0="dhcp")
# Wireless: See network profiles below
#

#Static IP example
#eth0="eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255"
eth0="dhcp"
INTERFACES=(!eth0)

# Routes to start at boot-up (in this order)
# Declare each route then list in ROUTES
#   - prefix an entry in ROUTES with a ! to disable it
#
gateway="default gw 192.168.0.1"
ROUTES=(!gateway)

# Enable these network profiles at boot-up.  These are only useful
# if you happen to need multiple network configurations (ie, laptop users)
#   - set to 'menu' to present a menu during boot-up (dialog package required)
#   - prefix an entry with a ! to disable it
#
# Network profiles are found in /etc/network.d
#
# This now requires the netcfg package
#
#NETWORKS=(main)

# -----------------------------------------------------------------
# DAEMONS
# -----------------------------------------------------------------
#
# Daemons to start at boot-up (in this order)
#   - prefix a daemon with a ! to disable it
#   - prefix a daemon with a @ to start it up in the background
#
DAEMONS=(@syslog-ng @dbus !hal !network !netfs @acpid @tpfand @crond @hdapsd @laptop-mode @wicd @kdm bluetooth @trackpoint)

大概就这么多吧。都是些琐碎的东西,能用就好了。想想 Linux 的东西变动如此之快,有些东西是真的不必深究的。比如关于中键模拟有上面的方案,也有改 xorg.conf 的方案。比如 hal 这个东西,再比如 X Window 和未来的 Wayland,比如 ext4 和 btrfs。想想自己走的也有些偏了,过于追求工具化的东西,倒是忽略了最本质的知识,如体系结构,算法等等。这就比如户外旅行,总是想方设法装一辆拉风的自行车,却很少去骑车领略旅行的真谛。四年,四年前的我还只会开机关机,四年后的我折腾系统小打小闹颇有一套,最本质的计算机基础却一塌糊涂。希望自己的折腾之旅到此位置吧。接下来的关键词是,Lisp、 TCP/IP、Hadoop。