Gentoo Archives: gentoo-commits

From: "Le Zhang (r0bertz)" <r0bertz@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo commit in xml/htdocs/doc/zh_cn: power-mgt-guide.xml
Date: Wed, 02 Apr 2008 19:16:22
Message-Id: E1Jh8RV-0001vY-NA@stork.gentoo.org
1 r0bertz 08/04/02 19:16:17
2
3 Added: power-mgt-guide.xml
4 Log:
5 [zh_cn] added power-mgt-guide.xml
6
7 Revision Changes Path
8 1.1 xml/htdocs/doc/zh_cn/power-mgt-guide.xml
9
10 file : http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/zh_cn/power-mgt-guide.xml?rev=1.1&view=markup
11 plain: http://sources.gentoo.org/viewcvs.py/gentoo/xml/htdocs/doc/zh_cn/power-mgt-guide.xml?rev=1.1&content-type=text/plain
12
13 Index: power-mgt-guide.xml
14 ===================================================================
15 <?xml version='1.0' encoding="utf-8"?>
16 <!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
17
18 <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/zh_cn/power-mgt-guide.xml,v 1.1 2008/04/02 19:16:17 r0bertz Exp $-->
19 <!--English CVS version: 1.35-->
20 <guide link="/doc/en/power-management-guide.xml" lang="zh_cn">
21 <title>电源管理指导</title>
22
23 <author title="作者">
24 <mail link="earthwings@g.o">Dennis Nienhüser</mail>
25 </author>
26 <author title="编辑">
27 <mail link="chriswhite@g.o">Chris White</mail>
28 </author>
29 <author title="编辑">
30 <mail link="nightmorph@g.o">Joshua Saddler</mail>
31 </author>
32 <author title="译者">
33 <mail link="acevery@×××××.com">余钰炜</mail>
34 </author>
35
36 <abstract>
37 电源管理是延长移动系统上电池使用时间的关键,比如在笔记本电脑上。这篇指导将帮你在你的笔记本上设置它。
38 </abstract>
39
40
41
42 <!-- The content of this document is licensed under the CC-BY-SA license
43 See http://creativecommons.org/licenses/by-sa/2.5 -->
44 <license/>
45
46 <version>1.39</version>
47 <date>2008-01-31</date>
48
49 <chapter>
50 <title>介绍</title>
51 <section>
52 <body>
53
54 <p>
55 最近的几年中,笔记本电脑电池的容量和寿命都有了很大的提高。然而现代的处理器比旧的更加耗能而每一代新的笔记本电脑又增加了许多蚕食电源的设备。正因为如此,电源管理比以前任何时候都重要。增加电池的使用时间并不意味着你需要多买一个电池。很大程度可以通过使用智能的电源管理策略来实现。
56 </p>
57
58 </body>
59 </section>
60 <section>
61 <title>概述</title>
62 <body>
63
64 <p>
65 请注意,这篇指导描述的是<e>笔记本电脑</e>的电源管理。虽然其中有些小节也可适用于<e>服务器</e>,但其它的部分则不适用并可能造成损害。所以请不要把本指导应用于服务器,除非你确实知道你在干什么。
66 </p>
67
68 <p>
69 因为这篇指导的确比较长,这个短短的概述帮你统领全篇。
70 </p>
71
72 <p>
73 <uri
74 link="#doc_chap2">前提条件</uri>一章讲了使接下来的设备部分能有效实现的一些前提条件。其中包括了BIOS的设定、内核的编译以及用户方面的简化设定。接下来的三章聚焦于典型的耗电设备:
75 处理器、显示器和硬盘。它们都可以被单独配置。<uri link="#doc_chap3">CPU
76 电源管理</uri>展示了如何通过调整处理器的主频来尽可能地节省电源,同时不损失太多的性能。在<uri
77 link="#doc_chap5">硬盘电源管理</uri>中有一些不同的、避免你硬盘不必要地工作的小技巧(附带地,也使硬盘的工作噪声降低)。关于显卡、无线网卡及USB的注意事项请见<uri
78 link="#doc_chap6">其它设备的电源管理</uri>,而其它章节则致力于(非常试验性的)<uri
79 link="#doc_chap7">休眠状态</uri>。最后<uri link="#doc_chap8">常见问题</uri>中列出了一些易犯的错误。
80 </p>
81
82 </body>
83 </section>
84 <section>
85 <title>每部分的电源预算</title>
86 <body>
87
88 <figure link="/images/energy-budget.png" short="每部分消耗了多少电量?" caption="每部分的电量预算"/>
89
90 <p>
91 几乎每部分都可以在不同的状态下工作——关闭、休眠、空闲、激活,即消耗不同的电量。电量主要消耗于LCD显示器、CPU、芯片组和硬盘。通常情况下,我们可以在BIOS中激活操作系统无关的电源管理,但是在操作系统中的智能设置则可以适应于不同的情况,从而实现更多。
92 </p>
93
94 </body>
95 </section>
96 </chapter>
97
98 <chapter>
99 <title>前提条件</title>
100 <section>
101 <body>
102
103 <p>
104 在讨论如何使单独的设备能实现电源管理之前,先确定已经具备了一些必要的条件。在设置好BIOS后,一些内核的选项需要选上——简单地说就是ACPI、休眠状态(sleep
105 states)和CPU降频(CPU frequency
106 scaling)。因为在大多数情况下,节能就意味着性能的损失或是响应速度的下降,所以应该仅在使用电池时启用。使用一个新的运行级别<e>battery</e>,意为电池,将会很方便。
107 </p>
108
109 </body>
110 </section>
111 <section>
112 <title>BIOS部分</title>
113 <body>
114
115 <p>
116 首先,我们来看看和电源管理有关的BIOS设定。最好的方式是将BIOS的设置和操作系统的策略结合起来,不过现在最好把绝大部分BIOS相关的部分禁用掉。以确保它不会干扰你的策略。不要忘了在你完成了其他设置后再检查一下你的BIOS设置。
117 </p>
118
119 </body>
120 </section>
121 <section>
122 <title>设定USE标记</title>
123 <body>
124
125 <p>
126 请检查一下<c>acpi</c>的USE标记已经在<path>/etc/make.conf</path>中设置了。其他你可能感兴趣的USE标记是<c>apm</c>、<c>lm-sensors</c>、<c>nforce2</c>、<c>nvidia</c>、<c>pmu</c>。查阅<path>/usr/portage/profiles/use*.desc</path>来获得更多的细节。如果你忘了设置这些标记,你可以用<c>--newuse</c>参数重新<c>emerge</c>那些受影响的包。
127 </p>
128
129 </body>
130 </section>
131 <section>
132 <title>配置内核</title>
133 <body>
134
135 <p>
136 ACPI(高级配置与电源接口)的内核支持依然在开发中。使用最新的内核确保你可以最大程度地利用它。
137 </p>
138
139 <p>
140 Portage中有多个不同的内核。我推荐使用<c>gentoo-sources</c>或者<c>tuxonice-sources</c>。后者包括了TuxOnIce的补丁,参见有关<uri
141 link="#doc_chap7">休眠状态</uri>的章节。当配置内核的时候,至少应启用下面这些选项:
142 </p>
143
144 <pre caption="电源管理的内核最简设置(内核2.6)">
145 Power Management Options ---&gt;
146 [*] Power Management Support
147 [ ] Software Suspend
148
149 ACPI( Advanced Configuration and Power Interface ) Support ---&gt;
150 [*] ACPI Support
151 [ ] Sleep States
152 [ ] /proc/acpi/sleep (deprecated)
153 [*] AC Adapter
154 [*] Battery
155 &lt;M&gt; Button
156 &lt;M&gt; Video
157 [ ] Generic Hotkey
158 &lt;M&gt; Fan
159 &lt;M&gt; Processor
160 &lt;M&gt; Thermal Zone
161 &lt; &gt; ASUS/Medion Laptop Extras
162 &lt; &gt; IBM ThinkPad Laptop Extras
163 &lt; &gt; Toshiba Laptop Extras
164 (0) Disable ACPI for systems before Jan 1st this year
165 [ ] Debug Statements
166 [*] Power Management Timer Support
167 &lt; &gt; ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)
168
169 CPU Frequency Scaling ---&gt;
170 [*] CPU Frequency scaling
171 [ ] Enable CPUfreq debugging
172 &lt; &gt; CPU frequency translation statistics
173 [ ] CPU frequency translation statistics details
174 Default CPUFreq governor (userspace)
175 &lt;*&gt; 'performance' governor
176 &lt;*&gt; 'powersave' governor
177 &lt;*&gt; 'ondemand' cpufreq policy governor
178 &lt;*&gt; 'conservative' cpufreq governor
179 &lt;*&gt; CPU frequency table helpers
180 &lt;M&gt; ACPI Processor P-States driver
181 &lt;*&gt; <i>CPUFreq driver for your processor</i>
182 </pre>
183
184 <p>
185 自己决定你是否需要休眠(Software Suspend)、挂起状态(Sleep States)(见正文)。如果你用的是ASUS、Median、IBM
186 ThinkPad或者Toshiba的笔记本,就选择相应的部分。
187 </p>
188
189 <p>
190 内核需要知道如何为你处理器启动CPU降频。因为每种CPU都有不同的接口,所以你得为你的处理器选择正确的驱动。要小心的是——比如,在Pentim
191 M的系统上启用<c>Intel Pentium 4 clock
192 modulation</c>会导致奇怪的结果。如果你不能确定选择哪一个,查阅一下内核的文档。
193 </p>
194
195 <p>
196 编译你的内核,确保开机时加载了正确的模块并启动进入你新的启用了ACPI的内核。接着运行<c>emerge
197 sys-power/acpid</c>以获得acpi的后台程序。它会通知你相关的事件,如从AC电源切换到电池或者合上了笔记本。如果你没有把相应的模块编译进内核的话,一定要确保已经加载了它们。然后通过执行
198 <c>/etc/init.d/acpid start</c>来启动acpid。很快你就会看到如何使用它。
199 </p>
200
201 <pre caption="安装acpid">
202 # <i>emerge sys-power/acpid</i>
203 # <i>/etc/init.d/acpid start</i>
204 # <i>rc-update add acpid default</i>
205 </pre>
206
207 </body>
208 </section>
209 <section>
210 <title>创建"battery"运行级别</title>
211 <body>
212
213 <p>
214 默认的策略是当且仅当需要的时候启动电源管理——使用电池的时候。为了能方便地在AC电源和电池的状态间切换,创建一个运行级别<c>battery</c>来控制启动和关闭电源管理的脚本。
215 </p>
216
217 <note>
218 如果你不喜欢使用另一个运行级别的办法,你可以安全地跳过这部分。不过,跳过这一步就需要一些技巧来设置了。下面的都是假设有一个<c>battery</c>的运行级别存在的。
219 </note>
220
221 <pre caption="创建battery运行级别">
222 # <i>cd /etc/runlevels</i>
223 # <i>cp -a default battery</i>
224 </pre>
225
226 <p>
227 完成了。你新的运行级别<c>battery</c>包含了所有<c>default</c>级别中的东西,但是还没有它们之间的自动切换,让我们改变一下吧。
228 </p>
229
230 </body>
231 </section>
232 <section>
233 <title>响应ACPI事件</title>
234 <body>
235
236 <p>
237 典型的ACPI事件有合上笔记本、电源切换及按下休眠键等。其中一个重要的事件是切换电源,此时应该导致一次运行级别的切换。一个小脚本会处理它。
238 </p>
239
240 <p>
241 首先,你需要一个脚本根据电源情况在<c>default</c>和<c>battery</c>间切换。这个脚本使用<c>sys-power/powermgmt-base</c>中的<c>on_ac_power</c>命令——所以确定这个包已经安装在你的系统上了。
242 </p>
243
244 <pre caption="安装powermgmt-base">
245 # <i>emerge powermgmt-base</i>
246 </pre>
247
248 <p>
249 现在你可以通过在shell中执行<c>on_ac_power &amp;&amp; echo AC available || echo Running
250 on
251 batteries</c>来知道电源的状况。下面这个脚本是用来改变运行级别的。将它保存为<path>/etc/acpi/actions/pmg_switch_runlevel.sh</path>。
252 </p>
253
254 <pre caption="/etc/acpi/actions/pmg_switch_runlevel.sh">
255 #!/bin/bash
256
257 <comment># BEGIN configuration</comment>
258 RUNLEVEL_AC="default"
259 RUNLEVEL_BATTERY="battery"
260 <comment># END configuration</comment>
261
262
263 if [ ! -d "/etc/runlevels/${RUNLEVEL_AC}" ]
264 then
265 logger "${0}: Runlevel ${RUNLEVEL_AC} does not exist. Aborting."
266 exit 1
267 fi
268
269 if [ ! -d "/etc/runlevels/${RUNLEVEL_BATTERY}" ]
270 then
271 logger "${0}: Runlevel ${RUNLEVEL_BATTERY} does not exist. Aborting."
272 exit 1
273 fi
274
275 if on_ac_power
276 then
277 if [[ "$(&lt;/var/lib/init.d/softlevel)" != "${RUNLEVEL_AC}" ]]
278 then
279 logger "Switching to ${RUNLEVEL_AC} runlevel"
280 /sbin/rc ${RUNLEVEL_AC}
281 fi
282 elif [[ "$(&lt;/var/lib/init.d/softlevel)" != "${RUNLEVEL_BATTERY}" ]]
283 then
284 logger "Switching to ${RUNLEVEL_BATTERY} runlevel"
285 /sbin/rc ${RUNLEVEL_BATTERY}
286 fi
287 </pre>
288
289 <p>
290 不要忘了<c>chmod +x
291 /etc/acpi/actions/pmg_switch_runlevel.sh</c>使脚本可以执行。最后一件事是在电源切换的时候运行这个脚本。这是通过acpid获取ACPI事件实现的。在大多数笔记本上,这些事件叫做<c>ac_adapter</c>和<c>battery</c>,不过在你的机子上可能是不同的。
292 </p>
293
294 <pre caption="确定切换电源的ACPI事件">
295 # <i>tail -f /var/log/messages | grep "received event"</i>
296 </pre>
297
298 <p>
299 执行上面的命令并拔下电源线,你看见像下面的输出:
300 </p>
301
302 <pre caption="电源切换输出例子">
303 [Tue Sep 20 17:39:06 2005] received event "ac_adapter AC 00000080 00000000"
304 [Tue Sep 20 17:39:06 2005] received event "battery BAT0 00000080 00000001"
305 </pre>
306
307 <p>
308 我们感兴趣的部分是<c>received
309 event</c>后面的引号部分。它会匹配我们下面要创建的文件中有关事件的行。如果你的系统产生了多个事件或相同的事件,不用担心。只要产生了任何事件,运行级别的改变就会工作。
310 </p>
311
312 <pre caption="/etc/acpi/events/pmg_ac_adapter">
313 <comment># replace "ac_adapter" below with the event generated on your laptop</comment>
314 <comment># For example, ac_adapter.* will match ac_adapter AC 00000080 00000000</comment>
315 event=ac_adapter.*
316 action=/etc/acpi/actions/pmg_switch_runlevel.sh %e
317 </pre>
318
319 <pre caption="/etc/acpi/events/pmg_battery">
320 <comment># replace "battery" below with the event generated on your laptop</comment>
321 <comment># For example, battery.* will match battery BAT0 00000080 00000001</comment>
322 event=battery.*
323 action=/etc/acpi/actions/pmg_switch_runlevel.sh %e
324 </pre>
325
326 <p>
327 最后acpid要重新启动来识别这些改变。
328 </p>
329
330 <pre caption="完成acpid运行级别切换">
331 # <i>/etc/init.d/acpid restart</i>
332 </pre>
333
334 <p>
335 试一下:插拔电源并查看系统的日志中"Switching to AC mode"或"Switching to battery
336 mode"消息。如果这个脚本不能正确地检测电源状况,请参见<uri link="#doc_chap8">常见问题部分</uri>。
337 </p>
338
339 <p>
340 因为事件机制的特性,不管是用AC电源或是电池,你的笔记本会启动到<c>default</c>的运行级别中。当用AC电源启动的时候,这是好事,但如果我们需要从电池启动的话,我们就希望进入的是battery的运行级别。一个解决的办法是在内核的启动参数中加上<c>softlevel=battery</c>,但是它很倾向于忘记选择。一个更好的办法是在启动的最后假造一个ACPI事件,让<path>pmg_switch_runlevel.sh</path>脚本决定是否需要切换运行级别。用你喜欢的文本编辑器打开<path>/etc/conf.d/local.start</path>并加入下面几行:
341 </p>
342
343 <pre caption="编辑local.start以实现启动时运行级别的调整">
344 <comment># Fake acpi event to switch runlevel if running on batteries</comment>
345 /etc/acpi/actions/pmg_switch_runlevel.sh "battery/battery"
346 </pre>
347
348 <p>
349 像这样准备,你就可以为单独的设备激活电源管理策略。
350 </p>
351
352 </body>
353 </section>
354 </chapter>
355
356 <chapter>
357 <title>CPU电源管理</title>
358 <section>
359 <body>
360
361 <p>
362 移动处理器能够在不同的主频下运行。有些则允许改变电压。大多数情况下,你的CPU不需要全速运行,将它的主频降下来可以节省很多电量——经常是不牺牲任何性能。
363 </p>
364
365 </body>
366 </section>
367 <section>
368 <title>一些技术术语</title>
369 <body>
370
371 <p>
372 你可能对CPU降频相关的一些术语不是很清楚,这里是一个简介。
373 </p>
374
375 <p>
376 首先,内核需要能够改变处理器的主频。<b>CPUfreq processor
377 driver</b>即<b>CPU主频驱动</b>知道用来在你的CPU上的相应命令。所以在你的内核中选择正确的驱动是很重要的。你应该在上面就已经完成了。一旦内核知道如何改变主频,它就需要知道它应该设置哪个主频。这是根据<b>policy</b>,即<b>策略</b>来完成的,它由<b>CPUfreq
378 policy</b>即<b>CPU主频策略</b>和<b>governor</b>即<b>管理器</b>组成。CPU主频策略是定义CPU主频范围的两个值——最大主频和最小主频。管理器则决定选择最大最小值间的哪一个可用的主频。例如,<b>powersave
379 governor</b>总是选择可用的最低主频,而<b>performance governor</b>则总选择最高的主频。<b>userspace
380 governor</b>并不做决定,而是取用户(或者是用户控制的程序)想要的——即从<path>/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed</path>中读取。
381 </p>
382
383 <p>
384 这听起来不像是动态的主频改变而且事实上它的确不是动态的,不过可以通过多种途径实现。例如<b>ondemand
385 governor</b>根据当前的CPU负载来做决定。同样的任务可以由许多用户端的程序来完成,如<c>cpudyn</c>、<c>cpufreqd</c>、<c>powernowd</c>等等。ACPI事件则可以用来根据电源情况,启用或禁用动态降频。
386 </p>
387
388 </body>
389 </section>
390 <section>
391 <title>手动设定主频</title>
392 <body>
393
394 <p>
395 降低CPU的速度和电压有两个好处:首先耗电比较小,其次发热量也会比全速运行时有所改善。显然,缺点是你会损失一些性能。可以说降低处理器的速度是一种性能和省电上的均衡。
396 </p>
397
398 <note>
399 并非所有的笔记本都支持主频的改变。如果不确定,那就看一下<uri
400 link="#doc_chap8">常见问题</uri>中支持降频的处理器的列表有没有你的CPU。
401 </note>
402
403 <p>
404 现在让我们来测试一下你CPU降频能不能工作。让我们装上另一个非常方便用于debug的工具:<c>sys-power/cpufrequtils</c>。
405 </p>
406
407 <pre caption="确定CPU主频">
408 # <i>emerge cpufrequtils</i>
409 # <i>cpufreq-info</i>
410 </pre>
411
412 <p>
413 这是一个输出的例子:
414 </p>
415
416 <pre caption="cpufreq-info的输出例子">
417 cpufrequtils 0.3: cpufreq-info (C) Dominik Brodowski 2004
418 Report errors and bugs to linux@×××××.de, please.
419 analyzing CPU 0:
420 driver: centrino
421 CPUs which need to switch frequency at the same time: 0
422 hardware limits: 600 MHz - 1.40 GHz
423 available frequency steps: 600 MHz, 800 MHz, 1000 MHz, 1.20 GHz, 1.40 GHz
424 available cpufreq governors: conservative, ondemand, powersave, userspace, performance
425 current policy: frequency should be within 924 MHz and 1.40 GHz.
426 The governor "performance" may decide which speed to use
427 within this range.
428 current CPU frequency is 1.40 GHz.
429 </pre>
430
431 <p>
432 现在让我们用<c>cpufreq-set</c>来折腾一下来看看主频调整能否工作。比如,运行一下<c>cpufreq-set -g
433 ondemand</c>来激活ondemand管理器,然后用<c>cpufreq-info</c>来确认一下。如果它没有像预期的那样工作,你或许可以从指导末尾的<uri
434 link="#doc_chap8">常见问题部分</uri>中找到答案。
435 </p>
436
437 </body>
438 </section>
439 <section>
440 <title>主频自适应</title>
441 <body>
442
443 <p>
444 上面的方法是不错,但是不方便在日常中应用。最好让你的系统自动设置主频。有很多方式来达到这个目的。下面的表格的介绍帮你你决定采用哪一个。它可以简要地分为三类:<b>内核类</b>,即需要内核支持;<b>后台类</b>,即用运行在后台的程序来做;<b>图形界面类</b>,即提供图形界面方便用户设置和调整。
445 </p>
446
447 <table>
448 <tr>
449 <th>名称</th>
450 <th>类别</th>
451 <th>调整依据</th>
452 <th>内核管理器</th>
453 <th>进一步的管理器</th>
454 <th>评价</th>
455 </tr>
456 <tr>
457 <ti>'ondeman'管理器</ti>
458 <ti>内核类</ti>
459 <ti>CPU负载</ti>
460 <ti>未知</ti>
461 <ti>未知</ti>
462 <ti>
463 当CPU有负载的时候选用最大的主频,当CPU空闲的时候一步步降低。通过<path>/sys/devices/system/cpu/cpu0/cpufreq/ondemand/</path>做进一步的设置。依然需要用户方面的工具(程序或脚本)来完成管理器的变更或类似的任务。
464 </ti>
465 </tr>
466 <tr>
467 <ti>'conservative'管理器</ti>
468 <ti>内核类</ti>
469 <ti>CPU负载</ti>
470 <ti>未知</ti>
471 <ti>未知</ti>
472 <ti>
473 和ondemand管理器不同的是,在CPU负载高的时候conservative并不直接跳上最高的主频,而是采用步进的方式来升高主频。
474 </ti>
475 </tr>
476 <tr>
477 <ti><uri link="http://mnm.uib.es/~gallir/cpudyn/">cpudyn</uri></ti>
478 <ti>后台程序</ti>
479 <ti>CPU负载</ti>
480 <ti>Performance,powersave</ti>
481 <ti>动态</ti>
482 <ti>
483 同时支持硬盘的挂起——但是<e>laptop mode</e>在大多数情况下会做得更好。
484 </ti>
485 </tr>
486 <tr>
487 <ti><uri link="http://sourceforge.net/projects/cpufreqd/">cpufreqd</uri></ti>
488 <ti>后台程序</ti>
489 <ti>电池状况、CPU负载、温度、运行的程序等等</ti>
490 <ti>全部可用</ti>
491 <ti>没有</ti>
492 <ti>
493 成熟的(但稍显复杂)的设置。可以通过传感器插件(lm_sensors)扩展或同一些NVidia显卡的显存或核心协作。Cpufreqd是支持SMP(对称多CPU)的,同时可以选择在运行时手动控制。
494 </ti>
495 </tr>
496 <tr>
497 <ti>
498 <uri link="http://www.deater.net/john/powernowd.html">powernowd</uri>
499 </ti>
500 <ti>后台程序</ti>
501 <ti>CPU负载</ti>
502 <ti>没有</ti>
503 <ti>被动、正弦、激进的</ti>
504 <ti>
505 支持SMP
506 </ti>
507 </tr>
508 <tr>
509 <ti>
510 <uri
511 link="http://projects.simpledesigns.com.pl/project/ncpufreqd/">ncpufreqd</uri>
512 </ti>
513 <ti>后台程序</ti>
514 <ti>温度</ti>
515 <ti>没有</ti>
516 <ti>Powersave、performance</ti>
517 <ti>
518 根据系统的温度在performance和powersave管理器间切换。对于那些发热量声名狼藉的笔记本很有用。
519 </ti>
520 </tr>
521 <tr>
522 <ti><uri link="http://www.goop.org/~jeremy/speedfreq/">speedfreq</uri></ti>
523 <ti>后台程序</ti>
524 <ti>CPU负载</ti>
525 <ti>没有</ti>
526 <ti>动态、powersave、performance、固定速度</ti>
527 <ti>
528 方便地通过客户端/服务器界面设置。要求用2.6的内核。不再被维护,有错误而从Portage中移除了。如果你还在用它,请改用cpufreqd。
529 </ti>
530 </tr>
531 <tr>
532 <ti><uri link="http://cpuspeedy.sourceforge.net/">gtk-cpuspeedy</uri></ti>
533 <ti>图形界面</ti>
534 <ti>没有</ti>
535 <ti>没有</ti>
536 <ti>没有</ti>
537 <ti>
538 Gnome程序,一个图形界面的工具让你手动设置CPU主频。没有提供任何自动的功能。
539 </ti>
540 </tr>
541 <tr>
542 <ti>klaptopdaemon</ti>
543 <ti>图形界面</ti>
544 <ti>电池状态</ti>
545 <ti>全部可用</ti>
546 <ti>没有</ti>
547 <ti>
548 仅支持KDE,需要'ondemand'管理器以动态降频。
549 </ti>
550 </tr>
551 </table>
552
553 <p>
554 虽然根据负载来调整主频看似简单。但是不好的算法可能会导致CPU不断地在两个主频间振荡,或者在不必要的高主频上浪费电量。
555 </p>
556
557 <p>
558 选择哪个?如果你拿不定主意,试试<c>cpufreqd</c>:
559 </p>
560
561 <pre caption="安装cpufreqd">
562 # <i>emerge cpufreqd</i>
563 </pre>
564
565 <p>
566 <c>cpufreqd</c>可以通过编辑<path>/etc/cpufreqd.conf</path>来设置。cpufreqd自带的默认配置文件可能稍显复杂。我建议你用Gentoo的前开发人员Henrik
567 Brix Andersen的设置来替换它(见下文)。请注意,你需要使用cpufreqd-2.0.0或以上的版本。更早的版本的设置格式是不同的。
568 </p>
569
570 <pre caption="/etc/cpufreqd.conf(cpufreqd-2.0.0或以上)">
571 [General]
572 pidfile=/var/run/cpufreqd.pid
573 poll_interval=3
574 enable_plugins=acpi_ac, acpi_battery
575 enable_remote=1
576 remote_group=wheel
577 verbosity=5
578 [/General]
579
580 [Profile]
581 name=ondemand
582 minfreq=0%
583 maxfreq=100%
584 policy=ondemand
585 [/Profile]
586
587 [Profile]
588 name=conservative
589 minfreq=0%
590 maxfreq=100%
591 policy=conservative
592 [/Profile]
593
594 [Profile]
595 name=powersave
596 minfreq=0%
597 maxfreq=100%
598 policy=powersave
599 [/Profile]
600
601 [Profile]
602 name=performance
603 minfreq=0%
604 maxfreq=100%
605 policy=performance
606 [/Profile]
607
608 [Rule]
609 name=battery
610 ac=off
611 profile=conservative
612 [/Rule]
613
614 [Rule]
615 name=battery_low
616 ac=off
617 battery_interval=0-10
618 profile=powersave
619 [/Rule]
620
621 [Rule]
622 name=ac
623 ac=on
624 profile=ondemand
625 [/Rule]
626 </pre>
627
628 <p>
629 现在你可以启动cpufreqd后台程序了。把它加到<c>default</c>和<c>battery</c>的运行级别上。
630 </p>
631
632 <pre caption="启动cpufreqd">
633 # <i>rc-update add cpufreqd default battery</i>
634 # <i>rc</i>
635 </pre>
636
637 <p>
638 有时候你想手动选择其它的策略而不是按后台程序做的,比如当电池电量已经很低了,但是你知道很快就有电源了。在这种情况下你可以通过<c>cpufreqd-set
639 manual</c>来启动cpufreqd的手动模式,然后选择一个你设置的模式(可以通过<c>cpufreqd-get</c>列出)。你也可以通过执行<c>cpufreqd-set
640 dynamic</c>离开手动模式。
641 </p>
642
643 <warn>
644 不要同时运行多个上述的程序,不然可以会出现一直在两个主频间切换的奇怪现象。
645 </warn>
646
647 </body>
648 </section>
649 <section>
650 <title>确定一下结果</title>
651 <body>
652
653 <p>
654 最后检查一下你的新策略能很好地工作。一个简单的办法就是监控一下你的笔记本CPU的工作频率:
655 </p>
656
657 <pre caption="监控CPU频率">
658 # <i>watch grep \"cpu MHz\" /proc/cpuinfo</i>
659 </pre>
660
661 <p>
662 如果<path>/proc/cpuinfo</path>没有更新的话(参见<uri
663 link="#doc_chap8">常见问题</uri>),用<c>sys-apps/x86info</c>来监控CPU频率:
664 </p>
665
666 <pre caption="CPU频率监控备用方案">
667 # <i>watch x86info -mhz</i>
668 </pre>
669
670 <p>
671 根据你的设置,CPU频率应该在高负载时升高,没负载的时候下降或保持不变。如果你用的是<c>cpufreqd</c>并且在<path>cpufreqd.conf</path>中将verbosity设为5或更高,你就能从<c>syslog</c>中获得额外的报告信息。
672 </p>
673
674 </body>
675 </section>
676 </chapter>
677
678 <chapter>
679 <title>LCD电源管理</title>
680 <section>
681 <body>
682
683 <p>
684 正如你在<uri link="#doc_chap1_fig1">figure
685 1.1</uri>中看到的,LCD是最大的耗电大户(对于非移动的CPU可能不适用)。所以不需要的时候把显示器关掉是非常重要的,可能的话降低它背光的亮度。大多数笔记本都可能控制背光的亮度。
686 </p>
687
688 </body>
689 </section>
690 <section>
691 <title>挂起设置</title>
692 <body>
693
694 <p>
695 首先检查一下你显示器挂起/休眠/关闭的时间设置。因为这跟你使用的窗口管理器有很大的关系,我将让你自己搞清楚。一般只有两个地方:可以通过<c>setterm
696 -blank &lt;number-of-minutesM&gt;</c>,<c>setterm -powersave
697 on</c>和<c>setterm -powerdown
698 &lt;number-of-minutesM&gt;</c>来变暗终端。对于X.org,修改<path>/etc/X11/xorg.conf</path>中的类似配置:
699 </p>
700
701 <pre caption="X.org中LCD挂起的设置">
702 Section "ServerFlags"
703 Option "blank time" "5" <comment># Blank the screen after 5 minutes (Fake)</comment>
704 Option "standby time" "10" <comment># Turn off screen after 10 minutes (DPMS)</comment>
705 Option "suspend time" "20" <comment># Full suspend after 20 minutes</comment>
706 Option "off time" "30" <comment># Turn off after half an hour</comment>
707 [...]
708 EndSection
709
710 [...]
711
712 Section "Monitor"
713 Identifier [...]
714 Option "DPMS"
715 [...]
716 EndSection
717 </pre>
718
719 </body>
720 </section>
721 <section>
722 <title>背光亮度</title>
723 <body>
724
725 <p>
726 可能更重要的是背光亮度。如果你需要通过工具来设置背光亮度,就写一个脚本来调低电池模式下的亮度,并把它放到你的<c>battery</c>运行级别中。下面这个脚本应该适用于大多数的IBM
727 Thinkpad和东芝的笔记本。你需要设置一些相应的内核选项(IBM
728 Thinkpad的情况)。对于东芝的笔记本,装上<c>sys-power/acpitool</c>并跳过下面的<c>thinkpad_acpi</c>(以前叫<c>ibm_acpi</c>)设置。
729 </p>
730
731 <warn>
732 设置背光在thinkpad_acpi中是试验性的。它直接控制硬件并可能对你的系统造成严重的损坏损坏。请阅读<uri
733 link="http://ibm-acpi.sourceforge.net/">thinkpad_acpi的主页</uri>
734 </warn>
735
736 <p>
737 为了可以设置亮度,thinkpad_acpi模块要用experimental参数加载。
738 </p>
739
740 <pre caption="自动加载thinkpad_acpi模块">
741 <comment>(请先阅读上面的警告再做这个!)</comment>
742 # <i>echo "options thinkpad_acpi experimental=1" >> /etc/modules.d/thinkpad_acpi</i>
743 # <i>/sbin/update-modules</i>
744 # <i>echo thinkpad_acpi >> /etc/modules.autoload.d/kernel-2.6</i>
745 # <i>modprobe thinkpad_acpi</i>
746 </pre>
747
748 <p>
749 这样应该就可以不用看到警告信息并在模块加载后生成<path>/proc/acpi/ibm/brightness</path>文件。通过一个启动脚本就可以根据电源的情况调节亮度了。
750 </p>
751
752 <pre caption="/etc/conf.d/lcd-brightness">
753 <comment># See /proc/acpi/ibm/brightness for available values</comment>
754 <comment># Please read /usr/src/linux/Documentation/thinkpad-acpi.txt</comment>
755
756 <comment># brightness level in ac mode. Default is 7.</comment>
757 BRIGHTNESS_AC=7
758
759 <comment># brightness level in battery mode. Default is 4.</comment>
760 BRIGHTNESS_BATTERY=4
761 </pre>
762
763 <pre caption="/etc/init.d/lcd-brightness">
764 #!/sbin/runscript
765
766 set_brightness() {
767 if on_ac_power
768 then
769 LEVEL=${BRIGHTNESS_AC:-7}
770 else
771 LEVEL=${BRIGHTNESS_BATTERY:-4}
772 fi
773
774 if [ -f /proc/acpi/ibm/brightness ]
775 then
776 ebegin "Setting LCD brightness"
777 echo "level ${LEVEL}" > /proc/acpi/ibm/brightness
778 eend $?
779 elif [[ -e /usr/bin/acpitool &amp;&amp; -n $(acpitool -T | grep "LCD brightness") ]]
780 then
781 ebegin "Setting LCD brightness"
782 acpitool -l $LEVEL >/dev/null || ewarn "Unable to set lcd brightness"
783 eend $?
784 else
785 ewarn "Setting LCD brightness is not supported."
786 ewarn "For IBM Thinkpads, check that thinkpad_acpi is loaded into the kernel"
787 ewarn "For Toshiba laptops, you've got to install sys-power/acpitool"
788 fi
789 }
790
791 start() {
792 set_brightness
793 }
794
795 stop () {
796 set_brightness
797 }
798 </pre>
799
800 <p>
801 当完成后,确认亮度可以按照电源情况自动调节后,把它加到battery运行级别中。
802 </p>
803
804 <pre caption="开启亮度自动调节">
805 # <i>chmod +x /etc/init.d/lcd-brightness</i>
806 # <i>rc-update add lcd-brightness battery</i>
807 # <i>rc</i>
808 </pre>
809
810 </body>
811 </section>
812 </chapter>
813
814 <chapter>
815 <title>硬盘电源管理</title>
816 <section>
817 <body>
818
819 <p>
820 硬盘在休眠状态下消耗较少的电量。所以当硬盘未使用一定时间后,激活硬盘的节电模式是合理的。我将告诉你两个可能的方式来实现它。首先,laptop-mode可以通过避免或延迟写硬盘而节约大量电量。缺点是延迟写硬盘可能在电量耗尽或内核崩溃时造成数据丢失。如果你不喜欢那样,你就需要确定没有进程频繁地写硬盘。第二个选择,你可以通过<c>hdparm</c>来启用你硬盘的节电模式。
821 </p>
822
823 </body>
824 </section>
825 <section>
826 <title>延长空闲时间——laptop-mode</title>
827 <body>
828
829 <p>
830 最近的2.6内核包含了据称的<c>laptop-mode</c>。当被激活时,修改过的缓存就在读磁盘的时候写入,或在10分钟后写入(原先是30秒)。这样就你硬盘需要转动的次数最小化。
831 </p>
832
833 <pre caption="自动启动laptop-mode">
834 # <i>emerge laptop-mode-tools</i>
835 </pre>
836
837 <p>
838 <c>laptop-mode-tools</c>的设置文件是<path>/etc/laptop-mode/laptop-mode.conf</path>。根据你喜欢的方式修改它,它已经注释得很好了。运行<c>rc-update
839 add laptop_mode battery</c>让它自动启动。
840 </p>
841
842 <p>
843 laptop-mode-tools的最近版本(1.11或以上)包含了一个新的工具<c>lm-profiler</c>。它会监视你系统中磁盘的使用和网络服务,并建议你关掉不需要的。你既可以通过laptop-mode-tools中内置的运行级别支持(会被Gentoo的<c>/sbin/rc</c>重置)或用你的<c>default</c>/<c>battery</c>运行级别(推荐)
844 </p>
845
846 <pre caption="运行lm-profiler的输出示例">
847 # <i>lm-profiler</i>
848 Profiling session started.
849 Time remaining: 600 seconds
850 [4296896.602000] amarokapp
851 Time remaining: 599 seconds
852 [4296897.714000] sort
853 [4296897.970000] mv
854 Time remaining: 598 seconds
855 Time remaining: 597 seconds
856 [4296900.482000] reiserfs/0
857 </pre>
858
859 <p>
860 当分析你的系统10分钟后,lm-profiler就会列出这段时间内可能造成磁盘访问的服务。
861 </p>
862
863 <pre caption="lm-profiler建议禁用一些服务">
864 Program: "atd"
865 Reason: standard recommendation (program may not be running)
866 Init script: /etc/init.d/atd (GUESSED)
867
868 Do you want to disable this service in battery mode? [y/N]: <i>n</i>
869 </pre>
870
871 <p>
872 在上面例子中,根据建议禁用atd,你可以运行<c>rc-update del atd
873 battery</c>。注意不要禁用你系统正常工作需要的服务。不要禁用你不清楚的服务。
874 </p>
875
876 </body>
877 </section>
878 <section>
879 <title>Limiting Write Accesses</title>
880 <body>
881
882 <p>
883 如果你不想用laptop-mode,你就需要特别小心地禁用那些频繁读磁盘的程序——<c>syslogd</c>是一个很好的例子。你可能不想将完全它关掉,但你可以修改它的设置文件,这样"不需要"的东西就不会被记入日志,也就不会导致硬盘访问。<c>Cups</c>会周期性地写磁盘,所以可以考虑将它关掉,需要的时候再手动启动。
884 </p>
885
886 <pre caption="在battery运行级别中关闭cpus">
887 # <i>rc-update del cupsd battery</i>
888 </pre>
889
890 <p>
891 你也可以用laptop-mode-tools(见上文)中的<c>lm-profiler</c>来找出要禁用的服务。当你完成后,向配置hdparm继续。
892 </p>
893
894 </body>
895 </section>
896 <section>
897 <title>hdparm</title>
898 <body>
899
900 <p>
901 第二个可能是用<c>hdparm</c>。如果你已经用了laptop-mode就跳过这部分。不然,就编辑<path>/etc/conf.d/hdparm</path>并为你的磁盘驱动器加入下列的值。这个例子假设你的硬盘是<b>hda</b>。
902 </p>
903
904 <pre caption="用/etc/conf.d/hdparm来挂起磁盘">
905 hda_args="-q -S12"
906 </pre>
907
908 <p>
909 这样你就可以激活你硬盘的电源管理。如果你想关闭其电源管理,你可以编辑<path>/etc/conf.d/hdparm</path>,把值改为<c>-q
910 -S0</c>,或直接运行<c>hdparm -q -S0 /dev/hda</c>。
911 </p>
912
913 <p>
914 查看<c>man hdparm</c>中更多的选项。虽然你可以在battery的运行级别中通过<c>/etc/init.d/hdparm
915 start</c>手动开启<c>hdparm</c>,但让它自动开启和关闭比较轻松些。把<c>hdparm</c>加到battery的运行级别中它就可以自动启动电源管理了。
916 </p>
917
918 <pre caption="自动启动硬盘挂起设置">
919 # <i>rc-update add hdparm battery</i>
920 </pre>
921
922 <impo>
923 注意你硬盘的睡眠/停转的设定。把它设得太小可能会损耗你的硬盘。
924 </impo>
925
926 </body>
927 </section>
928 <section>
929 <title>其他的技巧</title>
930 <body>
931
932 <p>
933 另外的就是在电池模式下关闭你的swap。在运行swapon/swapoff的切换前,先确定有足够的内存且swap没有使用很多,不然你可能会有大麻烦。
934 </p>
935
936 <p>
937 如果你不想使用laptop-mode,你依然可以通过把一些特定的目录以<c>tmpfs</c>挂载来最小化磁盘的读写,此时写的操作不是在磁盘上的,而是在内存中,并且umount后就丢失了。一般情况下,把<path>/tmp</path>像这样挂载是不错的选择——它会在每次重启的时候被清空,无论是挂载在硬盘上还是内存中。激活它,你需要在内核中启动tmpfs的支持,并在<path>/etc/fstabl</path>中加入如下的一行:
938 </p>
939
940 <pre caption="编辑/etc/fstab使/tmp更飞速">
941 none /tmp tmpfs size=32m 0 0
942 </pre>
943
944 <warn>
945 请注意size参数并根据你的系统来修改它。如果你不确定,就不要使用它,它很容易成为一个性能瓶颈。如果你想把<path>/var/log</path>像这样挂载,一定要在umount前把日志文件写入磁盘。它们非常重要。不要试图像这样挂载<path>/var/tmp</path>。Portage用它来编译......
946 </warn>
947
948 </body>
949 </section>
950 </chapter>
951
952 <chapter>
953 <title>其他设备的电源管理</title>
954 <section>
955 <title>显卡</title>
956 <body>
957
958 <p>
959 如果你用的是支持PowerPlay(显卡核心GPU的动态时钟调整)的ATI显卡,你可以在X.org中启用它。打开<path>/etc/X11/xorg.conf</path>并在Device中加入(或启用)<c>DynamicClocks</c>选项。注意,这个选项可能会导致一些系统崩溃。
960 </p>
961
962 <pre caption="在X.org中启用ATI的PowerPlay支持">
963 Section "Device"
964 [...]
965 Option "DynamicClocks" "on"
966 EndSection
967 </pre>
968
969 </body>
970 </section>
971 <section>
972 <title>无线的电源管理</title>
973 <body>
974
975 <p>
976 无线网卡消耗了一定的电量。把它们像硬盘一样纳电源管理模式中。
977 </p>
978
979 <note>
980 这个脚本假设你的无线网卡是<c>wlan0</c>;请把它改成你的机子上的真实网卡
981 </note>
982
983 <p>
984 把下面的选项加到<path>/etc/conf.d/net</path>中以自动启用无线网卡的电源管理:
985 </p>
986
987 <pre caption="无线网卡的自动电源管理">
988 iwconfig_wlan0="power on"
989 </pre>
990
991 <p>
992 查看<c>man
993 iwconfig</c>以获得更多细节和更多的选项,如唤醒的周期和超时。如果你驱动和接入点支持改变信标(beacon)的发送间隔,那它就可以节省更多的电量。
994 </p>
995
996 </body>
997 </section>
998 <section>
999 <title>USB电源管理</title>
1000 <body>
1001
1002 <p>
1003 关于USB电源消耗有两个问题:第一,USB鼠标、数码相机或U盘在插入的时候都会耗电。你可以避免这个问题(当它们不用的时候,不要移除它们)。第二,当有USB设备插入的时候,USB控制器会周期性地访问接口从而阻止CPU进入睡眠模式。内核提供了一个试验性的选项通过<path>/sys</path>中的<path>power/state</path>来启用USB设备的挂起。
1004 </p>
1005
1006 <pre caption="在内核中启用USB设备的挂起">
1007 Device Drivers
1008 USB support
1009 [*] Support for Host-side USB
1010 [*] USB suspend/resume (EXPERIMENTAL)
1011 </pre>
1012
1013 </body>
1014 </section>
1015 </chapter>
1016
1017 <chapter>
1018 <title>睡眠状态:挂起、待机、休眠(到磁盘)</title>
1019 <section>
1020 <body>
1021
1022 <p>
1023 ACPI定义了不用的睡眠状态。其中比较重要的是
1024 </p>
1025
1026 <ul>
1027 <li>S1即待机</li>
1028 <li>S3即挂起到内存,即挂起 </li>
1029 <li>S4即挂起到磁盘,即休眠</li>
1030 </ul>
1031
1032 <p>
1033 它们可以系统没有使用但又不想关机的时候调用。
1034 </p>
1035
1036 </body>
1037 </section>
1038 <section>
1039 <title>挂起(S3)</title>
1040 <body>
1041
1042 <p>
1043 ACPI对这些睡眠状态的支持标记为试验性的是有原因的。APM的睡眠状态看起来更稳定些,但你不能将APM和ACPI同时使用。
1044 </p>
1045
1046 <pre caption="各种睡眠状态的内核设置">
1047 Power Management Options ---&gt;
1048 [*] Power Management support
1049 ACPI (Advanced Configuration and Power Interface) Support ---&gt;
1050 [*] ACPI Support
1051 [*] Sleep States
1052 </pre>
1053
1054 <p>
1055 当你正确设置内核后,你就可以用<c>hibernate-script</c>来激活挂起或待机模式。让我们先将它装起来。
1056 </p>
1057
1058 <pre caption="安装hibernate-script">
1059 # <i>emerge hibernate-script</i>
1060 </pre>
1061
1062 <p>
1063 一些设置需要在<path>/etc/hibernate</path>中完成。
1064 </p>
1065
1066 <p>
1067 设置挂起的话,编辑<path>/etc/hibernate</path>中的<path>sysfs-ram.conf</path>。<c>USESysfsPowerState
1068 mem</c>总是对的,但是如果你需要对挂起(或其他睡眠状态)做更进一步的设置,你应该把它们加到<path>/etc/hibernate/hibernate.conf</path>中。里面的注释和选项的名称应该可以指引你的。如果你使用网络共享的nfs或samba,确保你关掉相应的启动脚本来避免超时。
1069 </p>
1070
1071 <note>
1072 关于睡眠状态更多的信息,参见<c>man hibernate.conf</c>
1073 </note>
1074
1075 <p>
1076 准备好了吗?现在是你运行下个命令前备份任何数据的最后机会了。注意,你可能需要按一个特殊的键如<c>Fn</c>来从挂起中恢复。
1077 </p>
1078
1079 <pre caption="挂起">
1080 # <i>hibernate-ram</i>
1081 </pre>
1082
1083 <p>
1084 如果你仍在往下读,那上面的可能没有问题。你也可以类似地设置待机(S1)。修改<path>sysfs-ram.conf</path>,把"UseSysfsPowerState
1085 men"改为"UseSysfsPowerState standby"。S3和S4是更有吸引力的睡眠状态,因为它们能节省更多的电量。
1086 </p>
1087
1088 </body>
1089 </section>
1090 <section>
1091 <title>休眠(S4)</title>
1092 <body>
1093
1094 <p>
1095 这部分介绍休眠,它把当前运行的系统的镜像在关机前写入磁盘。当恢复的时候,镜像就被加载,你就可以在你休眠前的工作点继续了。
1096 </p>
1097
1098 <warn>
1099 在休眠中不要改变不可热插拔的硬件。不要试图加载另外一个内核的镜像。在休眠前关闭任何NFS或sambla的服务端/客户端。
1100 </warn>
1101
1102 <p>
1103 现在有两个支持S4的方法。最初的一个是swsusp,另一个新的是带有漂亮界面(带有fbsplash支持)的tuxonice(之前的suspend2)。一份<uri
1104 link="http://tuxonice.net/features.html#compare">特性对比</uri>可以在<uri
1105 link="http://www.tuxonice.net">tuxonice主页</uri>上找到。曾经有一个挂起到硬盘(pmdisk),一个从swsusp分支出来的项目,后来又合并回去了。
1106 </p>
1107
1108 <p>
1109 TuxOnIce并未包含在主流的内核中,所以你既可以用<uri
1110 link="http://tuxonice.net">tuxonice.net</uri>提供的patch给内核打补丁,也可以用<c>sys-kernel/tuxonice-sources</c>。
1111 </p>
1112
1113 <p>
1114 swusp和TuxOnIce在内核中的部分如下:
1115 </p>
1116
1117 <pre caption="各种睡眠状态的内核设置">
1118 Power Management Options ---&gt;
1119 <comment>(hibernate with swsusp)</comment>
1120 [*] Software Suspend
1121 <comment>(replace /dev/SWAP with your swap partition)</comment>
1122 (/dev/SWAP) Default resume partition
1123
1124 <comment>(hibernate with TuxOnIce)</comment>
1125 Enhanced Hibernation (TuxOnIce)
1126 --- Image Storage (you need at least one writer)
1127 [*] File Writer
1128 [*] Swap Writer
1129 --- General Options
1130 [*] LZF image compression
1131 <comment>(replace /dev/SWAP with your swap partition)</comment>
1132 (swap:/dev/SWAP) Default resume device name
1133 [ ] Allow Keep Image Mode
1134 </pre>
1135
1136 <p>
1137 swsusp的设置非常简单。如果你没有把储存用的swap位置写在内核的配置中,就把它作为内核参数<c>resume=/dev/SWAP</c>直接传递。如果引导因为镜像损坏而不能运行,就用<c>noresume</c>内核参数。<c>hibernate-cleanup</c>启动脚本会使swsusp的镜像在启动中失效。
1138 </p>
1139
1140 <pre caption="使swsusp镜像在启动中失效">
1141 # <i>rc-update add hibernate-cleanup boot</i>
1142 </pre>
1143
1144 <p>
1145 激活swsusp的休眠,你需要在<path>/etc/hibernate/sysfs-disk</path>中设置<c>UseSysfsPowerState
1146 disk</c>并使用休眠脚本。
1147 </p>
1148
1149 <warn>
1150 在开始做这步之前备份你的数据。运行在下面的命令前执行<c>sync</c>将缓存的数据写入磁盘。首先在X外尝试,接着在X运行但没有登陆时。
1151 </warn>
1152
1153 <p>
1154 如果你遇到因为uhci或类似模块导致的内核的错误,试着将它们编译成模块,然后将它们卸载后再进入睡眠模式。其相应的设置在<path>common.conf</path>中。
1155 </p>
1156
1157 <pre caption="用swsusp休眠">
1158 # <i>nano -w /etc/hibernate/common.conf</i>
1159 <comment>(确定你已经备份好你的数据了)</comment>
1160 # <i>hibernate</i>
1161 </pre>
1162
1163 <p>
1164 接下来的部分讨论如何设置TuxOnIce在挂起和恢复中用漂亮的fbsplash。
1165 </p>
1166
1167 <p>
1168 前面的设置部分和swsusp类似。如果你没有把你swap分区的位置记录在内核配置中,你需要把它作为内核参数<c>resume=swap:/dev/SWAP</c>直接传递。如果内核因为损坏的镜像而不能启动,加上<c>noresume</c>参数。另外,<c>hibernate-cleanup</c>会让TuxOnIce的镜像在启动中失效。
1169 </p>
1170
1171 <pre caption="使TuxOnIce的镜像在启动中失效">
1172 # <i>rc-update add hibernate-cleanup boot</i>
1173 </pre>
1174
1175 <p>
1176 现在编辑<path>/etc/hibernate/suspend2.conf</path>,启动你需要的<c>TuxOnIce</c>选项。但现在先不要在<c>common.conf</c>中启用<c>fbsplash</c>选项。
1177 </p>
1178
1179 <pre caption="用TuxOnIce休眠">
1180 # <i>nano -w /etc/hibernate/suspend2.conf</i>
1181 <comment>(确定你已经备份好你的数据了)</comment>
1182 # <i>hibernate</i>
1183 </pre>
1184
1185 <p>
1186 请配置<c>fbsplash</c>,如果你还没有配置好。启用休眠中fbsplash的支持,你需要<c>sys-apps/tuxonice-userui</c>。另外,你需要启用<c>fbsplash</c>的USE标记。
1187 </p>
1188
1189 <pre caption="安装tuxonice-userui">
1190 # <i>echo "sys-apps/tuxonice-userui fbsplash" >> /etc/portage/package.use</i>
1191 <comment>(它可能被~arch屏敝屏蔽了,所以你需要为它启用keywords)</comment>
1192 # <i>echo "sys-apps/tuxonice-userui" >> /etc/portage/package.keywords</i>
1193 # <i>emerge tuxonice-userui</i>
1194 </pre>
1195
1196 <p>
1197 它的ebuild告诉你得生成一个链接到你想用的主题。例如,使用<c>livecd-2005.1</c>的主题,运行下面的命令:
1198 </p>
1199
1200 <pre caption="在休眠中使用livecd-2005.1的主题">
1201 # <i>ln -sfn /etc/splash/livecd-2005.1 /etc/splash/suspend2</i>
1202 </pre>
1203
1204 <p>
1205 如果你不想在最初恢复时看到黑屏,你就需要把<c>tuxoniceui_fbsplash</c>加到你的initrd镜像中。假设你用<c>splash_geninitramfs</c>生成了一个initrd镜像,并将其保存为<path>/boot/fbsplash-emergence-1024x768</path>,下面将告诉你怎样做。
1206 </p>
1207
1208 <pre caption="将tuxoniceui_fbsplash加到initrd中">
1209 # <i>mount /boot</i>
1210 # <i>mkdir ~/initrd.d</i>
1211 # <i>cp /boot/fbsplash-emergence-1024x768 ~/initrd.d/</i>
1212 # <i>cd ~/initrd.d</i>
1213 # <i>gunzip -c fbsplash-emergence-1024x768 | cpio -idm --quiet -H newc</i>
1214 # <i>rm fbsplash-emergence-1024x768</i>
1215 # <i>cp /usr/sbin/tuxoniceui_fbsplash sbin/</i>
1216 # <i>find . | cpio --quiet --dereference -o -H newc | gzip -9 > /boot/fbsplash-tuxonice-emergence-1024x768</i>
1217 </pre>
1218
1219 <p>
1220 之后调整一下<path>grub.conf</path>(或
1221 <path>lilo.conf</path>)使你的TuxOnIce内核使用<path>/boot/fbsplash-tuxonice-emergence-1024x768</path>作为initrd镜像。你可以测试一下看是否设置正确。
1222 </p>
1223
1224 <pre caption="fbsplash休眠测试">
1225 # <i>tuxoniceui_fbsplash -t</i>
1226 </pre>
1227
1228 <p>
1229 在打开<path>/etc/hibernate/common.conf</path>并激活fbsplash选项后。执行<c>hibernate</c>然后享受吧。
1230 </p>
1231
1232 </body>
1233 </section>
1234 </chapter>
1235
1236 <chapter>
1237 <title>常见问题</title>
1238 <section>
1239 <body>
1240
1241 <p>
1242 <e>问:</e>我试着改变CPU的主频,但是<path>/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor</path>不存在。
1243 </p>
1244
1245 <p>
1246 <e>答:</e>确认你的处理器支持降频且你选择了正确的CPU频率驱动。这里是一份cpufreq(内核2.6.7)支持的处理器清单:ARM
1247 Integrater、ARM-SA1100、ARM-SA1110、AMD Elan-SC400、SC410、AMD mobile K6-2+、AMD
1248 mobile K6-3+、AMD mobile Duron、AMD mobile Athlon、AMD Opteron、AMD Athlon
1249 64、Cyrix Media GXm、Intel mobile PIII及一些特定芯片组上的Intel mobile PIII-M、Intel
1250 Pentium 4、Intel Xeon、Intel Pentium M(Centrino)、National Semiconductors Geode
1251 GX、Transmeta Crusoe、VIA Cyrix 3/C3、UltraSPARC-III、SuperH
1252 SH-3、SH-4、许多"PowerBook"和"iBook2"及一些ACPI 2.0兼容系统上的处理器(当且仅当"ACPI Processor
1253 Performance States"对ACPI/BIOS可用的时候)。
1254 </p>
1255
1256 <p>
1257 <e>问:</e>我的笔记本支持降频,但<path>/sys/devices/system/cpu/cpu0/cpufreq/</path>是空的。
1258 </p>
1259
1260 <p>
1261 <e>答:</e>用<c>dmesg | grep
1262 ACPI</c>查看ACPI相关的错误信息。试着升级BIOS,特别有报告是DSDT损坏时。你也可以试着自己修复它(不在本篇的讨论范围内)。
1263 </p>
1264
1265 <p>
1266 <e>问:</e>我的笔记本支持降频,但根据<path>/proc/cpuinfo</path>主频并没有改变。
1267 </p>
1268
1269 <p>
1270 <e>答:</e>可能你在内核中启用了对称多处理器支持(CONFIG_SMP)。禁用它应该就可以了。一些旧的内核有一个bug导致这个问题。这种情况下,你可以执行<c>emerge
1271 x86info</c>,根据要求升级你的内核并用<c>x86info-mhz</c>检查CPU的主频。
1272 </p>
1273
1274 <p>
1275 <e>问:</e>我可以改变CPU的主频,但范围没有其他操作系统那么大。
1276 </p>
1277
1278 <p>
1279 <e>答:</e>你可以将降频和ACPI节流(throttling)结合使用来获得更小的最低频率。注意,节流并不会节省很多电量,它主要的用于热量管理的(让你的笔记本保持安静和较低的温度)。你可以通过<c>cat
1280 /proc/acpi/processor/CPU/throttling</c>来知道当前的节流,并通过<c> echo -n "0:x" >
1281 /proc/acpi/processor/CPU/limit</c>来设定,这里的x是<path>/proc/acpi/processor/CPU/throttling</path>中列出的Tx状态值中的一个。
1282 </p>
1283
1284 <p>
1285 <e>问:</e>当配置内核的时候,有pwersave,performance和userspace,但ondemand却没有。我在哪里可以找到它?
1286 </p>
1287
1288 <p>
1289 <e>答:</e>ondemand管理器仅在最近的内核中有,试着升级一下内核。
1290 </p>
1291
1292 <p>
1293 <e>问:</e>电池的使用时间好像比以前更差了。
1294 </p>
1295
1296 <p>
1297 <e>答:</e>检查一下你BIOS的设定。可能你忘了重新开启一些设定了。
1298 </p>
1299
1300 <p>
1301 <e>问:</e>我的电池已经充满,但KDE报告说仅剩0%的电量,然后迅速关机了。
1302 </p>
1303
1304 <p>
1305 <e>答:</e>检查一下你内核中的电池支持。如果你将它编译成模块,确认你已经加载它了。
1306 </p>
1307
1308 <p>
1309 <e>问:</e>我系统日志报告一些像这样的东西"logger: ACPI group battery / action battery is not
1310 definded"。
1311 </p>
1312
1313 <p>
1314 <e>答:</e>这条信息是由acpid的<path>/etc/acpi/default.sh</path>脚本生成的。你可以安全地忽略它。如果你想要去除它,你可以将相应的行从<path>/etc/acpi/default.sh</path>中注释掉,如下所示:
1315 </p>
1316
1317 <pre caption="禁用unkown acpi事情警告">
1318 *) # logger "ACPI action $action is not defined"
1319 </pre>
1320
1321 <p>
1322 <e>问</e>我有一台Dell Inspiron 51XX但我得不到任何ACPI事件。
1323 </p>
1324
1325 <p>
1326 这貌似是一个内核的bug。参见<uri
1327 link="http://bugme.osdl.org/show_bug.cgi?id=1752">这里</uri>。
1328 </p>
1329
1330 <p>
1331 <e>问:</e>我激活了<path>xorg.conf</path>中的<c>DynamicClocks</c>选项,结果现在X.org崩溃了/黑屏/我的笔记本不能正常关机。
1332 </p>
1333
1334 <p>
1335 <e>答:</e>这出现在一些系统上。你不得不禁用<c>DynamicClocks</c>。
1336 </p>
1337
1338 <p>
1339 <e>问:</e>我想用TuxOnIce,但它告诉我说我的swap分区太小了。但重新分区不可行。
1340 </p>
1341
1342 <p>
1343 <e>答:</e>如果你的系统中有足够大的空闲空间,你可以用文件形式(filewriter)而不用swap形式(swapwriter)。<c>hibernate-script</c>能很好地支持。更多的信息可以在<path>/usr/src/linux/Documentation/power/tuxonice.txt</path>中找到。
1344 </p>
1345
1346 <p>
1347 <e>问:</e>我刚刚买了一个新的电池,但它只持续了几分钟!我做错了什么?
1348 </p>
1349
1350 <p>
1351 <e>答:</e>首先按制造商的建议对电池正确充电。
1352 </p>
1353
1354 <p>
1355 <e>问:</e>上面的办法没有用。我还能做什么?
1356 </p>
1357
1358 <p>
1359 <e>答:</e>有一些电池声称是"新"的但实际上是旧的。试着这么做:
1360 </p>
1361
1362 <pre caption="检查电池的状态">
1363 $ <i>grep capacity /proc/acpi/battery/BAT0/info</i>
1364 design capacity: 47520 mWh
1365 last full capacity: 41830 mWh
1366 </pre>
1367
1368 <p>
1369 如果"last full capacity"和"design capacity"有很大的不同,你的电池很可能已经损坏了。试着要求保修吧。
1370 </p>
1371
1372 <p>
1373 <e>问:</e>我的问题没有在上面列出。我接下来应该怎么做?
1374 </p>
1375
1376 <p>
1377 <e>答:</e>不要担心直接联系我,<mail link="earthwings@g.o">Dennis
1378 Nienhüser</mail>。<uri link="http://forums.gentoo.org">Gentoo
1379 Forums</uri>也是一个获得帮助的好地方。如果你更喜欢IRC,试试<uri
1380 link="irc://irc.freenode.net">irc.freenode.net</uri>上的<c>#gentoo-laptop</c>频道。
1381 </p>
1382
1383 </body>
1384 </section>
1385 </chapter>
1386 </guide>
1387
1388
1389
1390
1391 --
1392 gentoo-commits@l.g.o mailing list