<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9099190218971358457</id><updated>2011-04-21T13:48:07.337-07:00</updated><category term='linux'/><category term='перевод'/><category term='proging'/><category term='python'/><category term='blogspot'/><title type='text'>I and my friend Gentoo</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-6274240191724123609</id><published>2009-01-31T01:43:00.000-08:00</published><updated>2009-01-31T07:05:00.616-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='proging'/><title type='text'>pyCaptcha</title><content type='html'>&lt;div class="cut" alt="О чём ваще пост?"&gt;&lt;h1&gt;Intro&lt;/h1&gt;&lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; - язык программирования.&lt;br /&gt;pyCaptcha - библиотка для него, позволяющая без труда делать &lt;a href="http://ru.wikipedia.org/wiki/CAPTCHA"&gt;капчи&lt;/a&gt;.&lt;br /&gt;Её код отлично коментирован, но, к сожалению, на этом документация и кончается. Ниже краткий обзор&lt;/div&gt;


&lt;h1&gt;Примеры сгенерированных картинок&lt;/h1&gt;
&lt;div class="images-tile"&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_AngryBackGimpy_0.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_AngryBackGimpy_1.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_AngryBackGimpy_2.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_PseudoBackGimpy_0.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_PseudoBackGimpy_1.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_PseudoBackGimpy_2.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_Smoothy_0.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_Smoothy_1.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;img src="http://4me.net.ru/ln/blog_data/2009_02_pycaptcha/out_pyCaptcha_Smoothy_2.png" width="300" height="100" alt="pyCaptcha example" /&gt;
&lt;/div&gt;


&lt;h1&gt;Сущности&lt;/h1&gt;
Основными сущностями являются слой и капча
&lt;DL&gt;
  &lt;DT&gt;Layer (Captcha.Visual.Base.Layer)
  &lt;DD&gt;Слой - это нечто, что можно наложить на картинку и получить другую картинку.
    &lt;br /&gt;Реализованны следующию виды слоёв (в скобках указаны аргументы конструктора):
    &lt;ul&gt;
      &lt;li&gt; &lt;b&gt;Фоновые (Captcha.Visual.Backgounds.*):&lt;/b&gt; 
          SolidColor(color="white"), 
          Grid(size=16, foreground="black"), 
          TiledImage(imageFactory=Pictures.abstract), 
          CroppedImage(imageFactory=Pictures.nature), 
          RandomDots(colors=("white", "black"), dotSize=4, numDots=400)
      &lt;/li&gt;
      &lt;li&gt; &lt;b&gt;Текстовые (Captcha.Visual.Text.*):&lt;/b&gt; 
          TextLayer(text, alignment=None, font=None, fontFactory=None, textColor="black", borderSize=0, borderColor="white") 
        &lt;/li&gt;
      &lt;li&gt; &lt;b&gt;Искажения (Captcha.Visual.Distortions.*):&lt;/b&gt; 
          WigglyBlocks(blockSize=16, sigma=0.01, iterations=300) сдвигает случайные блоки, 
          SineWarp(amplitudeRange=(3, 6.5), periodRange=(0.04,0.1)) 
      &lt;/li&gt;
    &lt;/ul&gt;

  &lt;DT&gt;Captcha
  &lt;DD&gt;Пакет предоставляет чистую абстракцию капчи - класс Captcha.Base.BaseCaptcha, умеющий исключительно сравнивать решение против правильных ответов. Причём и то, и другое может быть списком и ошибки первого и второго родов можно задать при наследовании (по умолчанию, требуется единственный, правильный ответ).
&lt;br /&gt; От него наследует класс Captcha.Visual.Base.ImageCaptcha. Практический интерес представляют методы getLayers, возвращающий список объектов-слоёв, и render, возвращающий &lt;a href="http://www.pythonware.com/products/pil/"&gt;PIL-изображение&lt;/a&gt;.

&lt;/DL&gt;

Также имеется несколько вспомагательных классов
&lt;DL&gt;

  &lt;DT&gt;Captcha.Visual.Base.ImageFactory
  &lt;DD&gt;Предоставляют случайную картинку из указанной директории. В комплект входят два объекта этого класса: abstract и nature. Передаются в конструкторы слоёв TiledImage и CroppedImage

  &lt;DT&gt;Captcha.Base.WordList
  &lt;DD&gt;Читает файл со словами и по методу pick выдаёт случайное. Удобно использовать при генерации вопроса-ответа. Предопределены словари basic_english и basic_english_restricted - второй есть ограничение первого на слова от пяти до восьми символов включительно.

  &lt;DT&gt;Captcha.Visaul.Text.FontFactory
  &lt;DD&gt;Принимает список шрифтов, и  диапазон допустимых размеров. По методу pick возвращает пару (fileName, size), которую можно передать ImageFont.truetype().  Предопределен объект defaultFontFactory - шрифт vera и размеры от 30 до 40.

  &lt;DT&gt;Captcha.Base.Factory, Captcha.Base.PersistentFactory
  &lt;DD&gt;Предоставляют базовые возможности по хранению капч, следят за соблюдением таймаутов
&lt;/DL&gt;

&lt;h1&gt;Получение пакета. Пример создания капчи&lt;/h1&gt;
Последнюю версию можно получить с svn. 
&lt;pre&gt;&lt;code&gt;
$ svn co http://svn.navi.cx/misc/trunk/pycaptcha/
$ find -name .snv -delete
&lt;/code&gt;&lt;/pre&gt;

Ниже приведён файл, генерирующий капчи выше, класть в папку pycaptcha

&lt;div class="hcode"&gt;
&lt;pre&gt;&lt;code class="python"&gt;
#!/usr/bin/env python

from Captcha.Visual import Text, Backgrounds, Distortions, ImageCaptcha


class PseudoBackGimpy(ImageCaptcha):
    def __init__(self, word, *args, **kwargs):
        self.word = word
        super(PseudoBackGimpy, self).__init__(*args, **kwargs)
    def getLayers(self):
        word = self.word
        return [
            Backgrounds.CroppedImage(),
            Text.TextLayer(word, borderSize=1),
            Distortions.SineWarp(),
            ]


class AngryBackGimpy(ImageCaptcha):
    def __init__(self, word, *args, **kwargs):
        self.word = word
        super(AngryBackGimpy, self).__init__(*args, **kwargs)
    def getLayers(self):
        word = self.word
        return [
            Backgrounds.TiledImage(),
            Backgrounds.RandomDots(),
            Text.TextLayer(word, borderSize=2),
            Distortions.WigglyBlocks(),
            ]
        
class Smoothy(ImageCaptcha):
    def __init__(self, word, *args, **kwargs):
        self.word = word
        super(Smoothy, self).__init__(*args, **kwargs)
    def getLayers(self):
        word = self.word
        return [
            Backgrounds.SolidColor(),
            Backgrounds.Grid(),
            Backgrounds.RandomDots(),
            Text.TextLayer(word, borderSize=3),
            Backgrounds.RandomDots(),
            Distortions.SineWarp(),
            ]

word = 'pyCaptcha'
examples_count = 3
size = (300,100)
klasses = [PseudoBackGimpy, AngryBackGimpy, Smoothy, ]
for klass in klasses:
    for current in range(examples_count):
        captcha = klass(word)
        img = captcha.render(size)
        img.save('_'.join(['out', word, str(klass.__name__), str(current)+".png"]))

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-6274240191724123609?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/6274240191724123609/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=6274240191724123609' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/6274240191724123609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/6274240191724123609'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2009/01/pycaptcha.html' title='pyCaptcha'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-267583622235300950</id><published>2008-06-23T14:34:00.000-07:00</published><updated>2008-06-23T14:36:01.186-07:00</updated><title type='text'>(на память)</title><content type='html'>Если после перехода на firefox3 сессии перестали сохраняться, попробуйте зайти в about:config и устанвить значение browser.sessionstore.enabled равным true.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-267583622235300950?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/267583622235300950/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=267583622235300950' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/267583622235300950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/267583622235300950'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2008/06/blog-post.html' title='(на память)'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-5351701570250314981</id><published>2008-05-11T09:39:00.000-07:00</published><updated>2008-06-09T09:16:11.533-07:00</updated><title type='text'>Тараканы в космосе</title><content type='html'>Обнаружил удивительный баг - если из-под непривилегированного пользователя с русской локалью выполнить sudo screen (а системная локаль - английская), то русский ввод/вывод непредсказуемо глючит. Лечиться - sudo screen -U, либо добавлением соотвествующего "алиаса" в usr/local/bin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-5351701570250314981?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/5351701570250314981/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=5351701570250314981' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/5351701570250314981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/5351701570250314981'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2008/05/blog-post.html' title='Тараканы в космосе'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-7051101547604738212</id><published>2008-03-26T12:10:00.001-07:00</published><updated>2008-06-09T09:15:18.469-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogspot'/><title type='text'>Cut для blogspot</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;Факт: blogger.com не умеет делать cut хоть сколько-нибудь элегантно. Погуглив, нашёл &lt;a href='http://thegeekbird.blogspot.com/2007/12/cut-blogger.html'&gt;решение от PhoeniX'a&lt;/a&gt;, основанное на сворачивании блоков с классом "cut" посредством и динамическом из разворачивании яваскриптов. В нём были две вещи, которые мне не очень нравились. Во-первых, человек без яваскрипта не видел ни кнопку развернуть, ни остатка текста. Ну и чисто из идеалогических соображений, мне не нравилаль необходимость лезть в скрипт, чтоб поменять картинки.&lt;/p&gt;

&lt;p&gt;Моя версия работает вообще без картинок, и позволяет указывать текст для ката. Установка почти аналогична установке скрипта-оригинала.&lt;/p&gt;

&lt;div class='h5_list'&gt;
&lt;h5&gt;1. Необходимо подключить библиотеку jquery и сам скрипт сворачивания. Также надо добавить стили для кат-блока (класс cut) и блока с кат-надписью (класс cut_toogle_text). &lt;/h5&gt;

&lt;div class='hcode'&gt;&lt;pre&gt;&lt;code class="www"&gt;
&amp;lt;script type='text/javascript' src='http://jqueryjs.googlecode.com/files/jquery-1.2.1.pack.js'/&amp;gt;
&amp;lt;script type='text/javascript' src='http://4me.net.ru/ln/script4blogger2_noimgs.js'/&amp;gt;
&amp;lt;style&amp;gt;
&amp;lt;b:if cond='data:blog.pageType != &amp;quot;item&amp;quot;'&amp;gt;
BODY.js .cut {display:none;}
&amp;lt;b:else/&amp;gt;
.cut {display: block;}
&amp;lt;/b:if&amp;gt;
.cut_toogle_text  {color: #336699; cursor: pointer; display: inline; font-weight: bold;}
.cut_toogle_text:hover  { text-decoration: underline;}
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Внимание, мой скрипт для ката является "живым", так что если вы ссылаетесь на него, и вдруг начнут выскакивать алерты -  не пугайтесь ;)&lt;/p&gt;

&lt;h5&gt;2. Далее, надо сделать так, чтоб при загрузке к BODY добавлялся класс js (чтоб каты сворачивались).&lt;/h5&gt; 
&lt;p&gt;Для этого сразу &lt;b&gt;после&lt;/b&gt; тэга BODY добавьте: &lt;/p&gt;


&lt;div class='hcode'&gt;&lt;pre&gt;&lt;code&gt;
&amp;lt;script type='text/javascript'&amp;gt;
   $("BODY").addClass("js");
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;3. Теперь сделаем так, чтоб в посте, открытом отдельно, ничего не сворачивалось.&lt;/h5&gt;
&lt;p&gt;Поставьте галочку на пункте "Расширить шаблоны виджета" и замените строку &amp;lt;data:post.body/&amp;gt; на&lt;/p&gt;

&lt;div class='hcode'&gt;&lt;pre&gt;&lt;code class="www"&gt;
&amp;lt;b:if cond='data:blog.pageType != &amp;quot;item&amp;quot;'&amp;gt;
&amp;lt;div expr:id='data:post.id' class='pxpostwrap'&amp;gt;
&amp;lt;data:post.body/&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;b:else/&amp;gt;
&amp;lt;data:post.body/&amp;gt;
&amp;lt;/b:if&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;4. Осталось добавить кат-блог&lt;/h5&gt;
&lt;p&gt;Оберните часть поста, которую надо свернуть, в div блок с классом cut. Если хотите, можете переопределить кат-надпись в атрибуте alt&lt;/p&gt;
&lt;div class='hcode'&gt;&lt;pre&gt;&lt;code class="html"&gt;
&amp;lt;div class="cut" alt="Здесь будет cut"&amp;gt;
Этот текст будет свёрнут.
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ну и напоследок, пример использования и текст текущей версии скрипта&lt;/p&gt;
&lt;div alt='Скрипт' class='cut'&gt;

