笔记本上的 Linux

来源:互联网 发布:武林外传人物 知乎 编辑:程序博客网 时间:2024/04/24 03:49

在过去的几年中,Linux走出了机房,进入了桌面系统甚至是笔记本系统中。就像服务器系统中的Linux,PC系统中的Linux同样提供了速度和可靠性,以及大量功能强大久经考验的应用程序。桌面系统中使用Linux已经相当平常,但是在笔记本中使用Linux还不是那么常见。大多数Linux发行版并没有为移动用户提供所需要的有限电力和无线网络支持。

这篇文章为移动用户提供了使用Linux需要的十件武器。它们包括了HOW-TO、技巧和配置方案来帮助你建立一个可以依赖的移动Linux环境。【1】。是时候拜托束缚了!

如果你的桌面系统中运行Linux,你应该清楚它运转飞快、可靠,能轻松解决工作。但是,这种性能所需要的代价是:电力。

在桌面系统中,电力从不会成为一个问题:你的桌面系统或 disk-side 电脑——装着高速处理器,多功能主板和各种外设——都会连接到墙上的电源,而你的液晶显示器和其它设备都有各自的电源接口。电力从来不会出现短缺。

但是,在笔记本中,电力资源非常宝贵。有限的一点电能必须为所有部件所共享。事实上,如果尝试在一个靠电池供电的笔记本系统中执行一些复杂的工作,很可能会遇到电量方面的限制。

绝大多数 Linux 发行版的默认配置都是为具有无限制电力供应的系统设计的。因此,如果要在移动环境中使用Linux,你需要进行一些优化配置以利用现有的许多工具来管理并节约能源。

节约能源:apmd 服务管理
Linux的高级电源管理守护进程,apmd,从操作系统内部管理各种基本节点功能。例如,apmd能检测电源状态变化,启动、停止各种服务,并针对电源状态调用其它程序。要配置apmd你需要配置apmd守护进程自身以及apm配置脚本。

apmd的配置文件一般在 /etc/sysconfig/apmd,里面包含了apmd守护进程的各种基本配置信息。默认配置一般都没什么问题,所以一般而言你只需要修改很少量的地方就可以了。最重要的条目包括 POWER_SERVICES、LOWPOWER_SERVICES 和 CPUFREQ。

*POWER_SERVICES 列举了所有当电源切换到电池供电的时候停止的服务。(这些服务会当笔记本重新连接到交流电源的时候再次启动。)默认情况下这个列表很短,因此你应该将包括 crond、autofs、cups、pcmcia 和 syslog 等服务加入这个列表中。【2】

* LOWPOWER_SERVICES列表中的服务包括当电池电量降低到一个标准的时候停止的服务。

*CPUFREQ启用处理器频率调节功能。稍后会介绍关于处理器频率调节的更多信息。当你配置了处理器频率调节功能只好,你应该将这个选项设置成yes。

当你调节了这些选项之后,运行命令 service apmd restart 以加载新的设置。

下一处需要配置的是 apm 脚本。这个脚本一般保存在 /etc/sysconfig/apm-scripts/apmscript。从 /etc/rc.local 直接运行apmscripts是个不错的主意,因为这样可以让系统自动适应启动时的电池状态。这个脚本有几个小节,每个小节针对一个特定的电源管理信息。我们需要关注的是 resume 和 change 功能。

不过先不要编辑 apmscripts ——让我们先看看一些与电源管理相关的工具。

节约电能:CPU 频率调节

笔记本系统中最耗电的部件是CPU。为延长电池寿命,多数新CPU都支持频率调节(也称为时钟调节 clock modulation)以便当电池成为主要能源的时候降低自身运行速度。降低的幅度取决于不同的处理器。

