Опыт использования Debian GNU/Linux на ноутбуке
debian linux hardware driver notebook acpi cpu Yury Yurevich
🕛 21.09.2006, 11:51
From: Yury Yurevich <j2a@jurevich.ru.>Newsgroups: http://omsk.lug.ru/
Date: Mon, 5 Dec 2005 14:31:37 +0000 (UTC)
Subject: Опыт использования Debian GNU/Linux на ноутбуке
Оригинал: http://omsk.lug.ru/wacko/DebianAtLaptop
Debian на ноутбуке
Эта страница освящает использование мною Debian на ноутбуке. Я постарался вскольз упомянуть те темы, информацию по которым можно беспроблемно найти. Там же, где такой информации не много, я постарался более подробно раскрыть вопрос.
В принципе, если возникнет желание (то ли у меня, то ли у [не]случайного читателя) дополнить некоторые разделы - тем лучше, вики для этого и сделана.
Управление питанием
ACPI
Желательно использовать последние патчи от проекта ACPI4Linux. Как правило, оправдано использование последней версии ядра.
На момент, когда я собирал ядро, последними версиями были linux-2.6.11.11, и acpi-20050408-2.6.11. На момент написания статьи - это 2.6.13.4 и 20050902-2.6.13 соответственно.
swsusp2
С ACPI у меня ноутбук не уходил в suspend-to-disk, а после suspend-to-ram не желал включаться. Поэтому я использую swsusp2 для тех случаев, когда есть желание\необходимость использовать suspend-to-disk.
В принципе, в debian входит патч swsusp2, но я советую использовать последний доступный с http://www.suspend2.net Как накладывать патчи swsusp2 вполне ясно написано на их сайте (да я сейчас и не помню тонкости ;) ). Из того что помню: для беспроблемного просыпания нужно либо включать swsusp2 в ядро (CONFIG_SUSPEND2, CONFIG_SUSPEND2_SWAPWRITER, CONFIG_SUSPEND2_LZF_COMPRESSION, CONFIG_SUSPEND2_USERSPACE_UI), либо использовать initrd. От initrd я отказался из-за скорости загрузки. Для засыпания советую использовать пакет hibernate Настройки в нем вполне прозрачны.
cpufreqd
У меня Celeron M, однако и для него cpufreq может быть полезен. Например, включать throttling и понижать яркость дисплея. Его настройки для Celeron M я описывал в debian-russian
Воодушевленный http://grafit.mchtr.pw.edu.pl/~szczedar/nx9020.html попробовал сделать cpufreq на celeron-m
Итак, диспозиция: hp nx9020 с celeron-m 340 (1.5 GHz) который по заявлению производителя не поддерживает технологию speed-step.
И действительно, при попытке подключить модуль cpufreq-centrino (а равно как и любой другой помимо ниже описанного) вылезала ошибка no such device.
В ядро (2.6.11.7 + acpi-20050309 + некоторые патчи от debian) включил p4-clockmod; cpufreqd при установке распознал p-точки, его конфги я немного изменил, чтобы при переходе на батарею он понижал частоту. Поставил "powersave governon" модулем, загрузил модули
p4-clockmod cpufeq-powersave
При переходе на батарею частота снижается до 750 МГц, при интенсивной загрузке (scimark2) переходит на 935 МГц.
/proc/cpuinfo для трех состояний (внешнее питание, батарея, батарея+загрузка процессора); конфиг ядра (то что касается cpufreq); конфиг cpufreqd; результаты scimark2 (внешнее питание, батарея) во вложении.
Кто-нибудь может подтвердить или опровергнуть эту информацию?
CONFIG_MPENTIUMM=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_STAT=m CONFIG_CPU_FREQ_STAT_DETAILS=y CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_PERFORMANCE=m CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_USERSPACE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_TABLE=m CONFIG_X86_P4_CLOCKMOD=m CONFIG_X86_SPEEDSTEP_LIB=m
cpufreqd.conf:
[General] pidfile=/var/run/cpufreqd.pid poll_interval=2 pm_type=acpi #(acpi, apm or pmu) # Uncomment the following line to enable ACPI workaround (see cpufreqd.conf(5)) # acpi_workaround=1 verbosity=4 #(if you want a minimal logging set to 5)
[Profile] name=hi_boost minfreq=1053750 maxfreq=1500000 policy=performance
[Profile] name=medium_boost minfreq=620625 maxfreq=1053750 policy=performance
[Profile] name=lo_boost minfreq=187500 maxfreq=620625 policy=performance
[Profile] name=lo_power minfreq=187500 maxfreq=620625 policy=powersave
# conservative mode when not AC [Rule] name=conservative ac=off # (on/off) battery_interval=0-100 cpu_interval=0-40 profile=lo_boost
# need some power [Rule] name=lo_cpu_boost ac=off # (on/off) battery_interval=0-100 cpu_interval=30-80 profile=medium_boost
# need big power (not if battery very low) [Rule] name=hi_cpu_boost ac=off # (on/off) battery_interval=50-100 cpu_interval=70-100 profile=medium_boost
# full power when AC [Rule] name=AC_on ac=on # (on/off) profile=hi_boost
# full power when watching DVDs and not AC: # this is the last rule and takes less # precedence with respect to the others [Rule] name=dvd_watching ac=off # (on/off) battery_interval=0-100 programs=xine,mplayer,avidemux cpu_interval=0-100 profile=medium_boost
Сеть
В debian довольно удачная схема настройки сети (man interfaces) и этой схемой поддерживаются множественные профили. Остается лишь настроить автоматический выбор этих профилей.
ifplugd
Мне оказалось достаточного apt-get install ifplugd и интерфейс автоматически стал подниматься\опускаться при втыкании\вытыкании сетевого кабеля.
guessnet
Инструмент, который будет выбирать нужный профиль в зависимости от окружения.
Работает так: заранее описываются <<целевые>> машины (т.е. те, на которые стоит ориентироваться при выборе окружения - напр. шлюзы) парой значений ip-mac. При подключении кабеля, посылаются arp-запросы, в зависимости от того, какой <<целевой>> компьютер ответил, выбирается соответствующий профиль.
Советую почитать документацию к guessnet, там есть неплохие примеры, на которые я и ориентировался, составляя свою конфигурацию. Итак:
# /etc/network/interfaces - configuration file for ifup(8), ifdown(8)
# The loopback interface auto lo iface lo inet loopback
# eth0 выбирается из профиля guessnet mapping eth0 script /usr/sbin/guessnet-ifupdown map default: none map timeout: 3 map verbose: true
iface home inet static address 172.16.0.2 netmask 255.255.255.0 network 172.16.0.0 broadcast 172.16.0.255 gateway 172.16.0.1 up roaming home down roaming none test-peer address 172.16.0.1 mac 00:80:AD:85:F5:7C
iface univer inet static address 192.168.0.220 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 up roaming univer down roaming none test-peer address 192.168.0.1 mac 00:C0:26:AB:F8:91
iface pp inet static address 192.168.0.220 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 test-peer address 192.168.0.215 mac 00:11:2F:A6:45:B0
iface work inet static address 200.200.200.200 netmask 255.255.255.0 network 200.200.200.0 broadcast 200.200.200.255 up roaming none test-peer address 200.200.200.240 mac 00:04:75:72:A8:4F
# если кабель не подключен (т.е. пытаемся поднять интерфейс, а кабель не подключен) iface disconnected inet static address 10.1.23.12 netmask 255.255.255.0 up roaming none test-missing-cable please
Конструкции test-peer address <IP> mac <MAC> и test-missing-cable please как раз относятся к guessnet. К чему относятся up roaming - чуть ниже.
Почта
Я использую классическую связку MTA+MDA+MUA. Настройки MDA (procmail) и MUA (mutt) ничем не отличаются от десктопа, а вот на MTA остановлюсь поподробнее.
masqmail
На masqmail я остановился из-за того, что он поддерживает профили (т.е. в одном окружении - один релей, в другом - другой). В принципе, можно один настроить некий другой недо-MTA, поддерживающий авторизацию и настроить на один SMTP-сервер с авторизацией. Однако должен быть такой MTA, чтобы он понимал, что иногда машина оффлайн и не пытаться отправить почту, а ждать пока не будет онлайн. masqmail такое умеет. Единственно, что он еще и может выполнять функции fetchmail\getmail и, IMHO, это лишне. Если честно, то мне было лениво разбираться как сделать ssl в masqmail и использую fetchmail, как и использовал на десктопе.
Итак, насчёт masqmail: онлайн\оффлайн и выбор профиля осуществляется по файлу (точнее я это использовал, он еще по выводу команды умеет), в котором написано имя профиля. Если такого файла нет, то значит оффлайн. Имя профиля и определяет, какой транспорт (route) будет использоваться:
# /etc/masqmail/masqmail.conf ### BEGIN DEBCONF SECTION # Do not edit within this region if you want your changes to be preserved by # debconf. Instead, make changes after the "### END DEBCONF SECTION" line. host_name="moby.omsktele.com" local_hosts="localhost;moby;moby.omsktele.com" local_nets="" listen_addresses="localhost:25" spool_dir="/var/spool/masqmail" mail_dir="/var/mail" log_dir="/var/log/masqmail" do_queue=false use_syslog=false mbox_default=mda mda="/usr/bin/procmail -Y -d ${rcpt_local}" alias_file=/etc/aliases alias_local_caseless="false" ### END DEBCONF SECTION # online_detect=file online_file="/etc/roaming/online" # include the locations of your route and get configurations here. # Examples: # online_routes.default = "/etc/masqmail/default.route" # online_gets.default = "/etc/masqmail/default.get" # You can have more of those, with '.default' replaced with other # names. See man 8 masqmail.conf. online_routes.univer = "/etc/masqmail/univer.route" online_routes.home = "/etc/masqmail/home.route"
Соответствующие файлы транспортов (route) выглядят однотипно и я в качестве примера приведу один:
#/etc/masqmail/home.route protocol = smtp mail_host = debsmart helo_name = moby.jurevich.ru
А каким образом выбираются профили, уже можно догадаться ;)
roaming
Итак, при поднятии\опускании интерфейса запускаем скрип roaming, который делает нужные действия:
* информирует (при помощи соответсвующего файла) об онлайн\оффлайн состоянии * сообщает (содержимое файла) о профиле * использует нужный resolv.conf * синхронизирует время по ntp * что-нибудь еще (напр. смена конфигурации samba), ограничение - только ваша фантазия.
#!/bin/sh # -*- coding: koi8-r -*- # roaming: делает все необходимые манипуляции при поднятии интерфейса # Юрий 'Cap. J2A' Юревич (Jurie Jurevich), http://j2a.jurevich.ru # 2005-08-01
# первый параметр - имя конфигурации conf="$1"
if [ -z "$conf" ]; then # если не передали параметр, ничего не делаем exit fi
# прописываем нужный resolv.conf ln -fs "/etc/roaming/resolv.conf_$conf" /etc/resolv.conf
if [ "$conf" = "none" ]; then # значит оффлайн rm -f /etc/roaming/online touch /etc/roaming/not_online # останавливаем синхронизацию времени /etc/init.d/ntpdate stop else # значит онлайн # сообщаем, какую конфигурацию запускаем echo "$conf" >/etc/roaming/online # сообщаем, что перестали быть оффлайн rm -f /etc/roaming/not_online # синхронизируем время /etc/init.d/ntpdate start fi