&lt;div class='hcode'&gt;&lt;pre&gt;&lt;code class="javascript"&gt;
/*
Published under GNU GPL2
Author Leonid "PhoeniX" Ponomarev
Edited by Vah aka Anton Bakhtin 
*/
$(document).ready(initCut);

var cut_settings={'more_text': 'Читать далее...', 'less_text': 'Свернуть'};

function initCut()
{
 $("div.pxpostwrap div.cut").each(function(){
  var alt=$(this).attr('alt');
  if (!alt) alt=cut_settings['more_text'];
  pc=$("P", this).size(); var pc_string="абзацев";
  if (pc%10==1) pc_string="абзац";
  if (pc%10==2 || pc%10==3 || pc%10==4) pc_string="абзаца";
  alt=alt + " (" +pc + " " + pc_string + ")";
  $(this).after("&amp;lt;div class=\"cut_toogle_text\" alt=\"" + alt + "\"&amp;gt;" + alt + "&amp;lt;/div&amp;gt;");
 });
 $("div.cut_toogle_text").toggle(
  function(){
   $(this).text("Загрузка...").prev().fadeIn("slow",
    function(){$(this).next().text(cut_settings['less_text']);}
   );
  },
  function(){
    $(this).prev().fadeOut("fast");
    $(this).text($(this).attr("alt"));
  }
 );
}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-7051101547604738212?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/7051101547604738212/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=7051101547604738212' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/7051101547604738212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/7051101547604738212'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2008/03/cut-blogspot.html' title='Cut для blogspot'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-4912344145002288792</id><published>2008-03-05T05:45:00.000-08:00</published><updated>2008-03-05T06:58:52.465-08:00</updated><title type='text'>sk1 ebuild</title><content type='html'>&lt;p&gt;В январском (русском) номере LinuxFormat была статья о чудо векторном редакторе sk1, умеющим с лёгкостью открывать ai. Это надо было попробовать. Однако команда eix sk1 выдала (sic!): "No matches found."&lt;/p&gt;

&lt;p&gt;Что ж, не можешь - поможем, не хочешь - заставим.&lt;/p&gt;

&lt;p&gt;Сайт проекта &lt;a href="http://sk1project.org/modules.php?name=Products"&gt;также не предлагал&lt;/a&gt; варианта, для Gentoo, поэтому пришлось писать ebuild.&lt;/p&gt;

&lt;p&gt;Итак, инструкция по применению. &lt;/p&gt;
&lt;div class="h5_list"&gt;
&lt;h5&gt;1. Создать локальный overlay&lt;/h5&gt;
&lt;p&gt;Например, создадим его в папке /usr/local/portage, и добавим к списку известных portage&lt;/p&gt;
&lt;div class="hcode"&gt;&lt;pre&gt;&lt;code class="no-highlight"&gt;
# mkdir -p /usr/local/portage
# echo "PORTDIR_OVERLAY=\"/usr/local/portage/ \${PORTDIR_OVERLAY}\"" &gt;&gt; /etc/make.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;2. Положить туда ebuild sk1&lt;/h5&gt;
&lt;div class="hcode"&gt;&lt;pre&gt;&lt;code class="no-highlight"&gt;
# cd /usr/local/portage/
# wget http://4me.net.ru/ln/sk.tar.gz
# tar -xvzf sk.tar.gz
# rm sk.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;3. Размаскирование необходимых пакетов&lt;/h5&gt;
&lt;p&gt;sK1 требует tk и tcl ветки 8.5, которые жёстко маскированы. Кроме того маскрирован (на всяких случай) и сам sk1. На момент написания поста, в портежах были только версии 8.5.1, поэтому в примере расмаскируются именно они.&lt;/p&gt;
&lt;div class="hcode"&gt;&lt;pre&gt;&lt;code class="no-highlight"&gt;
# echo -e "=dev-lang/tcl-8.5.1\n=dev-lang/tk-8.5.1\nmedia-gfx/sK1" &gt;&gt; /etc/portage/package.keywords
# echo -e "=dev-lang/tcl-8.5.1\n=dev-lang/tk-8.5.1" &gt;&gt; /etc/portage/package.unmask  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;4. Добавление use флагов&lt;/h5&gt;
&lt;p&gt;Для корректной работы программы также необходимо, чтобы python был собран с USE-флагом tk, а media-libs/lcms с флагом python. Если это не так - добавьте их в make.conf или package.use и пересоберите пакеты:&lt;/p&gt;
&lt;div class="hcode"&gt;&lt;pre&gt;&lt;code class="no-highlight"&gt;
# echo "dev-lang/python tk" &gt;&gt; /etc/portage/package.use
# echo "media-libs/lcms python" &gt;&gt; /etc/portage/package.use
# emerge -Nuva dev-lang/python media-libs/lcms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;5. Установка sK1&lt;/h5&gt;
&lt;div class="hcode"&gt;&lt;pre&gt;&lt;code class="no-highlight"&gt;
# emerge -av sK1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Вот, собственно, и все. Чтобы запустить редактор, наберите sk1.&lt;/p&gt;

&lt;p&gt;Критика и сообщения о корявости ebuild'а - приветствуются!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-4912344145002288792?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/4912344145002288792/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=4912344145002288792' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/4912344145002288792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/4912344145002288792'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2008/03/sk1-ebuild.html' title='sk1 ebuild'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-6427970960092443633</id><published>2008-02-28T12:42:00.000-08:00</published><updated>2008-03-26T05:10:46.724-07:00</updated><title type='text'>Виртуальные apache домены автоматом</title><content type='html'>&lt;p&gt;Есть у меня привычка, для каждого сайта создавать отдельный локальный "домен". И было это легко делать в винде, ибо там есть &lt;a href="http://www.denwer.ru/"&gt;денвер&lt;/a&gt;. Он на лету генерировал apache-кофиги и прописывал хосты в hosts в зависимости от структуры каталогов.&lt;/p&gt;
&lt;p&gt;Например, из следующего дерева каталогов получаются домены dom1, www.dom1, sub1.dom1, sub2.dom1, another.dom, www.another.dom, причём dom1=www.dom1, another.dom=www.another.dom&lt;/p&gt;
&lt;pre&gt;
dom1/
  sub1/
  sub2/
  www/
another.dom/
  www/
&lt;/pre&gt;
&lt;div class="cut"&gt;
&lt;p&gt;Чтобы сделать такое же в линуксе, я написал маленький скрипт. Чтобы использовать его, необходимо произвести нексолько простых операций&lt;/p&gt;
&lt;div class="hcode"&gt;
&lt;pre&gt;&lt;code class="no-highlight"&gt;
# echo 'Include /etc/apache2/vhosts.d/autogenerated/*.conf' &gt; /etc/apache2/vhosts.d/autogenerated.conf
# mkdir /etc/apache2/vhosts.d/autogenerated
# touch /usr/local/sbin/host_generator &amp;&amp; chmod +x /usr/local/sbin/host_generator
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Файл /usr/local/sbin/host_generator приведен ниже. &lt;/p&gt;
&lt;p&gt;Перед стартом, проверьте свой /etc/hosts и запишите домены, отвечающие узлу 127.0.0.1 в &lt;var&gt;DEFAULT_LOCALHOSTS&lt;/var&gt;. Также поправьте &lt;var&gt;APACHE_HOME_DIR&lt;/var&gt;, если путь к файлам сервера отличается от "/var/www/".&lt;/p&gt;
&lt;p&gt;По умолчанию, скрипт рассматривает все подкаталоги как поддомены. Это поведение можно изменить редактированием файлов &lt;var&gt;ACCEPTED_HOSTS&lt;/var&gt; и &lt;var&gt;FORBIDDEN_HOSTS&lt;/var&gt;. По умолчанию FORBIDDEN_HOSTS пуст, а ACCEPTED_HOSTS содерижит единственную всё-разрешающую запись: */* . Взять скрипт отдельным файлом можно &lt;a href="http://4me.net.ru/ln/hag.sh"&gt;здесь&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;div class="hcode"&gt;
&lt;b class="caption"&gt;/usr/local/sbin/host_generator&lt;/b&gt;
&lt;pre&gt;&lt;code class="bashscript"&gt;
#!/bin/bash

###### НАЧАЛО КОНФИГУРАЦИИ
# Будут добавленны все разрешённые, не запрещённые хосты
ACCEPTED_HOSTS="/root/.hag_accepted.conf"
FORBIDDEN_HOSTS="/root/.hag_forbidden.conf"
APACHE_HOME_DIR="/var/www/"
APACHE_CONFS_DIR="/etc/apache2/vhosts.d/autogenerated/"
DEFAULT_LOCALHOSTS="localhost"
BE_VERBOSE=false
###### КОНЕЦ КОНФИГУРАЦИИ



if [ "$UID" -ne 0 ]
then 
 echo "Superuser rights is required"
 exit 2
fi

genApacheConf(){
 if [[ "$2" = "www" ]]
 then 
  full_domain=$1
 else
  full_domain=$2.$1
 fi 
 host_root="${APACHE_HOME_DIR}$1/$2"
 echo -e "# Host $1/$2 :"
 echo -e "&amp;lt;VirtualHost *:80&amp;gt;"
 echo -e "\tServerName \"$full_domain\""
 echo -e "\tServerAlias \"$full_domain\" \"www.$full_domain\""
 echo -e "\tDocumentRoot \"${host_root}\""

 echo -e "\t&amp;lt;Directory \"${host_root}\"&amp;gt;"
 echo -e "\t\tOptions Indexes FollowSymLinks"
 echo -e "\t\tAllowOverride All"
 echo -e "\t\tOrder allow,deny"
 echo -e "\t\tAllow from all"
 echo -e "\t&amp;lt;/Directory&amp;gt;"
 echo "&amp;lt;/VirtualHost&amp;gt;"
 echo
}


# Очищение $APACHE_CONFS_DIR
find "${APACHE_CONFS_DIR}" -mindepth 1 -exec rm -v \{\} &amp;gt; /dev/null \; || { echo "(EE) При очистке ${APACHE_CONFS_DIR} произошла ошибка"; exit 1; }


# Читаем настройки
if [ ! -e $ACCEPTED_HOSTS ]
then
 [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "Создаётся файл '$ACCEPTED_HOSTS'"
 echo '*/*' &amp;gt; $ACCEPTED_HOSTS || { echo "(EE) Невозможно создать $ACCEPTED_HOSTS"; exit 1; }