CPUFreq 是一个提供时钟调节功能的Linux内核补丁(可以从http://brodo.de/cpufreq得到)。一些发行版默认包含这个功能,而另一些需要另外打补丁。
要检查CPUFreq是否已经被加入内核,输入这个命令:cat /proc/cupfreq。你应会看到类似这样的输出:

minimum CPU frequency  -  maximum CPU frequency  -  policy
CPU  0      1998345 kHz (100 %)  - 1998345 kHz (100 %)  -  performance

如果你看到全部两行输出,则说明CPUFreq已经加载入你的系统内核中。如果你看见第一行却没看见CPU信息则说明CPUFreq存在但是驱动没有正确加载。

你应该可以用modprobe命令从表格一中选择针对你的系统中CPU的驱动加载。最简单的加载驱动的方法是将modprobe命令加入/etc/rc.local。如果你的内核根本部支持CPUFreq,你需要下载补丁包并给内核打上补丁。

--
表格一:Linux中用于时钟调节的模块

模块  处理器
speedstep 通用speedstep,在旧版CPUFreq中出现
speedstep-ich 大多数迅驰奔腾处理器之前的CPU
speedstep-centrino 支持迅驰技术的奔腾处理器
p4-clockmod 奔腾4时钟调节;常见于奔腾4移动处理器
longrun  支持 LongRun 技术的 Transmeta Crusoe 处理器
powernow 支持 PowerNow 技术的 AMD K6、K7、K8处理器
longhaul 支持 LongHaul 的处理器
--

CPUFreq正确运行之后你可以读写 /proc/cpufreq。可以使用类似下面几条的命令设置一个值:

# echo -n "0%100%100%performance" > /proc/cpufreq
# echo -n "0%60%60%powersave" > /proc/cpufreq
# echo -n "0%12%80%userspace" > /proc/cpufreq

第一个值是处理器序号——在一个单处理器的笔记本系统中通常为0。第二和第三个值表示允许调节处理器频率的百分比范围。最后一个参数表示模式(governor)。三个可选模式分别为performance、powersave和userspace。performance在电池模式下提供最大的性能;powersave保持处理器功率在最低状态;而userspace是一个比较好的中间态,按需确定处理器工作频率。

一种很可能的情况是,你希望系统在连接到交流电源的时候以全负荷工作,而当系统依靠电池工作的时候运行在一个较低的水平。一旦你确定了这些值,你可以将它们写入/etc/sysconfig/apm-scripts/apmscript。顺便一提,CPUFreq在必需的情况下会自动修改你的设定值到一个最接近的合理的值。因此,取决于处理器的不同,你要求的值可能不同于你实际得到的结果。

列表一中是一个apmscript的例子,修改自Fedora Core 1发行版。

--
列表一:在apmscript中设定CPU频率

if test "x$CPUFREQ" = "xyes"; then
  if apm | LC_ALL=C grep -q on-line &>/dev/null; then
    echo -n "0%100%100%performance" > /proc/cpufreq
  else
    echo -n "0%12%60%userspace" > /proc/cpufreq
  fi
fi
--

如果CPUFreq还没有启动,别忘了在apmd配置中启用CPUFreq。

节约更多的能源:关闭硬盘
除了CPU,你的笔记本中就属硬盘消耗电能。只要它在旋转就需要电力支持。

Linux默认配置使硬盘停转成为几乎不可能完成的任务,因为操作系统每隔一会都会刷新信息到硬盘中。因此,要让硬盘停转你需要两个工具:一个在内核中设置laptop_mode的脚本荷hdparm实用程序。

laptop_mode 开关曾是你让硬盘停转的一切,然而后来增加了更多需要调整的设置。Internet 上能找到很多设置笔记本模式的脚本,不过从 http://www.linux-mag.com/downloads/2004-07/laptop/laptop_mode.sh 就可以下载到一个相当不错的。这个脚本的好处在于它同时支持 2.4 和 2.6 内核。以 start 或 stop 为参数运行这个脚本,并且在启动时候运行这个脚本,譬如从 /etc/rc.local 中运行,或者仅当进入电池模式的时候运行它。

启用 laptop_mode 后,用 hdparm 程序设置硬盘停转前的等待期限。你可以利用 hdparm 的 -S 参数设置停转超时,用 -C 参数检查驱动状态。从 hdparm 手册中查看关于超时的值的特定信息。

hdparm 命令可以加入到 apmscript 中以便在切换交流电源和电池的时候自动修订超时。当连接到交流电源的时候
# hdparm -S 48 /dev/hda
设定等待时间为 4 分钟。这个值适用于大多数笔记本。当以电池模式运行的时候
# hdparm -S 12 /dev/hda
设定等待时间为 1 分钟。取决于硬盘的启停速度和电池寿命,你也可以相应增加或减少这些值。

坚持长期抗战:交换区管理

延长电池寿命的最后一招是当系统运行在电池模式的时候禁用交换分区。禁用交换分区的后果是迫使所有的程序和数据都保留在内存中,从而降低硬盘数据流量。同时,禁用交换分区也可以让硬盘更快进入停转状态。需要注意的是你的系统中需要有足够的物理内存支持所有的程序。

要启停交换分区,以 -a(指全部 all)参数调用 swapon 和 swapoff 命令。这些命令也可以加入到 apmscript中。

最终版本的适用于笔记本系统的 apm 脚本如列表二所示。

--
列表二:从apmscript下手节约电能
/etc/rc.local
modprobe p4-clockmod
sh /etc/sysconfig/apm-scripts/laptop_mode.sh start
sh /etc/sysconfig/apm-scripts/apmscript change

/etc/sysconfig/apm-scripts/apm-script
if test "x$CPUFREQ" = "xyes"; then
  if apm | LC_ALL=C grep -q on-line &>/dev/null; then
    echo -n "0%100%100%performance" > /proc/cpufreq
    hdparm -S 48  /dev/hda
    swapon -a
  else
    echo -n "0%12%60%userspace" > /proc/cpufreq
    hdparm -S 12  /dev/hda
    swapoff -a
  fi
fi
--

转向移动世界:MiniPCI Prism2 卡
使用笔记本的真正的好处在于你可以进行无止境的创造。正如电源管理中所展示的,一些聪明的裁剪可以让你更好地利用你的系统。

许多新笔记本,例如 IBM 的,标准配置都包含了基于一种称为 MiniPCI 技术的无线网卡。其中许多都基于 Prism2,因此,许多用户安装linux-wlan-ng驱动来使它工作。不幸的是,linux-wlan-ng驱动缺少许多特性,包括与无线扩展的兼容性,使许多网卡只能通过专属的接口进行配置。

一个少有人知的事实是,Linux中包含的orinoco_pci驱动实际是一款基于 Prism2 的驱动,可以用于驱动基于 Prism2 的内置无限网卡。更好的是,orinoco_pci驱动可以使用iwconfig和iwpriv等无线扩展、工具。

要使用orinoco_pci驱动,编辑modules.conf,将现有的无线网卡别名替换成这样:

alias eth1 orinoco_pci

然后你可以选择重启系统或者卸载旧的模块并运行 modprobe orinoco_pci。你的内置无线网卡应该正确地被Orinoco PCI 内核模块驱动,使你可以使用标准的无线工具集。

最绝的:在Linux中使用Windows驱动
如果你很不幸的正在使用一款Linux仍然无法支持的无线网卡,你会很高兴得知只需要$20,你就可以在你的Linux系统中使用厂商为Windows提供的驱动程序。你需要做的就是前往 Linuxant(http://www.linuxant.com/)并下载 Driver Loader。如果你没有厂商提供的CD,Driver Loader 会帮助你从厂商网站下载合适的驱动。

保持移动:沿街扫描基础

如果你希望进行驾车沿街扫描或者徒步沿街扫描,你会很快发现 Kismet 和 Airsnort 是必不可少的工具。这两个工具提供了 Linux 系统独一无二的无线网络攻击和诊断工具。

按照Kismet网站(http://www.kismetwireless.net/)的说法,Kismet是一个完整的无线网络探测、嗅探和入侵检测工具。这个免费的工具允许你扫描无线网络,进行实时WEP解码,甚至能告诉你在这个网络中使用的IP范围。Kismet会告诉你网络使用了哪种(如果确实使用了)加密方法,每个网络连接了多少客户,并且显示那些仍保持工厂默认配置的接入点设备。如果你有某些你有权接入的网络的WEP密钥,你甚至可以进行实时WEP解码和嗅探。结合诸如Driftnet(http://www.ex-parrot.com/~chris/driftnet)或Ethereal(http://www.ethereal.com/)等工具,你将可以对网络中的任何信息传递进行完全的分析。

Airsnort是一个非常棒的WEP恢复工具。如果你经常旅行而新的WEP密钥总没法及时发送到你的邮箱,或者你是一个安全专家并对你的无线网络安全有一种偏执(或者你只是想和你的朋友互相攻击取乐),Airsnort可以在大约一个小时中恢复网络的WEP密钥,具体时间取决于网络上的信息流量。(WEP有一个基本缺陷致使攻击者可以通过分析所谓初始向量 initialization vectors 而获得密钥。)

利用手机进行数据呼叫

现在的市场中有无数种手机,不过其中大多数具有数据传输能力的手机都使用一种通用的通信方式与手机中或网络提供商那里的数据 modem 沟通。Linux 抽象控制模型(ACM)设计用于与抽象设备通信,因此也可以用于移动电话中的数据 modem。Linux ACM 将这个设备映射到/dev目录下的一个TTY设备,之后你就可以像与一个普通modem一样与数据modem通信了。

(大多数Linux发行版在默认情况下都没有可以使用的ACM模块,因此有时需要重新编译内核以使ACM正常工作。另外,有些版本的Red Hat和Fedora Linux要求先用modprobe加载这个模块进入内核。Linux ACM模块在重新编译之后,在2.4和2.6内核上都能够正常工作。如果你发现自己在尝试让ACM正常工作的时候卡壳了,考虑重新编译你的内核。)

要使用ACM,首先你需要一条从笔记本连接到手机的线缆。多数情况下,一条可以连接到手机的通用的USB线就可以,但有时也必须从手机供应商那里购买一套手机工具。多花$20买一套手机工具应该比从eBay上买一条便宜线缆然后遭遇各种麻烦更好一些。

一旦你有了这条线,运行命令 tail -f /var/log/messages。(如果你的笔记本正在以电池模式运行并停止了syslog,要么把电源接入,要么手工启动syslog服务,这样才能看到这些信息。)如果你将电缆连接到手机和笔记本,你应该会看到类似这样的信息:

kernel: hub.c: new USB device 00:1d.1-2, assigned address 2
kernel: usb.c: registered new driver acm
kernel: ttyACM0: USB ACM device
kernel: acm.c: v0.21:USB Abstract Control Model driver for USB

这里,内核的ACM模块发现了这个设备并且映射到逻辑设备/dev/input/ttyACM0以便连接手机。现在你可以将/dev/input/ttyACM0当作一个普通modem进行通信,准备进行拨号连接。例如,补白《打电话回家》展示了利用流行的拨号程序wvdial进行拨号的过程。

----
打电话回家

要使用wvdial拨号程序通过手机进行数据拨号,需要以下这些步骤。

第一步:将Modem加入/etc/wvdial.conf
首先,将你的modem加入wvdial.conf。加入之后,其它工具如Red Hat Network Manager才能被用于设置数据连接,或者你可以像这个例子一样进行硬编码。

在wvdial.conf中的modem配置应该类似这样:

[Mobile] Modem = /dev/input/ttyACM0 Baud = 57600 SetVolume = 2 Dial Command = ATDT Init1 = ATZ FlowControl = Hardware (CRTSCTS)

第二步:配置拨号程序界面

现在你已将modem加入wvdial.conf,你需要建立一个拨号程序界面以进行拨号连接。你要在/etc/sysconfig/network-scripts中做这个工作。建立一个文件并命名为ifcfg-ISP(这里ISP是你的互联网提供商名称)。这个配置文件应该类似这样:

ONBOOT=no USERCTL=yes PEERDNS=yes TYPE=Modem DEVICE=ppp2 BOOTPROTO=dialup CCP=off PC=off AC=off BSDCOMP=off VJ=off VJCCOMP=off LINESPEED=57600 MODEMPORT=/dev/input/ttyACM0 IDLETIMEOUT=600 PROVIDER=ISP DEFROUTE=yes PERSIST=no PAPNAME=username WVDIALSECT=ISP MODEMNAME=Mobile DEMAND=no

你应将username改为你在ISP处登记的用户名。接下来,加入验证信息。

第三步:证明你的身份

配置了拨号程序界面之后,你需要提供用于拨号的用户名、密码和电话号码。这些信息应该加入/etc/wvdial.conf和/etc/ppp/chap-secrets。

回到/etc/wvdial.conf,在最下面加入以下一块信息:

[Dialer ISP] Username = username Password = mypassword Phone = [Phone Number to ISP] Stupid Mode = 1

同时将下面一行加入/etc/ppp/chap-secrets:

"username" "ISP" "mypassword"

现在你做好了连接的一切准备工作。输入

# ifup ISP

以激活拨号程序界面。手机应该明白它正在进行数据拨号,而你也应该能从日志文件中看见状态信息。一旦通过了验证,多数 ISP 都会分配一个 IP 地址,之后你就可以在网络上通信了。当你结束之后,输入 ifdown ISP 关闭连接。

---- Phoning Home 结束

连接到 Verizon 的 MobileOffice 服务

Verizon Wireless 提供两种无线服务。第一种,称为 MobileOffice,提供最高 14.4k 的连接并基本按分钟收费。第二种称为ExpressNetwork,提供 144k 连接,不过相当昂贵,为无限制使用收取每月收80美圆费用。

MobileOffice 服务与传统拨号连接使用基本相同的配置,只需要很少的一点配置技巧。

从补白《打电话回家》中的几个步骤开始,然后将连接转换为支持 Verizon Wireless 的 MobileOffice。

特别要注意的是,你需要从手机拨号#777。这需要在《打电话回家》中的第三步中作出修改。然后,添加一个初始化字符串。一个特定的初始化字符串设定了一个寄存器,通知 Verizon 的modem连接器你希望连接到他们的 Mobile Office 服务。将下面这句添加到/etc/wvdial.conf中的modem段落:

 Init3 = AT$QCMDR=2

如果你订购了 Verizon 的高速 ExpressNetwork 服务,则将QCMDR的值设置为3。

 Init3 = AT$QCMDR=3

可以使用用户名、密码qnc在MobileOffice 网络上通过身份验证。你需要同时在/etc/wvdial.conf和/etc/ppp/chap-secrets中进行修改。

要登陆到ExpressNetwork服务,使用xxxxxxxx@vzw3g.com作为用户名登陆;那些x表示你的10位移动电话号码。登陆密码为vzw。当然,你必须订阅了ExpressNetwork服务才能成功登陆。

这样就行了!完成了以上这些设置过程,你就应该连接到其中一个Verizon服务网络了。请与Verizon联系以获取任何费用方面的信息。

建立动态 3D 配置的 X 服务器

许多笔记本都有很有限的 VRAM,而这导致了一种冲突:要么禁止显示的 3D 支持,要么色深受到限制。

建立动态 3D 配置的 X 服务器让你在两种情况都有最佳的享受。当你进行正常工作的时候它运行在 2D 模式,而当你玩儿游戏的时候建立一个新的 X 服务器。

你可以通过一点脚本和一个新的 XF86Config 文件来达到这个效果。

首先,建立一个单独的 XF86Config 文件。主要的 XF86-Config 配置奖用于你日常工作所需的 2D 显示,而新的配置将针对 3D 环境。

首先将现有的配置文件复制到一个新文件,并命名为 XF86Config.3D(这些文件应该都在 /etc/X11 目录)。编辑新的 3D 配置文件设置所需的解析度和色深。

接下来,为游戏建立一个 3D 启动脚本。建立新的 3D 服务器是利用一个短小的脚本和 X 的桌面切换热键完成的。这个脚本应该有些类似下面这样:

/usr/X11R6/bin/X :1 -xf86config XF86Config.3D /
  -depth 16 -auth /var/gdm/:1.Xauth vt8 &
DISPLAY=:1.0
export DISPLAY

chromium
DISPLAY=:0.0
export DISPLAY

在这个例子中,我们建立了一个 3D X服务器以运行 chromium。运行这个脚本会建立一个新的窗口然后在其中运行chromium。从这里你可以使用 X 的热键 ALT-CTRL-BACKSPACE 中止 X 会话并返回原来的 2D 桌面,也可以用 ALT-CTRL-F7 和 ALT-CTRL-F8 在两个桌面之间切换。一般说来在你结束游戏的时候中止进程是个不错的主意。

再次上路
这片文章只介绍了为移动环境优化Linux的很少一些技巧。Linux是一个极其灵活的操作系统;只要用一点创造力就可以为移动电脑提供可与商业操作系统匹敌的诸多特点。

(原文链接:http://www.linux-mag.com/content/view/1689/2190/ 。感谢 Linux Magazine 为我们提供这样高质量的杂志。)

原创粉丝点击