fi
if [ ! -e $FORBIDDEN_HOSTS ]
then
 [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "Создаётся файл '$FORBIDDEN_HOSTS'"
 touch $FORBIDDEN_HOSTS || { echo "(EE) Невозможно создать $FORBIDDEN_HOSTS"; exit 1; }
fi


set -f
accepted_hosts=( $(cat $ACCEPTED_HOSTS))
forbidden_hosts=( $(cat $FORBIDDEN_HOSTS) )

found_doms=( )
found_sub_doms=( )
hosts=$(ls $APACHE_HOME_DIR)
hosts_to_attach=""
for host in $hosts
do
 subdoms=$(find ${APACHE_HOME_DIR}${host}/ -maxdepth 1  -mindepth 1 -type d -or -type l | grep -Po "[^/]+$")
 has_accpepted_doms=false
 for sd in ${subdoms[@]}
 do
  accepted=false
  [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "-------- $host/$sd"
  for pattern in ${accepted_hosts[@]}
  do
   echo "$host/$sd" | grep -qP "^${pattern//\*/[^/]*}\$"
   if [ $? = 0 ] 
   then
    [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "--- Путь '$host/$sd' разрешён правилом $pattern"
    accepted=true
    break
   fi
  done
  if [ $accepted != true ]; then continue; fi;
  forbidden=false
  for pattern in ${forbidden_hosts[@]}
  do
   echo "$host/$sd" | grep -qP "^${pattern//\*/[^/]*}\$"
   if [ $? = 0 ] 
   then
    [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "--- Путь '$host/$sd' запрещён правилом $pattern"
    accepted=true
    forbidden=true
    break
   fi
  done
  if [ $forbidden != true ]
  then
   has_accpepted_doms=true
   found_sub_doms=( ${found_sub_doms[@]} "$host/$sd" )
  fi
 done
 if [ $has_accpepted_doms = true ]
 then
  found_doms=( ${found_doms[@]} "$host" )
 fi
done

[ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo
hosts_to_attach=""
for dom in ${found_doms[@]}
do
 [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "----&amp;gt; Добавляем домен $dom"
  hosts_to_attach+=" $dom"
 for sd_full in ${found_sub_doms[@]}
 do
  host=${sd_full/\/*/}
  if [ "$host" != "$dom" ]; then continue; fi
  sd=${sd_full/*\//}
  [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "----&amp;gt; Добавляем поддомен $sd.$host"
   hosts_to_attach+=" $sd.$host"
   [ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo "------&amp;gt; Записываем apache конфигурацию в файл ${APACHE_CONFS_DIR}${host}_${sd}.conf"
   genApacheConf $host $sd &amp;gt; ${APACHE_CONFS_DIR}${host}_${sd}.conf || { echo "EE ------&amp;gt; Ошибка при записи в ${APACHE_CONFS_DIR}${host}_${sd}.conf!"; exit 1; }
 done
done
[ $BE_VERBOSE = true ] &amp;amp;&amp;amp; echo
 
echo "Найдены поддомены ${found_sub_doms[@]}"

[ $BE_VERBOSE = true ] &amp;amp;&amp;amp; { echo; echo "&amp;gt; Обновляем /etc/hosts"; }
comment_string="# Autogenerated by $0, don't edit manualy"
resulted_string="${comment_string}\n127.0.0.1 ${DEFAULT_LOCALHOSTS}${hosts_to_attach}\n"
new_hosts=$(awk -v ress="${resulted_string}" -v coms="${comment_string}" 'BEGIN {n=1}; /^127.0.0.1/ {if (n == 1) printf ress; else print "#",$0 ; n = n + 1}; !/^127.0.0.1/ {if ($0!=coms) print};'  /etc/hosts)

{ echo "$new_hosts" &amp;gt; /etc/hosts; } || { echo "(EE) Невозможно записать в /etc/hosts"; exit 1; }
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-6427970960092443633?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/6427970960092443633/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=6427970960092443633' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/6427970960092443633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/6427970960092443633'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2008/02/apache.html' title='Виртуальные apache домены автоматом'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-314859240917842100</id><published>2008-02-08T07:38:00.000-08:00</published><updated>2008-03-25T10:05:04.952-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='перевод'/><title type='text'>Управление питанием компьютера</title><content type='html'>&lt;p&gt;Перевод статьи &lt;a href="http://www.gentoo.org/doc/en/power-management-guide.xml"&gt;Power Management Guide&lt;/a&gt;. В статье рассматриваются способы увеличения жизни ноутбука от батареи. Статья ориентирована на Gentoo, но думаю, сделав замену emerge на apt-get install/rpm -Uvh/.. и обладая общими знаниями о runlevels в вашей системе, можно всё написанное перенести и на другие дистрибутивы.&lt;/p&gt;

&lt;h1&gt;1. Введение&lt;/h1&gt;
&lt;p&gt;Ёмкость и время жизни батереи ноутбуков были значительно увеличены в последние годы. Тем не менее, современные процессоры потребляют намного больше энергии, чем более старые, и каждое новое поколение ноутбуков комплектуется всё более и более жадными до энергии устройствами. Поэтому Управление Питанием становится даже более важным, чем прежде. Увеличение времени автономной жизни совсем не обязательно влечёт покупку ещё одной батареи - многое можно выжать, применяя граммотные установки Управления Питанием.&lt;/p&gt;

&lt;h2&gt;Краткий обзор&lt;/h2&gt;

&lt;p&gt;Пожалуйста, учтите, что данное руководство описывает настройку Управления Питанием только для &lt;i&gt;ноутбуков&lt;/i&gt;. Хотя некоторые разделы и могут быть также применимы к серверам, другие - не только не применимы, но могут даже нанести урон. Не стоит делать что-либо без понимания того, что вы делаете.&lt;/p&gt;
&lt;p&gt;
Так как это руководство стало достаточно длинным, ниже приведён краткий обзор, который поможет вам не запутаться среди стольких букв.
&lt;/p&gt;
&lt;p&gt;В главе &lt;a href="#prerequisite"&gt;Подготовка&lt;/a&gt; говорится о некоторых общих действиях, которые необходимо выполнить перед настройкой отдельных устройств. Это включает настройку BIOS, конфигурацию ядра и некоторые изменения пользовательских настроек. Следующие три главы сфокусированы на устройствах, обычно потребляющих больше всего энергии - процессоре, дисплее и жёстком диске. Каждое из них может быть сконфигурированно независимо. Глава &lt;a href="#cpu"&gt;Управление Питанием ЦПУ&lt;/a&gt; показывает, как изменять частоту процессора для сохранения максимального количества энегрии, не теряя слишком много в производительности. Несколько способов отучить ваш жёсткий диск работать зазря (тем самым заодно уменьшив шум) можно найти в &lt;a href="#harddrive"&gt;Управлении Питанием Диска&lt;/a&gt;. Некоторые заметки о графических картах, безпроводных сетях и USB завершают раздел об устройствах главой &lt;a href="#other"&gt;Управелние Питанием Других Устройств&lt;/a&gt;. Отделаная глава отведена (довольно не стабильным) &lt;a href="#sleepstates"&gt;состояниям спячки&lt;/a&gt; (sleep states). Последний раздел, &lt;a href="#troubleshooting"&gt;Устранение неполадок&lt;/a&gt;, содержит список самых распространённых проблем.
&lt;/p&gt;
&lt;!--  --&gt;
&lt;div class="cut" alt="Продолжение статьи"&gt;
&lt;h2&gt;Покомпонентное распределение энергии&lt;/h2&gt;
&lt;img id="energy-budget" class="float_left" src="http://www.gentoo.org/images/energy-budget.png" width="259" height="178" alt="Покомпонентное распределение энергии" /&gt;
&lt;p&gt;Почти каждый элемент может находиться в различных положениях - выключен, спит, ждёт, активен - потребляя различное количество энергии. Наибольшие куску отъедаются экраном, проыессором, чипсетом и жёсткими дисками. Часто устройство может быть переведено в ОС-независимый режим Управления Питнием через биос, но интеллектуальные средства операционной системы, реагирующие на ситуацию, могут принести намного больше.
&lt;/p&gt;

&lt;h1 class="cleared" id="prerequisite"&gt;2. Подготовка&lt;/h1&gt;
&lt;p&gt;
Перед детальным обсуждением настройки Управления Питанием для отдельных устройств, стоит убедиться, что следующие требования выполнены. После проверки установок BIOS, стоит включить некоторые опции в ядре (если коротко, то это - ACPI, режимы спячки и регулирование частоты ЦП). Так как сохранение энергии в большинстве случаев влечёт потери производительности, то его стоит применять только при работе от батарей. Для этого разграничения очень полезен отдельный уровень запуска (runlevel) &lt;var&gt;battery&lt;/var&gt;.
&lt;/p&gt;

&lt;h2&gt;BIOS&lt;/h2&gt;
&lt;p&gt;
Для начала стоит взглянуть на настроки Управления Питания в BIOS. Наилучшее решение - совмещать возможности BIOS  и операционной системы. Но чтобы быть увереными, что BIOS не будет конфликтовать с операционной ситемой, лучше пока отключить бОльшую часть его настроек по управленю питанием. Не забудьте перепроверить настройки биоса после конфигурации чего-либо ещё.
&lt;/p&gt;

&lt;h2&gt;Настройка USE-флагов&lt;/h2&gt;
&lt;p&gt;
Убедитесь, что &lt;var&gt;acpi&lt;/var&gt; USE-флаг установлен в вашем &lt;span class="path"&gt;/etc/make.conf&lt;/span&gt;. Так же в вашей системе могут быть уместны флаги &lt;var&gt;apm&lt;/var&gt;, &lt;var&gt;lm_sensors&lt;/var&gt;, &lt;var&gt;nforce2&lt;/var&gt;, &lt;var&gt;nvidia&lt;/var&gt;, &lt;var&gt;pmu&lt;/var&gt;. Подробно об этих флагах смотрите в &lt;span class="path"&gt;/usr/portage/profiles/use*.desc&lt;/span&gt;. Если вы забыли выставить один из этих флагов, вы можете перекомпилировать необходимые пакеты командой &lt;var&gt;emerge --deep --update --newuse world&lt;/var&gt;, подробности в &lt;var&gt;man emerge&lt;/var&gt;.
&lt;/p&gt;

&lt;h2&gt;Конфигурация ядра&lt;/h2&gt;
&lt;p&gt;
Работа над поддержкой ACPI (Advanced Configuration and Power Interface) в ядре всё ещё не закончена. Используя последнее ядро, вы получаете самую свежую её версию.
&lt;/p&gt;
&lt;p&gt;
В портэжах (portage) содержится несколько версий ядра. Я бы рекомендовал использовать &lt;var&gt;gentoo-sources&lt;/var&gt; или &lt;var&gt;suspend2-sources&lt;/var&gt;. Последнее содержит патчи для Програмной&amp;nbsp;Остановки&amp;nbsp;2 (Software Suspend 2), смотрите главау о &lt;a href="#sleepstates"&gt;режимах спички&lt;/a&gt; за подробностями. Во время конфигурации ядра включите хотя бы эти опции:
&lt;/p&gt;
&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.1: Минимальные настройки ядра для Управления Питанием (приведено для ядра 2.6.23)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
Power Management Options ---&gt;
  [*] Power Management Support
  [ ] Software Suspend

  [*] ACPI( Advanced Configuration and Power Interface ) Support ---&gt;
    --- ACPI Support (Advanced Configuration and Power Interface) Support
    [*]   Deprecated /proc/acpi files 
    [*]   Deprecated /proc/acpi/event support 
    [ ]   Sleep States
    [ ]     /proc/acpi/sleep (deprecated)
    [*]   AC Adapter
    [*]   Battery
    &amp;lt;M&amp;gt;   Button
    &amp;lt;M&amp;gt;   Video
    &amp;lt;M&amp;gt;   Fan
    &amp;lt; &amp;gt;   Dock
    &amp;lt;M&amp;gt;   Processor
    &amp;lt;M&amp;gt;     Thermal Zone
    &amp;lt; &amp;gt;   ASUS/Medion Laptop Extras
    &amp;lt; &amp;gt;   IBM ThinkPad Laptop Extras
    &amp;lt; &amp;gt;   Toshiba Laptop Extras
    (0)   Disable ACPI for systems before Jan 1st this year
    [ ]   Debug Statements
    [*]   Power Management Timer Support
    &amp;lt; &amp;gt;   ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)
    &amp;lt; &amp;gt;   Smart Battery System (EXPERIMENTAL)

  CPU Frequency Scaling ---&gt;
    [*] CPU Frequency scaling
    [ ]   Enable CPUfreq debugging
    &amp;lt; &amp;gt;   CPU frequency translation statistics
    [ ]     CPU frequency translation statistics details
          Default CPUFreq governor (userspace)
    &amp;lt;*&amp;gt;   'performance' governor
    &amp;lt;*&amp;gt;   'powersave' governor
    &amp;lt;*&amp;gt;   'ondemand' cpufreq policy governor
    &amp;lt;*&amp;gt;   'conservative' cpufreq governor
    &amp;lt;*&amp;gt;   CPU frequency table helpers
    &amp;lt;M&amp;gt; ACPI Processor P-States driver
    &amp;lt;*&amp;gt; &lt;em&gt;CPUFreq driver for your processor&lt;/em&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p class="note"&gt;
Примечание переводчика: поддержка '/proc/acpi' и '/proc/acpi/event' в ядре 2.6.23 была помечена нерекомендуемой (deprecated), в связи с изменением acpi-интерфейса (подробнее см. на &lt;a href="http://www.kernel.org/doc/menuconfig/drivers-acpi-Kconfig.html"&gt;kernel.org&lt;/a&gt;), но она необходима для acpid, который пока "не приспособился" к /sys интерфейсу.
&lt;/p&gt;
&lt;p&gt;
Решите для себя, хотите ли вы включать Програмную&amp;nbsp;Остановку и Состояния Спячки (см. ниже). Если у вас ноутбук ASUS, Medion, IBM Thinkpad или Toshiba, но активируйти соответствующий пункт.
&lt;/p&gt;

&lt;p&gt;
Ядро должно знать, как включить изменение частоты процессора. Так как разные типы ЦП имеют разные интерфейсы, стоит выбрать правильный дравер для процессора. Будьте осторожны - включение, например, &lt;var&gt;Intel Pentium 4 clock modulation&lt;/var&gt; на Pentium M приведёт странному поведению системы. Обратитесь к документации по ядру, если вы не знаете, что выбрать. 
&lt;/p&gt;

&lt;p&gt;
Скомпилируйте полученное поддерживающее ACPI ядро; убедитесь, что необходимые модули подгружаются при старте системы. Далее запустите &lt;var&gt;emerge sys-power/acpid&lt;/var&gt;, чтобы получить acpi-демона. Он сообщает вам о событиях (event) таких, как переключение с питания от сети на батарею или закрытие крышки ноутбука. Убедившись, что модули запущены (если вы не скомпилировали их как часть ядра), запустите acpid командой &lt;var&gt;/etc/init.d/acpid start&lt;/var&gt;. Выполните &lt;var&gt;rc-update add acpid default&lt;/var&gt;, чтобы демон автоматически запускался при старте системы. Вы скоро узнаете, как использовать его.
&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.2: Установка acpid&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# emerge sys-power/acpid
# /etc/init.d/acpid start
# rc-update add acpid default
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h2&gt;Создание уровня запуска (runlevel) "battery"&lt;/h2&gt;
&lt;p&gt;
Политики (policy) по умолчанию будут включать Управление Питанием, только когда это необходимо, т.е. при работе от батереи. Чтобы сделать переключение между питанием от сети и питанием от батарей более удобным, создайте уровень запуска &lt;var&gt;battery&lt;/var&gt;, который будет содержать все скрипты запускающие и останавливающие Управление Питанием.
&lt;/p&gt;
&lt;p class="note"&gt;
&lt;b&gt;Примечание:&lt;/b&gt; Вы можете пропустить эту секцию, если вы не хотите создавать ещё один уровень запуска. В последующих секции предполагается, что уровень запуска battery существует
&lt;/p&gt;
&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.3: Создание уровня запуска battery&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# cd /etc/runlevels
# cp -a default battery
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;
Вот и всё! Новоиспечённый уровень запуска &lt;var&gt;battery&lt;/var&gt; содержит всё, что есть в &lt;var&gt;defaults&lt;/var&gt;, но автоматического переключения между ними нет. Пора изменить это.
&lt;/p&gt;

&lt;h2&gt;Реагирование на ACPI-события&lt;/h2&gt;
&lt;p&gt;
Типичные ACPI-события - это закрытие крышки, изменение источника питания и нажатие клавиши засыпания. Для нас важно события изменения источника питания - именно из-за него будут переключаться уровни запуска. Маленький скрипт позаботится об этом.
&lt;/p&gt;

&lt;p&gt;
Для начала, вам нужен скрипт, который меняет уровень запуска на &lt;var&gt;defaults&lt;/var&gt; или &lt;var&gt;battery&lt;/var&gt; в зависимости от источника энергии. Скрипт использует команду &lt;var&gt;on_ac_power&lt;/var&gt; из &lt;var&gt;sys-power/powermgmt-base&lt;/var&gt; - убедитесь, что он установлен на вашей системе.
&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.4: Установка sys-power/powermgmt-base&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# emerge powermgmt-base
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
Теперь вы может определить источник питания, запустив &lt;var&gt;on_ac_power &amp;amp;&amp;amp; echo AC available || echo Running on batteries&lt;/var&gt; в консоле. Скрипт ниже отвечает за переключение уровней. Сохраните его как &lt;span class="path"&gt;/etc/acpi/actions/pmg_switch_runlevel.sh&lt;/span&gt;.
&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.5: /etc/acpi/actions/pmg_switch_runlevel.sh&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
#!/bin/bash

# BEGIN configuration
RUNLEVEL_AC="default"
RUNLEVEL_BATTERY="battery"
# END configuration


if [ ! -d "/etc/runlevels/${RUNLEVEL_AC}" ]
then
    logger "${0}: Runlevel ${RUNLEVEL_AC} does not exist. Aborting."
    exit 1
fi

if [ ! -d "/etc/runlevels/${RUNLEVEL_BATTERY}" ]
then
    logger "${0}: Runlevel ${RUNLEVEL_BATTERY} does not exist. Aborting."
    exit 1
fi

if on_ac_power
then
    if [[ "$(&amp;lt;/var/lib/init.d/softlevel)" != "${RUNLEVEL_AC}" ]]
    then
        logger "Switching to ${RUNLEVEL_AC} runlevel"
         /sbin/rc ${RUNLEVEL_AC}
    fi
elif [[ "$(&amp;lt;/var/lib/init.d/softlevel)" != "${RUNLEVEL_BATTERY}" ]]
then
    logger "Switching to ${RUNLEVEL_BATTERY} runlevel"
    /sbin/rc ${RUNLEVEL_BATTERY}
fi
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
Не забудьте сделать скрипт исполняемым, запустив &lt;var&gt;chmod +x /etc/acpi/actions/pmg_switch_runlevel.sh&lt;/var&gt;. Последне, что осталось сделать, - это вызов скрипта всякий раз, когда изменяется источник питания. Это можно сделать, перехватывая ACPI-события посредством &lt;var&gt;acpid&lt;/var&gt;. Главное - знать, какое событие генирируется при изменении источника питания. События называются &lt;var&gt;ac_adapter&lt;/var&gt; и &lt;var&gt;battery&lt;/var&gt; на большистве ноутбуков, но могут быть другими на вашем.
&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.6: Определение ACPI-событий для изменение источника питания&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# tail -f /var/log/messages | grep "received event"
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Запустите команду выше и отключите ноутбук от питания. Затем снова подключите его. Вы должны увидеть что-то такое:&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.7: Определение ACPI-событий для изменение источника питания&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
[Tue Sep 20 17:39:06 2015] received event "ac_adapter AC 00000080 00000000"
[Tue Sep 20 17:39:06 2015] received event "battery BAT0 00000080 00000001"
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
Интересующая часть - строки, заключенные в кавычки, после &lt;var&gt;received event&lt;/var&gt;. Они должны совпадать с теми, что используются в файле ниже. Не беспокойтесь, если ваша система выдает много мобытий или всегда одни и те же. Пока хоть какое-нибудь событие генирируется, переключение уровней будет работать.
&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.8:  /etc/acpi/events/pmg_ac_adapter&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
&lt;span class="comment"&gt;# замените "ac_adapter" ниже на реальное событие вашем ноутбуке
# Например, ac_adapter.* будет соотвествовать ac_adapter AC 00000080 00000000&lt;/span&gt;
event=ac_adapter.*
action=/etc/acpi/actions/pmg_switch_runlevel.sh %e
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.9:  /etc/acpi/events/pmg_battery&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
&lt;span class="comment"&gt;# замените "battery" ниже на реальное событие вашем ноутбуке
# Например, battery.* будет соотвествовать battery AC 00000080 00000001&lt;/span&gt;
event=battery.*
action=/etc/acpi/actions/pmg_switch_runlevel.sh %e
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
Наконец, acpid должен быть перезапущен, чтобы изменения вступили в силу.
&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.10:  Последний штрих&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# /etc/init.d/acpid restart
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;
Вы можете проверить работоспосбность скриптов, отсоеденив кабель питания и вставив его вновь, - в syslog должны появляться сообщения "Switching to AC mode" или "Switching to battery mode". Обратитесь к &lt;a href="#troubleshooting"&gt;устранению неполадок&lt;/a&gt;, если скрипт некорректно распознаёт источник питания.
&lt;/p&gt;

&lt;p&gt;
Из-за природы механизма событий, ваш ноутбук будет загружаться в уровень запуска &lt;var&gt;default&lt;/var&gt; не зависимо от источника питания. Это просто замечательно, если мы подключены к сети, но если нет, то нам хотелось бы загружаться в уровень запуска &lt;var&gt;battery&lt;/var&gt;. Одно из решений - это добавить ещё один пункт в менеджер загрузки, с параметром &lt;var&gt;softlevel=battery&lt;/var&gt;, но не сложно просто забыть его выбрать. Лучший путь - поставить ACPI-событие в конец процесса заргузки и позволить скрипту &lt;span class="path"&gt;pmg_switch_runlevel.sh&lt;/span&gt; решать, какое изменение уровня необходимо. Откройте &lt;span class="path"&gt;/etc/conf.d/local.start&lt;/span&gt; в &lt;i&gt;вашем любимом редакторе&lt;/i&gt; и добавьте следующие строки:
&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 2.11:  Изменение уровня запуска во время загрузки&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
&lt;span class="comment"&gt;# Эмулируем acpi событие, чтобы переключить уровень запуска, если работаем от батареи&lt;/span&gt;
/etc/acpi/actions/pmg_switch_runlevel.sh "battery/battery"
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
Подготовив систему таким образом, вы можете активировать политики Управления Питания для отдельных устройств.
&lt;/p&gt;

&lt;h1 id="cpu"&gt;3. Управление питанием ЦПУ&lt;/h1&gt;
&lt;p&gt;Мобильные процессоры могут работать на нескольких частотах, а некоторые позволяют даже менять напряжение. Максимальная производительность нужна далеко не всегда, и меняя её можно сохранить немало энергии, причём зачастую без какого-либо понижения производительности&lt;/p&gt;

&lt;h2&gt;Техническая часть&lt;/h2&gt;
&lt;p&gt;Частота процессора связана с некоторыми техническими терминами, который могут быть вам незнакомы, поэтому ниже будет дано краткое введение.&lt;/p&gt;

&lt;p&gt;Для начала, ядро должно "уметь" менять частоту процессора. &lt;em&gt;Драйвер процессора CPUfreq&lt;/em&gt; (CPUfreq processor driver) знает как сделать это на вашем ЦП, поэтому важно указать его правильно в вашем ядре. Скорее всего, вы это уже сделали выше. Также ядро должно знать, какую частоту утанавливать. Это достигается посредством &lt;em&gt;политик&lt;/em&gt; (policy), которые состоят из &lt;em&gt;политики CPUfreq&lt;/em&gt; (CPUfreq policy) и &lt;em&gt;властелина&lt;/em&gt; (governor). Первое - это пара из двух чисел, обозначающих максимальную и минимальную допустимую частоту ЦП, а второе отвечает за то, какую конкретно частоту выбрать. Так, властелин сохранения энергии (powersave governor) всегда выбирает минимальную допустимую частоту, а властелин максимальной произодительностью (performance governor), наоборот, максимальную; властелин пользователя (userspace governor) использует необходимую пользователю (или его приложениям) частоту, читая её из &lt;span class="path"&gt;/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;
Всё это не очень похоже на динамическое изменение частоты (и действительно не ялвяется таковым). Однако динамика может быть получена несколькими способами. Например, "требовательный" властелин (ondemand governor) принимает решение, основываясь на текущей загрузке ЦП. Это же может быть реализовано посредством различных пользовательских инструментов таких, как &lt;var&gt;cpudn&lt;/var&gt;, &lt;var&gt;cpufreqd&lt;/var&gt;, &lt;var&gt;powernowd&lt;/var&gt; и многих других. События ACPI можно использовать для включения или выключения динамического изменения частоты в зависимости от источника питания.
&lt;/p&gt;

&lt;h2&gt;Установка частоты вручную&lt;/h2&gt;
&lt;p&gt;Уменьшение скорости и напряжение на ЦП даёт двойной выигрыш: с одной стороны, потребляется меньше энергии, а с другой - ваша система греется не так сильно, как на полной мощности. Главный недостаток - очевидная потеря производительности. Уменьшение скорости процессора - обмен производительности на сохранение энергии.&lt;/p&gt;

&lt;p class="note"&gt;
&lt;b&gt;Примечание:&lt;/b&gt; Не все ноутбуки поддерживают изменение частоты. Если вы не уверены, посмотрите список поддерживаемых процессоров в секции &lt;a href="#troubleshooting"&gt;Устранение неполадок&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Самое время проверить, работает ли изменение частоты процессора. Давайте установим ещё один очень полезный при отладке инструмент: &lt;var&gt;sys-power/cpufrequtils&lt;/var&gt;&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 3.1:  Проверка частоты ЦП&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# emerge cpufrequtils
# cpufreq-info
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

Вывод будет примерно таким: 

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 3.2:  Пример вывода cpufreq-info&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which need to switch frequency at the same time: 0
  hardware limits: 798 MHz - 2.13 GHz
  available frequency steps: 2.13 GHz, 1.86 GHz, 1.60 GHz, 1.33 GHz, 1.06 GHz, 798 MHz
  available cpufreq governors: conservative, ondemand, powersave, userspace, performance
  current policy: frequency should be within 798 MHz and 2.13 GHz.
                  The governor "conservative" may decide which speed to use
                  within this range.
  current CPU frequency is 1.60 GHz.
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Теперь, поиграйтесь с &lt;var&gt;cpufreq-set&lt;/var&gt;, чтобы убедиться в работоспособности переключение частоты. Например, выполните &lt;var&gt;cpufreq-set -g ondemand&lt;/var&gt;, чтобы активировать "требовательного" властелина, и проверьте изменение с помощью &lt;var&gt;cpufreq-info&lt;/var&gt;. Если не работает как надо, вы можете попробовать найти причину в &lt;a href="#troubleshooting"&gt;Устранении неполадок&lt;/a&gt; в конце этого руководства.&lt;/p&gt;

&lt;h2&gt;Автоматическая настройка частоты&lt;/h2&gt;
&lt;p&gt;Сказанное, конечно, прекрасно, но не очень применино в реальной жизни. Лучше поручить вашей системе автоматически подбирать подходяшую частоту. Есть много способов сделать это. Следующая таблица даёт общее представление о них и поможет вам выбрать необходимый. Их можно не совсем точно разделить на три типа: &lt;b&gt;ядро&lt;/b&gt; - для методов нуждающихся только в поддержке ядра, &lt;b&gt;демон&lt;/b&gt; - для запускающихся в фоне программ и &lt;b&gt;графический&lt;/b&gt; - для программ, которые предоставляют графический интерфейс для простой настройки.&lt;/p&gt;


&lt;table class="real_table"&gt;
&lt;thead&gt;
&lt;tr&gt;
  &lt;th&gt;Имя&lt;/th&gt;
  &lt;th&gt;Тип&lt;/th&gt;
  &lt;th&gt;Причины для переключения (Switch decision)&lt;/th&gt;
  &lt;th&gt;Используемые властелины ядры (Kernel governors)&lt;/th&gt;
  &lt;th&gt;Предоставляемые режимы (Further governors)&lt;/th&gt;
  &lt;th&gt;Комментарии&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;требовательный властелин ('ondemand' governor)&lt;/td&gt;
  &lt;td&gt;Ядро&lt;/td&gt;
  &lt;td&gt;Загрузка ЦП&lt;/td&gt;
  &lt;td&gt;-&lt;/td&gt;
  &lt;td&gt;-&lt;/td&gt;
  &lt;td&gt;
    Выставляет максимальную частоту при загрузке ЦП и медленно шагает вниз во время простоя ЦП. Дальнейшая настройка через &lt;span class="path"&gt;/sys/devices/system/cpu/cpu0/cpufreq/ondemand/&lt;/span&gt;. По-прежнему требует пользовательских программ (скриптов), если переключение властелинов или подобное необходимо.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;косервативный властелин ('conservative' governor)&lt;/td&gt;
  &lt;td&gt;Ядро&lt;/td&gt;
  &lt;td&gt;Загрузка ЦП&lt;/td&gt;
  &lt;td&gt;-&lt;/td&gt;
  &lt;td&gt;-&lt;/td&gt;
  &lt;td&gt;
    В отличие от требовательного властельна, консервативный не прыгает до максимальной частоты во время высокой загрузки ЦП, а увеличивает частоту постепенно. Дальнейшая настройка через &lt;span class="path"&gt;/sys/devices/system/cpu/cpu0/cpufreq/conservative/&lt;/span&gt;. По-прежнему требует пользовательских программ (скриптов), если переключение властелинов или подобное необходимо.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;a href="http://mnm.uib.es/~gallir/cpudyn/"&gt;cpudyn&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Демон&lt;/td&gt;
  &lt;td&gt;Загрузка ЦП&lt;/td&gt;
  &lt;td&gt;Производительность, сохранение энергии&lt;/td&gt;
  &lt;td&gt;Динамические&lt;/td&gt;
  &lt;td&gt;
    Также поддерживает disk standby. Однако стоит заметить, что laptop-mode в большинстве случаев работает лучше.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;a href="http://sourceforge.net/projects/cpufreqd/"&gt;cpufreqd&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Демон&lt;/td&gt;
  &lt;td&gt;Состояние батареи, загрузка ЦП, температура, запущенные программы и др.&lt;/td&gt;
  &lt;td&gt;Все возможные&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;
    Тонкая (и местами сложная) установка. Расширяем посредством плагинов, таких как отслеживание показаний сенсоров (sensor monitoring) (lm_sensors). Может управлять памятью и ядром некоторых построенных на NVidia графических карт. Cpufreqd не поддерживает SMP, и при желании им можно управлять вручную во время выполнения.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;
    &lt;a href="http://www.deater.net/john/powernowd.html"&gt;powernowd&lt;/a&gt;
  &lt;/td&gt;
  &lt;td&gt;Демон&lt;/td&gt;
  &lt;td&gt;Загрузка процессора&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;Пассивный, синусоидальный (sine), агрессивный&lt;/td&gt;
  &lt;td&gt;
    Пожжерживает SMP.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;
    &lt;a href="http://projects.simpledesigns.com.pl/project/ncpufreqd/"&gt;ncpufreqd&lt;/a&gt;
  &lt;/td&gt;
  &lt;td&gt;Демон&lt;/td&gt;
  &lt;td&gt;Температура&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;Производительность, сохранение энергии&lt;/td&gt;
  &lt;td&gt;
    Переключает властителинов производительности и сохранения энергии. Очень полезен на ноутбуках, страдающих перегревом.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;a href="http://www.goop.org/~jeremy/speedfreq/"&gt;speedfreq&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Демон&lt;/td&gt;
  &lt;td&gt;Загрузка ЦП&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;Динамический, сохранения энергия, производительность, фиксированной скорости&lt;/td&gt;
  &lt;td&gt;
    Легко настраивается с помошью приятного клиент-серверного интерфейса. Требуется ядро 2.6. Не поддерживается, сломан и поэтому удален из портежей. Пожалуйста, перейдите на cpufreqd, если вы всё ещё используете эту программу.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;a href="http://cpuspeedy.sourceforge.net/"&gt;gtk-cpuspeedy&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Графический&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;
    Gnome-приложение, графический инструмент для ручной установки частоты процессора. Не предоставляет никакой автоматизации.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;klaptopdaemon&lt;/td&gt;
  &lt;td&gt;Графический&lt;/td&gt;
  &lt;td&gt;Состояние батареи&lt;/td&gt;
  &lt;td&gt;Все возможные&lt;/td&gt;
  &lt;td&gt;Нет&lt;/td&gt;
  &lt;td&gt;
   Только для КДЕ, властелин требований для динамического изменения частоты.
  &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Хотя изменение частосты в зависимости от нагрузки выглядит просто на первый взгляд, это не такая уж и тривиальная задача. Плохой алгоритм может привести к постоянному переключению между двумя частотами или бесмысленному перерасходу энергии из-за неоправданно большой частоты.&lt;/p&gt;

&lt;p&gt;Что выбрать? Если вы не можете решить, попробуйте &lt;var&gt;cpufreqd&lt;/var&gt;.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 3.3:  Установка cpufreqd&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# emerge cpufreqd
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;var&gt;cpufreqd&lt;/var&gt; настраивается редактированием &lt;span class="path"&gt;/etc/cpufreqd.conf&lt;/span&gt;. Конфиг, предоставляемый по умолчанию, может вас несколько смутить. Рекомендуется заменить его на конфиг, который создал бывший разработчик Gentoo - Henrik Brix Andersen. Учтите, что вам необходим cpufreqd-2.0.0 или более новая версия. Ранние версии используют другой синтаксис конфигурационного файла.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 3.4: /etc/cpufreqd.conf (cpufreqd-2.0.0 или более новый)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=3
enable_plugins=acpi_ac, acpi_battery
enable_remote=1
remote_group=wheel
verbosity=5
[/General]

[Profile]
name=ondemand
minfreq=0%
maxfreq=100%
policy=ondemand
[/Profile]

[Profile]
name=conservative
minfreq=0%
maxfreq=100%
policy=conservative
[/Profile]

[Profile]
name=powersave
minfreq=0%
maxfreq=100%
policy=powersave
[/Profile]

[Profile]
name=performance
minfreq=0%
maxfreq=100%
policy=performance
[/Profile]

[Rule]
name=battery
ac=off
profile=conservative
[/Rule]

[Rule]
name=battery_low
ac=off
battery_interval=0-10
profile=powersave
[/Rule]

[Rule]
name=ac
ac=on
profile=ondemand
[/Rule]
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Теперь вы можете запустить демон cpufreqd. Добавьте его в уровни запуска &lt;var&gt;default&lt;/var&gt; и &lt;var&gt;battery&lt;/var&gt;.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 3.5:  Запуск cpufreqd&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# rc-update add cpufreqd default battery
# rc
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Иногда желательно установить политику отличную от той, что выбрал демон. Например, если заряд батареи низок, но вы знаете, что скоро появится питание от сети. В этом случае вы можете перевести cpufreqd в ручной режим с помощью команды &lt;var&gt;cpufreqd-set manual&lt;/var&gt; и далее выбрать одну из сконфигурированных политик (они перечислены в &lt;var&gt;cpufreqd-get&lt;/var&gt;). Выйти из ручного режима вы можете командой &lt;var&gt;cpufreqd-set dynamic&lt;/var&gt;&lt;/p&gt;

&lt;p class="warning"&gt;
&lt;b&gt;Предупреждение:&lt;/b&gt; Не запускайте одновременно более одной программы, перечисленной выше. Это может привести к конфликтах таких, как постоянное переключение между двумя частотами.
&lt;/p&gt;

&lt;h2&gt;Проверка результата&lt;/h2&gt;
&lt;p&gt;Осталось только проверить, что ваши новые политики работают правильно. Простой способ сделать это - следить за скоростью ЦП во время работы:&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 3.6:  Отслеживание скорости ЦП&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# watch grep \"cpu MHz\" /proc/cpuinfo
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Если &lt;span class="path"&gt;/proc/cpuinfo&lt;/span&gt; не обновляется (см. &lt;a href="#troubleshooting"&gt;Устранение неполадок&lt;/a&gt;), попробуйте &lt;var&gt;sys-apps/x86info&lt;/var&gt;:&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 3.7:  Альтернативное отслеживание скорочти ЦП&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# watch x86info -mhz
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;В зависимости от ваших настроек, частота должна возрастать при нагрузке, падать в спокойном состоянии, или оставаться на том же уровне. Если вы используете &lt;var&gt;cpufreqd&lt;/var&gt; и уровень подробности (verbosity) равен 5 или больше в &lt;span class="path"&gt;cpufreqd.conf&lt;/span&gt;, то вы можете найти дополнительную информацию о происходящем в &lt;var&gt;syslog&lt;/var&gt;.&lt;/p&gt;

&lt;h1&gt;4. LCD Power Management&lt;/h1&gt;
&lt;p&gt;Как вы видели в графике &lt;a href="#energy-budget"&gt;распределения энергии&lt;/a&gt;, LCD экран потребляет наибольшую часть энергии (по крайней мере для мобильных ПК). Таким образом, важно не только выключать экран, когда он не нужен, но и уменьшать его якрость, если это возможно. Большинство ноутбуков предоставляют возможность контролировать яркость экрана&lt;/p&gt;

&lt;h2&gt;Настройки засыпания (standby)&lt;/h2&gt;
&lt;p&gt;В первую очередь необходимо проверить настройки засыпания(standby), остановки(suspend), выключения дисплея. Так как это сильно зависит от вашего оконного менеджера, то вам предстоит делать это самим. Только два замечания: погасить терминал можно командой &lt;var&gt;setterm -blank &amp;lt;количество минут&amp;gt;&lt;/var&gt;, &lt;var&gt;setterm -powersave on&lt;/var&gt; и &lt;var&gt;setterm -powerdown &amp;lt;количество минут&amp;gt;&lt;/var&gt;. Для X.org, необходимо исправить в &lt;span class="path"&gt;/etc/X11/xorg.conf&lt;/span&gt; следующее (или в &lt;span class="path"&gt;/etc/X11/XF86Config&lt;/span&gt; для XFree86):&lt;/p&gt;
&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 4.1:  Нвстройка засыпания дисплея в X.org и XFree86&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
Section "ServerLayout"
  Identifier  [...]
  [...]
  Option  "BlankTime"  "5"  &lt;span class="comment"&gt;# Погасить дисплей через 5 минут (Fake)&lt;/span&gt;
  Option  "StandbyTime"  "10"  &lt;span class="comment"&gt;# Выключить дисплей через 10 минут (DPMS)&lt;/span&gt;
  Option  "SuspendTime"  "20"  &lt;span class="comment"&gt;# Полная остановка через 20 минут&lt;/span&gt;
  Option  "OffTime"  "30"  &lt;span class="comment"&gt;# Выключение через полчаса&lt;/span&gt;
  [...]
EndSection

[...]

Section "Monitor"
  Identifier  [...]
  Option  "DPMS"  "true"
  [...]
EndSection
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h2&gt;Уменьшение подсветки&lt;/h2&gt;
&lt;p&gt;Если вы можете управлять яркостью с помощью программы, напишите маленький скриптик, который уменьшает подвсветку и поместите его в ваш уровенб запуска &lt;var&gt;batery&lt;/var&gt;. Следующий скрипт должен работать на большинстве ноутбуков IBM Thinkpad и Toshiba. Для ноутбуков IBM необходимо включить соответствуюший пункт в ядре, а владельцы Toshiba могут поставить &lt;var&gt;sys-power/acpitool&lt;/var&gt; и пропустить настройку &lt;var&gt;ibm_acpi&lt;/var&gt;, описанную ниже.&lt;/p&gt;

&lt;p class="warning"&gt;
&lt;b&gt;Предупреждение:&lt;/b&gt; Поддержка изменения яркости явлвляется экспериментальной для ibm-acpi, так как работает с оборудованием напрямуб и может серьёзно поредить его. Обратитесь к &lt;a href="http://ibm-acpi.sourceforge.net/"&gt;сайту ibm-acpi&lt;/a&gt; за подробностями.
&lt;/p&gt;

&lt;p&gt;Для поддержки изменения уровня яркости, модуль ibm_acpi должен быть запущен с параметром experimental.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 4.2:  Настройка засыпания дисплея в X.org и XFree86&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
&lt;span class="comment"&gt;(Прочтите предупреждение выше, прежде чем делать это)&lt;/span&gt;
# echo "options ibm_acpi experimental=1" &gt;&gt; /etc/modules.d/ibm_acpi
# /sbin/update-modules
# echo ibm_acpi &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6
# modprobe ibm_acpi
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Это должно выполниться без ошибок, а также должен появится файл &lt;span class="path"&gt;/proc/acpi/ibm/brightness&lt;/span&gt;. Скрипт инийиализации будет принимать решение  об уровне подсветки в зависимости от источника питания.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 4.3:  /etc/conf.d/lcd-brightness&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
&lt;span class="comment"&gt;# См. допустимые значения в /proc/acpi/ibm/brightness &lt;/span&gt;
&lt;span class="comment"&gt;# Пожалйста, прочтите /usr/src/linux/Documentation/ibm-acpi.txt&lt;/span&gt;

&lt;span class="comment"&gt;# Уровень яркости при питании от сети. По умолчанию - 7.&lt;/span&gt;
BRIGHTNESS_AC=7

&lt;span class="comment"&gt;# Уровень яркости при питании от батареи. По умолчанию - 4.&lt;/span&gt;
BRIGHTNESS_BATTERY=4
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 4.4:  /etc/init.d/lcd-brightness&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
#!/sbin/runscript

set_brightness() {
    if on_ac_power
    then
        LEVEL=${BRIGHTNESS_AC:-7}
    else
        LEVEL=${BRIGHTNESS_BATTERY:-4}
    fi

    if [ -f /proc/acpi/ibm/brightness ]
    then
        ebegin "Setting LCD brightness"
        echo "level ${LEVEL}" &amp;gt; /proc/acpi/ibm/brightness
        eend $?
    elif [[ -e /usr/bin/acpitool &amp;amp;&amp;amp; -n $(acpitool -T | grep "LCD brightness") ]]
    then
        ebegin "Setting LCD brightness"
        acpitool -l $LEVEL &amp;gt;/dev/null || ewarn "Unable to set lcd brightness"
        eend $?
    else
        ewarn "Setting LCD brightness is not supported."
        ewarn "For IBM Thinkpads, check that ibm_acpi is loaded into the kernel"
        ewarn "For Toshiba laptops, you've got to install sys-power/acpitool"
    fi
}

start() {
    set_brightness
}

stop () {
    set_brightness
}
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Далее, убедитесь, что уровень яркости меняется автоматически, добавив скрипт в уровень запуска battery.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 4.5: Включаем автоматисеское изменение яркости&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# chmod +x /etc/init.d/lcd-brightness
# rc-update add lcd-brightness battery
# rc
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h1 id="harddrive"&gt;Управление питанием диска&lt;/h1&gt;

&lt;p&gt;Жёсткий диск потребляет меньше энергии во время спящего режима (sleep mode). Поэтому разумно активировать возможности сохранения энергии, когда жёсткий диск не используется некоторое время. Есть два различных способа сделать это. Первый, (laptop-mode) будет сберегать больше всего энергии за счёт предовращения или, по крайней мере, задержки записи на диск. Обратной стороной медали является повышенный риск потери данных при сбое питания или аварии ядра; чтобы уменьшить масштабы возможной аварии, убедитесь, что не запущенно часто пишущих на диск процессов. В качестве альтернативного, второго способа вы можете включить сохранение энергии на диске с помощью &lt;var&gt;hdparm&lt;/var&gt;.&lt;/p&gt;

&lt;h2&gt;Увеличение времени покоя (idle time) - laptop-mode&lt;/h2&gt;

&lt;p&gt;Последния 2.6-ядра включают одноимённый &lt;var&gt;laptop-mode&lt;/var&gt;. Когда он активирован, "грязные" буферы (dirty buffers) пишутся на диск при вызовах чтения (read calls) или после 10 минут (вместо 30 секунд). Это минимизирует время, которое тратится на раскручивание диска.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 5.1: Автоматический старт laptop-mode&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# emerge laptop-mode-tools
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Настройки пакета &lt;var&gt;laptop-mode-tools&lt;/var&gt; хранятся в файле &lt;span class="path"&gt;/etc/laptop-mode/laptop-mode.conf&lt;/span&gt;. Отредактируйте его на свой вкус - он отлично документирован. Выполните &lt;var&gt;rc-update add laptop_mode battery&lt;/var&gt;, чтобы он запускался автоматически.&lt;/p&gt;

&lt;p&gt;Последние версии (1.11 и позже) этого пакета включают полезный инструмент &lt;var&gt;lm-profiler&lt;/var&gt;. Он следит за использованием диска и запущенными сетевыми сервисами и предлагает отключить ненужные. Вы можете отключить их как используя встроенную в laptop-mode-tools  поддержку уровней запуска (которая будет переопределена /sbin/rc), так и через созданные вами уровни запуска &lt;var&gt;default/battery&lt;/var&gt; (рекомендуется).&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 5.2: Пример вывода lm-profiler&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# lm-profiler
Profiling session started.
Time remaining: 600 seconds
[4296896.602000] amarokapp
Time remaining: 599 seconds
[4296897.714000] sort
[4296897.970000] mv
Time remaining: 598 seconds
Time remaining: 597 seconds
[4296900.482000] reiserfs/0
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;После наблюдения за вашей системой в течении 10 минут, lm-profiler выведет список сервисов, которые могли вызвать обращения к диску за этот промежуток времени.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 5.3: lm-profiler преждагает отключить некотрые сервисы&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
Program:     "atd"
Reason:      standard recommendation (program may not be running)
Init script: /etc/init.d/atd (GUESSED)

Do you want to disable this service in battery mode? [y/N]: n
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Чтобы отключить atd, как предлагается в примере выше, выполните &lt;var&gt;rc-update del atd battery&lt;/var&gt;. Будьте осторожны, не отключите жизенноважные сервисы - lm-profiler частенько выдает не совсем правильные данные. Не отключайте что-либо, если вы полностью не уверены в ненужности сервиса.&lt;/p&gt;

&lt;h2&gt;Ограничение доступа на запись&lt;/h2&gt;

&lt;p&gt;Если вы не хотите использовать laptop-mode, вы должны отключить часто пишущие на диск сервисы вручную - &lt;var&gt;syslogd&lt;/var&gt; кандидат на выбывание, например. Возможно, вы не хотите выключать его полностью, тогда можно подправить конфиг так, чтобы писались только "необходимые вещи". &lt;var&gt;Cups&lt;/var&gt; пишет на диск лишь время о времени, поэтому можно выключить его и включать вручную, когда необходимо.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 5.4: Выключение cups из уровня запуска battery&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# rc-update del cupsd battery
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Вы также может изспользовать &lt;var&gt;lm-profiler&lt;/var&gt; из laptop-mode-tools (см. выше), чтобы найти неугодные сервисы. Если вы истребили их всех, то можно переходить к настройке hdparm.&lt;/p&gt;

&lt;h2&gt;hdparm&lt;/h2&gt;

&lt;p&gt;Вторая возможность - использование &lt;var&gt;hdparm&lt;/var&gt;. Пропустите этот шаг, если вы используете laptop-mode. Иначе, откройте &lt;span class="path"&gt;/etc/conf.d/hdparm&lt;/span&gt; и добавьте следующие строки для ваших жёстких дисков. Этот пример предполагает, что ваш диск именуется hda:&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 5.5: Использование /etc/conf.d/hdparm для засыпания диска&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
hda_args="-q -S12"
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Это включит управление питанием для вашего жесткого диска. Если вы когда-нибудь решите отключить управление питанием, то просто измените значение в &lt;span class="path"&gt;/etc/conf.d/hdparm&lt;/span&gt; на &lt;var&gt;-q -S0&lt;/var&gt; или выполните &lt;var&gt;hdparm -q -S0 /dev/hda&lt;/var&gt;.&lt;/p&gt;

&lt;p&gt;Обратитесь к &lt;var&gt;man haparm&lt;/var&gt; за другими опциями. Хотя вы всегда можете запускать haparm выручную командой &lt;var&gt;/etc/init.d/hdparm start&lt;/var&gt;, намного проще автоматизировать её запуск и остановку. Чтобы сделать это, добавить &lt;var&gt;hdparm&lt;/var&gt; в уровень запуска battery.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 5.6: Автоматизация засыпания диска&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
rc-update add hdparm battery
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p class="important"&gt;
&lt;b&gt;Внимание:&lt;/b&gt; Будьте осторожны с настройками засыпания/остановки (sleep/spin down) вашего жёсткого диска. Установление слишком низких значений может быстро "износить" ваш диск, что приведёт к потере гарантии. (Прим. пер.: вспомните &lt;a href="http://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=show_thread&amp;amp;omm=0&amp;amp;om=38837&amp;amp;forum=vsluhforumID3"&gt;историю про Ubuntu&lt;/a&gt;)
&lt;/p&gt;

&lt;h2&gt;Другие "типы и трики"&lt;/h2&gt;
&lt;p&gt;Ещё один способ достижения светлой цели снижения энергопотребления состоит в отключении свопа (swap) в режиме питания от батареи. Перед тем, как писать переключатель swapon/swapoff, убедитесь, что у вас достаточно оперативной памяти и своп существенно не используется, иначе вы рискуете приобрести большие проблемы. &lt;/p&gt;

&lt;p&gt;Если вы не хотите использовать laptop-mode, то можно уменьжить обращение к диску, монтируя некоторые директории как tmpfs - запись на такие разделы хранится не на диске, а в ОЗУ, и поэтому пропадает после отмонтирования. Зачастую удобно примонтировать &lt;span class="path"&gt;/tmp&lt;/span&gt; таким образом, так как она в любом случае очищается при каждой перезгрузке. Правда, стоит убедиться, что у вас достаточно памяти и что нет программ (таких, как менеджеры закачек и архиваторы), которым требуется экстримально много места в &lt;span class="path"&gt;/tmp&lt;/span&gt;. Чтобы сделать это, включите поддержку tmpfs в ядре и добавьте подобную следующей строку в  &lt;span class="path"&gt;/etc/fstab&lt;/span&gt;: &lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 5.7: Редактирование /etc/fstab, чтобы сделать /tmp более отрешённым от диска (volatile)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
none  /tmp  tmpfs  size=32m  0 0
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p class="warning"&gt;
&lt;b&gt;Предупреждение:&lt;/b&gt; Обратите внимание на параметр (32 m), и подстройте его под вашу систему. Если вы не уверены, не пробуйте это вообще - это может сильно уменьшить производительность. Если вы хотите подмонтировать &lt;span class="path"&gt;/var/log&lt;/span&gt; таким же образом, убедитесь, что файлы сохраняются на диск перед размонтированием. Они необходимы. Не пытайтесь примонтировать &lt;span class="path"&gt;/var/tmp&lt;/span&gt; таким образом - он используется Portage при сборке пакетов
&lt;/p&gt;

&lt;h1 id="other"&gt;Управление питанием других устройств&lt;/h1&gt;
&lt;h2&gt;Графические карты&lt;/h2&gt;
&lt;p&gt;Если у вас стоит карточка ATI с поддержкой PowerPlay (динамическое изменение частоты графического процессора), вы можете активировать эту возможность в X.org. Откройте &lt;span class="path"&gt;/etc/X11/xorg.conf&lt;/span&gt; и добавьте (или включите) опцию &lt;var&gt;DynamicClocks&lt;/var&gt; в секции Устройство (device). Учтите, что это может привести к падению на некоторых системах.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 6.1: Включение поддержки ATI PowerPlay в X.org&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
Section "Device"
[...]
Option      "DynamicClocks" "on"
EndSection
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h2&gt;Управление питанием беспроводных соединений&lt;/h2&gt;
&lt;p&gt;Карточка беспроводного соединения потребляет немалую часть энергии. Переведите их в режим сохранения энергии так, как вы сделали это с жёсткими дисками.&lt;/p&gt;
&lt;p class="note"&gt;
&lt;b&gt;Примечание:&lt;/b&gt; В скрипте предполагается, что ваш беспроводной интерфейс - &lt;var&gt;wlan0&lt;/var&gt;. Если в вашей системе это не так, что просто замените его на своё. 
&lt;/p&gt;
&lt;p&gt;Добавьте следующую строку в &lt;span class="path"&gt;/etc/conf.d/net&lt;/span&gt; для автоматического включения управления питанием беспроводной карты: &lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 6.2: Автоматизированное управления питанием WLAN&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
iwconfig_wlan0="power on"
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Обратитесь к &lt;var&gt;man iwconfig&lt;/var&gt; за деталями и другими опциями такими, как интервалы между пробуждениями или настройки таймаута. Если ваш драйвер и точка доступа поддерживает изменение частоты сигналов, то из этого можно извлечь ещё больше сохранённой энергии.&lt;/p&gt;

&lt;h2&gt;Управление питанием USB&lt;/h2&gt;
&lt;p&gt;Есть две проблемы с потреблением энергии USB-устройствами. Во-первых, устройства такие, как USB мыши, цифровые камеры или флэшки потребляют энергию всё время, пока подключены, вы не можете избежать этого (кроме как отключая их, когда в них нет необходимости). Во-вторых, когда USD устройство подключено, контроллер USB хоста время от времени опрашивает шину, что не даёт CPU уйти в спящий режим. Ядро предоставляет экспериментальную опцию для включение приостановления (suspend) для USB устройств подсредством вызова драйвера или одного из файлов &lt;span class="path"&gt;power/state&lt;/span&gt; в &lt;span class="path"&gt;/sys&lt;/span&gt;.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 6.3: Включение поддержки приостановления (suspend) USB в ядре&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
Device Drivers
  USB support
    [*]   Support for Host-side USB
      [*]   USB selective suspend/resume and wakeup (EXPERIMENTAL)
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;h1 id="sleepstates"&gt;7. Состояния спячки: sleep, standby, suspend to disk&lt;/h1&gt;
&lt;p class="note"&gt;
Примечание переводчика: данный раздел существенно устарел. Более свежую информацию можно найти на &lt;a href="http://gentoo-wiki.com/HOWTO_Software_Suspend_v2"&gt;gentoo-wiki.com (EN)&lt;/a&gt;. Также в русской есть короткий пересказ: &lt;a href="http://ru.gentoo-wiki.com/Suspend2"&gt;gentoo-wiki.com&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;ACPI определяет несколько состояний спячки. Основные три из них:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;S1 aka Standby&lt;/li&gt;
&lt;li&gt;S3 aka Suspend to RAM aka Sleep&lt;/li&gt;
&lt;li&gt;S4 aka Suspend to Disk aka Hibernate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Они могут вызываться в моменты, когда компьютер не используется, но выключение не желательно из-за долгой загрузки&lt;/p&gt;

&lt;h2&gt;Sleep (S3)&lt;/h2&gt;
&lt;p&gt;Поддержка ACPI для этих состояний спячки помечена экспериментальной, и для этого есть достаточно оснований. Возможно, состояния спячки в APM (Advanced Power Management) несколько более стабильны, но использовать APM и ACPI одновреммено нельзя.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.1: Конфигурация ядра для включений состояний спички&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
Power Management Options ---&gt;
  [*] ACPI( Advanced Configuration and Power Interface ) Support ---&gt;
     [*]   Sleep States
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;



&lt;p&gt;Когда ядро настроено, вы можете воспользоваться скриптом &lt;var&gt;hibernate-script&lt;/var&gt;, чтобы активировать suspend или sleep. Для начала его надо установить.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.2: Установка hibernate-script&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# emerge hibernate-script
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Необходимо некоторые настройки в &lt;span class="path"&gt;/etc/hibernate&lt;/span&gt;. По умолчанию пакет предоставляет несколько конфирационных файлов для каждого состояния спячки. Общие настройки помещены в &lt;span class="path"&gt;common.conf&lt;/span&gt;; убедитесь, что этот файл правильно сконфигурирован для вашей системы.&lt;/p&gt;

&lt;p&gt;Чтобы настроить sleep, отредактируйте &lt;span class="path"&gt;sysfs-ram.conf&lt;/span&gt; в &lt;span class="path"&gt;/etc/hibernate&lt;/span&gt;. Опция &lt;var&gt;UseSysfsPowerState mem&lt;/var&gt; уже выставлена правильно, но если вы хотите произвести дальнейшие настройки в этом или любом другом состоянии спячки, то не забудьте добавить их в &lt;span class="path"&gt;/etc/hibernate/hibernate.conf&lt;/span&gt;. Комментарии и названия опций помогут вам разобраться. Если вы используете nfs или сетевые ресурсы самбы (samba shares over the network), то необходимо завершать соответствующие скрипты инициализации, чтобы избежать таймаутов (timeouts).&lt;/p&gt;

&lt;p class="note"&gt;
&lt;b&gt;Примечание:&lt;/b&gt; Дополнительную информацию о состояниях спячки см. в &lt;var&gt;man hibernate.conf&lt;/var&gt;
&lt;/p&gt;

&lt;p&gt;Готовы? У вас остался последний шанс сделать бэкап данных прежде, чем заупустить следующую команду. Обратите внимание, что вам возможно потребуется нажать специальную клавишу такую, как &lt;var&gt;Fn&lt;/var&gt;, чтобы вернутся из спячки.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.3: Засыпание&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# hibernate-ram
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Если вы всё ещё читаете, то, видимо, всё работает. Вы можете таким же образом настроить standby (S1), подредактировав  &lt;span class="path"&gt;sysfs-ram.conf&lt;/span&gt; и изменив &lt;var&gt;UseSysfsPowerState mem&lt;/var&gt; на &lt;var&gt;UseSysfsPowerState standby&lt;/var&gt;. Режимы S3 и S4 более интресны, посколько сохраняют больше энергии. &lt;/p&gt;

&lt;h2&gt;Hibernate (S4)&lt;/h2&gt;
&lt;p&gt;Эта секция посвящена hibernation. В этом режиме снимок (snapshot) работающей системы записывается на диск, перед выключением. При включении, снимок загружается и вы можете продолжать работы с момент выключения.&lt;/p&gt;

&lt;p class="warning"&gt;
&lt;b&gt;Предупреждение:&lt;/b&gt; Не заменяйте устройства не поддерживающие горячую замены во время остановки. Не пытайтесь загрузить снимок на другой машине. Отключите все сетевые ФС и клиенты/серверы самбы перед засыпанием.
&lt;/p&gt;

&lt;p&gt;Существуют две различных реализации S4. Оригинальная - swsusp, и более новая tuxonice с более приятным интерфейсом (с поддержкой fbsplash). &lt;a href="http://tuxonice.net/features.html#compare"&gt;Сравнение их возможностей&lt;/a&gt; вы можете найти на &lt;a href="http://www.tuxonice.net/"&gt;домашней странице tuxonice&lt;/a&gt;. &lt;i&gt;There used to be Suspend-to-Disk (pmdisk), a fork of swsusp, but it has been merged back.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;TuxOnIce пока не включен в основную ветку ядра (mainline kernel), поэтому вам либо надо пропатчить ядро (патчи можно найти на &lt;a href="http://www.tuxonice.net/"&gt;tuxonice.net&lt;/a&gt;), либо использовать &lt;var&gt;sys-kernel/tuxonice-sources&lt;/var&gt;.&lt;/p&gt;

&lt;p&gt;Настройки ядра и для swsusp и для TuxOnIce следующие:&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.4: Настройки ядра для hibernate&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
Power Management Options ---&gt;
  &lt;span class="comment"&gt;(hibernate с помощью swsusp)&lt;/span&gt;
  [*] Software Suspend
      &lt;span class="comment"&gt;(замените /dev/SWAP на ваш своп-раздел)&lt;/span&gt;
      (/dev/SWAP)      Default resume partition

  &lt;span class="comment"&gt;(hibernate with TuxOnIce)&lt;/span&gt;
  Enhanced Hibernation (TuxOnIce)
    --- Image Storage (you need at least one writer)
    [*]     File Writer
    [*]    Swap Writer
    ---   General Options
    [*]    LZF image compression
    &lt;span class="comment"&gt;(замените /dev/SWAP на ваш своп-раздел)&lt;/span&gt;
    (swap:/dev/SWAP)   Default resume device name
    [ ]     Allow Keep Image Mode
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Настройка swsusp много проще. Если вы не вписали имя своп-раздела в настройках ядра, вы должны передать его как параметр в директиве &lt;var&gt;resume=/dev/SWAP&lt;/var&gt;. Если загрузка невозможна из-за сломанного образа, воспользуйтесь параметром &lt;var&gt;noresume&lt;/var&gt;. Скрипт инициализации &lt;var&gt;hibernate-cleanup&lt;/var&gt; чистит (invalidates) образы swsusp во время загрузки.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.5: Чистка образов swsusp во время загрузки&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# rc-update add hibernate-cleanup boot
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Для активации swsusp, используйте hibernate script, установив &lt;var&gt;UseSysfsPowerState disk&lt;/var&gt; в &lt;span class="path"&gt;/etc/hibernate/sysfs-disk&lt;/span&gt;.&lt;/p&gt;

&lt;p class="warning"&gt;
&lt;b&gt;Предупреждение:&lt;/b&gt; Сделайте резервную копию данных перед остановкой. Запустите &lt;var&gt;sync&lt;/var&gt;, чтобы записать на диск всю кэшированную информацию. Вначале, попробуйте сделать это без иксов, потом в иксах, но не логинясь.
&lt;/p&gt;

&lt;p&gt;Если вы наталкиваетесь на панику ядра (kernel panic) из-за uhci или подобного, попробуйте скомпилировать поддержку usb модулем и выгрузить модули из памяти перед остановкой. Соответсвуюшуя опция есть в &lt;span class="path"&gt;common.conf&lt;/span&gt;.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.6: Засыпание посредством swsusp&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# nano -w /etc/hibernate/common.conf
&lt;span class="comment"&gt;(Час X - вы сделали резерную копию?)&lt;/span&gt;
# hibernate
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;В следующей секции обсуждается установка TunOnIce, включая поддержку fbsplash для симпатичного графического индикатора прогресса во время засыпания и просыпания.&lt;/p&gt;

&lt;p&gt;Первая часть конфигурации похожа на настройку swsusp. Если вы не вписали имя своп-раздела в настройках ядра, вы должны передать его как параметр в директиве &lt;var&gt;resume=swap:/dev/SWAP&lt;/var&gt;. Если загрузка невозможна из-за сломанного образа, воспользуйтесь параметром &lt;var&gt;noresume&lt;/var&gt;. Скрипт инициализации &lt;var&gt;hibernate-cleanup&lt;/var&gt; чистит (invalidates) образы TuxOnIce во время загрузки.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.7: Чистка образов TuxOnIce во время загрузки&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# rc-update add hibernate-cleanup boot
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Теперь, отредактируйте &lt;span class="path"&gt;/etc/hibernate/suspend2.conf&lt;/span&gt;, включите опцию &lt;var&gt;TuxOnIce&lt;/var&gt;. Не включайте &lt;var&gt;fbsplash&lt;/var&gt; в &lt;var&gt;common.conf&lt;/var&gt; пока.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.8: Засыпание посредством TuxOnIce&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# nano -w /etc/hibernate/suspend2.conf
&lt;span class="comment"&gt;(Час X - вы сделали резерную копию?)&lt;/span&gt;
# hibernate
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Настройте &lt;var&gt;fbsplash&lt;/var&gt;, если вы не сделали этого ранее. Чтобы задействовать поддержку  fbsplash во время засыпания, необходимо поставить пакет &lt;var&gt;sys-apps/tuxonice-userui&lt;/var&gt;. Также, вам необхожимо утсановить USE-флаг &lt;var&gt;fbsplash&lt;/var&gt;.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.9: Установка tuxonice-userui&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# echo "sys-apps/tuxonice-userui fbsplash" &gt;&gt; /etc/portage/package.use
&lt;span class="comment"&gt;(Оно может быть маскрирована ~arch, так что вначале надо добавить его в  keywords)&lt;/span&gt;
# echo "sys-apps/tuxonice-userui" &gt;&gt; /etc/portage/package.keywords
# emerge tuxonice-userui&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Ебилд попросит вас создать символическую ссылку на тему, которю вы хотите использовать. Например, чтобы использовать тему &lt;var&gt;livecd-2005.1&lt;/var&gt;, выполните следующую команду:&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.10: Использование темы livecd-2005.1 во время засыпания&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# ln -sfn /etc/splash/livecd-2005.1 /etc/splash/suspend2
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Если вы не хотите видеть чёрный экран в первой части процесса пробуждения, добавьте &lt;var&gt;tuxoniceui_fbsplash&lt;/var&gt; в ваш образ initrd. Если ваш образ initrd называется &lt;var&gt;splash_geninitramfs&lt;/var&gt; и он сохранён в &lt;span class="path"&gt;/boot/fbsplash-emergence-1024x768&lt;/span&gt;, то вам необходимо сделать буквально следующее:&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.11: Добавление tuxoniceui_fbsplash в образ initrd.&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# mount /boot
# mkdir ~/initrd.d
# cp /boot/fbsplash-emergence-1024x768 ~/initrd.d/
# cd ~/initrd.d
# gunzip -c fbsplash-emergence-1024x768 | cpio -idm --quiet -H newc
# rm fbsplash-emergence-1024x768
# cp /usr/sbin/tuxoniceui_fbsplash sbin/
# find . | cpio --quiet --dereference -o -H newc | gzip -9 &amp;gt; /boot/fbsplash-tuxonice-emergence-1024x768
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Далее, отрихтуйте ваш &lt;span class="path"&gt;grub.conf&lt;/span&gt; (или &lt;span class="path"&gt;lilo.conf&lt;/span&gt;), чтоб при загрузке вашего ядра грузился обрах &lt;span class="path"&gt;/boot/fbsplash-tuxonice-emergence-1024x768&lt;/span&gt;. Вы теперь можете попробовать холостой прогон, чтоб убедиться, что всё работает правильно.&lt;/p&gt;

&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 7.12: Тестовый запус fbsplash hibernation&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
# tuxoniceui_fbsplash -t
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Наконец, откройте &lt;span class="path"&gt;/etc/hibernate/common.conf&lt;/span&gt; и включите подержку fbsplash. Запустите &lt;var&gt;hibernate&lt;/var&gt; и наслаждайтесь!&lt;/p&gt;

&lt;h1 id="troubleshooting"&gt;Устранение неполадок&lt;/h1&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Я пытаюсь изменить частоту ЦПУ, но &lt;span class="path"&gt;/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor&lt;/span&gt; не существует.&lt;/div&gt;
&lt;div class="answer"&gt;О: Убедитесь, что ваш процессор поддерживает изменение частоты и выберите правильный CPUFreq драйвер для вашего процессора. Список процессоров, поддерживающих изменение частоты (ядро 2.6.7): ARM Integrator, ARM-SA1100, ARM-SA1110, AMD Elan - SC400, SC410, AMD mobile K6-2+, AMD mobile K6-3+, AMD mobile Duron, AMD mobile Athlon, AMD Opteron, AMD Athlon 64, Cyrix Media GXm, Intel mobile PIII и Intel mobile PIII-M на определённых чипсетах, Intel Pentium 4, Intel Xeon, Intel Pentium M (Centrino), National Semiconductors Geode GX, Transmeta Crusoe, VIA Cyrix 3 / C3, UltraSPARC-III, SuperH SH-3, SH-4, некоторые "PowerBook" и "iBook2" и различные процессоры на совместимых с ACPI 2.0 системах (только если "ACPI Processor Performance States" доступно через интерфейс ACPI/BIOS).&lt;/div&gt;
&lt;/div&gt;


&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Мой ноутбук поддерживает изменение частоты, но директория &lt;span class="path"&gt;/sys/devices/system/cpu/cpu0/cpufreq/&lt;/span&gt; пуста.&lt;/div&gt;
&lt;div class="answer"&gt;Поищите связанные с ACPI ошибки в &lt;var&gt;dmesg | grep ACPI&lt;/var&gt;. Попробуйте обновить BIOS, особенно, если обнаружены проблемы в DSDT. Вы также можете попробовать исправить это самостоятельно (что выходит за рамки этого руководства).&lt;/div&gt;
&lt;/div&gt;


&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Мой ноутбук поддерживает изменение частоты, но согласно &lt;span class="path"&gt;/proc/cpuinfo&lt;/span&gt; частота никогда не изменяется.&lt;/div&gt;
&lt;div class="answer"&gt;О: Возможно, вы включили поддержку симметричной мультипроцессорной обработки (symmetric multiprocessing support) (CONFIG_SMP) в вашем ядре. Попробуйте отключить её, всё должно заработать. Также это может быть багом старях ядер. В таком случае выполните &lt;var&gt;emerge x86info&lt;/var&gt;, обновите ваше ядро как требуется и проверьте текущую частоту через &lt;var&gt;x86info -mhz&lt;/var&gt;.&lt;/div&gt;
&lt;/div&gt;


&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Я могу изменять частоты, но выбор не так широк, как на другой ОС.&lt;/div&gt;
&lt;div class="answer"&gt;О: Вы можете совместить изменение частоты с "торможением" через ACPI (ACPI throttling), чтобы добиться более низких частот. Но стоит понимать, что это не даст большого прироста в сохранении энергии и создана, по большой части, для температурного регулирования (чтобы ноутбук был холожным и тихим). Вы можете просмотреть текущее состояние "торможения" командой &lt;var&gt;cat /proc/acpi/processor/CPU/throttling&lt;/var&gt; и изменить его, выполнив &lt;var&gt;echo -n "0:x" &gt; /proc/acpi/processor/CPU/limit&lt;/var&gt;, где x - одно из возможных состояний, перечисленны в &lt;span class="path"&gt;/proc/acpi/processor/CPU/throttling&lt;/span&gt;.&lt;/div&gt;
&lt;/div&gt;


&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: При конфигурировании ядра пункты powersave governor, performance governor и userspace governor есть, а ondemand governor отсутствует. В чём проблема? &lt;/div&gt;
&lt;div class="answer"&gt;О: Пункт ondemand governor появился только в последних версиях ядра. Попробуйте обновить его.&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Время жизни от батареи стало меньше, чем было.&lt;/div&gt;
&lt;div class="answer"&gt;О: Проверьте настройки BIOS. Возможно, вы забыли заново включить какие-то опции.&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Моя батарея заряжена, но КДЕ сообщает, что осталось 0%, и тут же выключается.&lt;/div&gt;
&lt;div class="answer"&gt;О: Убедитесь, что поддержка батареи выключена в вашем ядре. Если она скомпилированна модулем, то не забудьте загрузить его.&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Моя система журналирования (system logger) пишет что-то, типа "logger: ACPI group battery / action battery is not defined".&lt;/div&gt;
&lt;div class="answer"&gt;О: Это сообщение генерирует скрипт &lt;span class="path"&gt;/etc/acpi/default.sh&lt;/span&gt;, которые прилагается к acpid. Вы можете просто игнорировать его. Если же вы всё-таки хотите его унять, закомментируйте соответсвующую строку в &lt;span class="path"&gt;/etc/acpi/default.sh&lt;/span&gt; как показано ниже:
&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 8.1: Отключение предупреждения о событиях ACPI&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
        *)      # logger "ACPI action $action is not defined"
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: У меня Dell Inspiron 51XX, и я не получаю никаких ACPI-событий&lt;/div&gt;
&lt;div class="answer"&gt;О: Скорее всего, это баг ядра. Прочтите &lt;a href="http://bugme.osdl.org/show_bug.cgi?id=1752"&gt;это&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Я включил &lt;var&gt;DynamicClocks&lt;/var&gt; в &lt;span class="path"&gt;xorg.conf&lt;/span&gt; и теперь X.org рушится / экран остаётся чёрным / мой ноутбук не выключается корректно.&lt;/div&gt;
&lt;div class="answer"&gt;О: Такое бывает на некоторых системах. Вам придётся отключить &lt;var&gt;DynamicClocks&lt;/var&gt;.&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Я хочу использовать TuxOnIce, но он говорит, что моя своп - партиция слишком маленькая. Изменение её размеров - не вариант.&lt;/div&gt;
&lt;div class="answer"&gt;О: Если в вашей системе достаточно свободного места, то вы можете использовать запись в файл, вместо запись в своп. Такой вариант поддерживается &lt;var&gt;hibernate-script&lt;/var&gt;. Дополнительную информацию вы можете найти в &lt;span class="path"&gt;/usr/src/linux/Documentation/power/tuxonice.txt&lt;/span&gt;.&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Я только купил новую фирмешную батарею, но она кончается за несколько минут. Что я делаю не так?&lt;/div&gt;
&lt;div class="answer"&gt;О: Для начала, следуйте инструкция производителя, как зарядить батарею правильно. &lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Вышенаписанное не помогло, что делать теперь?&lt;/div&gt;
&lt;div class="answer"&gt;О: Некоторые батареи продаются как "новые", но на самом деле уже не новы. Попробуйте следующее:
&lt;table class="code_listing"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Листинг 8.2: Запрос сотояния батареи&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class="code"&gt;
$ grep capacity /proc/acpi/battery/BAT0/info
design capacity:     47520 mWh
last full capacity:  41830 mWh&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Если "last full capacity" кардинально отличается от design capacity, ваше батарея, скорее всего, неисправна. Попробуйте потребовать гарантию.
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="q-a"&gt;
&lt;div class="question"&gt;В: Моя проблема не перечислена выше. Что мне делать теперь?&lt;/div&gt;
&lt;div class="answer"&gt;О: Не бойтесь связаться со мной, &lt;a href="mailto:earthwings@gentoo.org"&gt;Dennis Nienhüser&lt;/a&gt;, напрямую. Также вам, наверняка, помогут на &lt;a href="http://forums.gentoo.org/"&gt;Формах Gentoo&lt;/a&gt;. Если вы предпочитается IRC, заходите в канал &lt;var&gt;#gentoo-laptop&lt;/var&gt; на &lt;a href="irc://irc.freenode.net"&gt;irc.freenode.net&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;hr /&gt;
&lt;p&gt;
&lt;b&gt;Замечания к переводу&lt;/b&gt;&lt;br /&gt;
Не удалось найти хороший перевод слову governor. Хороший означает, что оно не слишком общо (как, например, драйвер), ну и подходит по смыслу ;) . Поэтому в тексте используется слово властелин, фомально подходящее под условия, но слишком уж не формальное.
&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-314859240917842100?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/314859240917842100/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=314859240917842100' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/314859240917842100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/314859240917842100'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2007/12/blog-post_12.html' title='Управление питанием компьютера'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-2480083915694691673</id><published>2007-12-07T09:05:00.000-08:00</published><updated>2008-03-25T11:10:48.409-07:00</updated><title type='text'>keyboard autorepeat</title><content type='html'>&lt;p&gt;Некоторое время назад, когда пингвинёнок только появлися из утроба матери, он подхватил странную болезнь - скорость обработки удерживаемой клавиши резко упала, чтобы что стереть приходилось отчаянно бить по Backspace, ну или обладать немалой выдержкой. Конечно, жить можно, и более того, вскоре дженту нашёл X-телепорт, перемещающий в волшебный мир кде, где никаких тормозов уже не существовало. Но настал чёрный день, когда всё стало плохо всюду, и пришлось мне пойти в гугль.&lt;/p&gt;&lt;p&gt;Итак, в консоли всё решает утилита kbdrate, которая входит в пакет sys-apps/kbd.  Чтобы при загрузке частота повторения нажатия была 30cps , а задержка 250ms, достаточно написать:&lt;/p&gt;&lt;p&gt;echo "kbdrate -r 30 -d 250 -s" &gt;&gt; /etc/conf.h/local.start&lt;/p&gt;&lt;p&gt;Иксы перехватывают и обрабатывают нажатия клавиш независимо (что вообщем-то и неудивительно). Посмотреть текущие настройки можно командой&lt;/p&gt;&lt;p&gt;xset q | grep 'repeat delay' &lt;/p&gt;&lt;p&gt;Изменить - либо с помошью той же xset (пропадёт при рестарте), либо поправить строку в xorg.conf&lt;/p&gt;
&lt;code&gt;
Section "InputDevice"
   #
   Option      "AutoRepeat" "250 30"
   #
EndSection
&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-2480083915694691673?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/2480083915694691673/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=2480083915694691673' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/2480083915694691673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/2480083915694691673'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2007/12/keyboard-autorepeat.html' title='keyboard autorepeat'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9099190218971358457.post-3966393606634960163</id><published>2007-12-07T08:14:00.000-08:00</published><updated>2008-03-05T10:58:32.788-08:00</updated><title type='text'>Эбаут</title><content type='html'>Итак, ... в этом блоге я буду писать о своём знакомстве с Gentoo (GNU ОС с ядром Linux), и его знакомстве с моим ноутбуком asus v6, старыми виндовыми партициями и прочее, прочее прочее ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9099190218971358457-3966393606634960163?l=iandmyfriendgentoo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://iandmyfriendgentoo.blogspot.com/feeds/3966393606634960163/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9099190218971358457&amp;postID=3966393606634960163' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/3966393606634960163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9099190218971358457/posts/default/3966393606634960163'/><link rel='alternate' type='text/html' href='http://iandmyfriendgentoo.blogspot.com/2007/12/blog-post.html' title='Эбаут'/><author><name>vah</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
