понедельник, 22 декабря 2008 г.

Свеженький wine

С недавних пор в разделе загрузок на сайте www.winehq.org появился раздел для Debian Lenny! Теперь пользователям этой версии Debian доступны самые свежии сборки Wine. Сборки для Etch в Lenny использовать было невозможно из-за различий в названиях некоторых зависимостей. Видимо, можно было немного пошаманить, но теперь всё работает из коробки. Инструкции есть здесь, но я изложу на великом и могучем. Имейте ввиду, что это все-таки сборки разрабатываемых, нестабильных версий и могут иметь место регрессии по сравнению с предыдущими версиями.

Во-первых, удаляем старую версию командой:
# apt-get remove libwine wine
Добавляем репозиторий в свой /etc/apt/sources.list Для бинарных сборок репозиторий:
deb http://www.lamaresh.net/apt lenny main
Репозиторий с исходниками подключается следующей строчкой:
deb-src http://www.lamaresh.net/apt lenny main

Теперь обновляем список доступных пакетов:
# apt-get update
и устанавливаем Wine:
# apt-get install wine

Все перечисленные действия можно также проделать и через Synaptic.
Данная сборка, в отличие от официального репозитория, состоит из одного пакета wine, который включает в себя всё.

среда, 5 ноября 2008 г.

Google Analytics

Прикрутил сбор статистики о посещениях. Давным давно надо было об этом подумать. Рекламу ненавижу и размещать здесь не планирую :)

среда, 29 октября 2008 г.

Сборка пакетов из исходников в Debian

apt-build

В Debian можно довольно легко сделать систему управления пакетами со сборкой из исходников (как, например, в Gentoo и др). Для этого надо всего-лишь установить пакет apt-build. При установке вам будут заданы некоторые вопросы по настройке программы, такие как архитектура вашего процессора (набор команд под которые будет оптимизирован исполняемый код), добавлять ли папку с собранными пакетами в список репозиториев обычного apt и др. После этого можно, например, пересобрать всю систему заново из исходников командой (не советую, потратите много времени):
# apt-build world
Или можно использовать программу как замену обычного apt-get. Например, для сборки оптимизированной версии Amarok и его незамедлительной установки можно воспользоваться командой:
# apt-build install amarok
После чего программа скачает все необходимые исходники, соберет пакеты, оптимизированные под вашу архитектуру, и установит эти пакеты.
Нужно как-нибудь провести сравнительное тестирование программ стандартной сборки и собранных из исходников.

apt-get source

Предыдущий вариант подходит больше для энтузиастов, выжимающих из системы максимум. А что, если нужно кое-что изменить в исходниках программы, добавить собственные настройки по-умолчанию и т.п.? Тогда можно воспользоваться следующим методом.
1. Устанавливаем зависимости для сборки нужного нам пакета:
# apt-get build-dep имя_пакета
2. Скачиваем исходный код пакета (исходники скачаются и распакуются в текущую папку):
# apt-get source имя_пакета
3. В текущей папке появится каталог с исходниками программы и необходимыми скриптами для сборки пакета, называться будет: имя_программы-версия. Производим желаемые изменения в исходниках программы.
4. Для сборки пакета из папки с исходниками (./имя_пакета-версия) нужно выполнить:
# debian/rules binary
И в текущем каталоге окажется собранный пакет. Его можно тут же установить:
# dpkg -i ../имя_собранного_пакета.deb

понедельник, 27 октября 2008 г.

Самые горячие клавиши

Люди, использующие компьютер давно, привыкли получать от него максимум в короткий срок. Поиск по меню и кликанье мышью - не самый эффективный способ управления программами и системой в целом. Намного удобнее использовать горячие клавиши. Пришло время занести все познания на эту тему в блог.

xbindkeys

Эта программа используется для настройки реакции на любые горячие клавиши глобально в иксах. Для настройки ее можно использовать утилиту или обойтись без излишеств и отредактировать файл ".xbindkeysrc" в домашней папке самостоятельно. Формат файла такой:

"команда1"
сочетание клавиш 1

"команда2"
сочетание клавиш 2

Чтобы узнать какой клавише что соответствует пишем в консоли:

$ xbindkeys -k

и жмем кнопку или их сочетание. На выходе получим 2 строчки:

m:0x8 + c:56
Alt + b

В файле конфигурации, как я понимаю, можно использовать любую. Но для надёжности берем первую. Например, чтобы по этому сочетанию клавиш запускалась консоль GNOME, файл конфигурации будет выглядеть так:

"gnome-terminal"
m:0x8 + c:56

Через эту программу можно назначать и реакции на кнопки мыши (а можно и комбинации клавиатура+мышь) или на другие устройства ввода.

Пока что с этой программой у меня возникла только одна проблема... Она не работает с драйвером xserver-xorg-input-evdev. При назначении команд на события такого устройства ввода, иксы падают.

Compiz Config Settings Manager (CCSM)

Если вы используете Compiz, то в нем тоже легко настроить несколько произвольных команд на глобальные горячие клавиши. Для этого запускаем ccsm и заходим в основные настройки. На одной из закладок (в зависимости от версии программы) можно задать команды, а где-то в другом разделе можно задать соответствующие им горячие клавиши. Настройка не совсем интуитивно понятная, но не замороченная: команда 1 соответствует комбинации клавиш №1 и т.д. Недостатком такого метода является то, что можно настроить всего около 10 собственных команд (а этого ой как мало). Но можно немного сэкономить драгоценные собственные команды и использовать уже готовые. Например, для настройки горячей клавиши на запуск терминала можно использовать встроенные средства.

Также здесь стоит упомянуть о том, что через этот же CCSM можно настроить практически какие угодно комбинации клавиш клавиатуры (в сочетании с Alt, Win, Ctrl, Shift) и мыши (можно задать часть экрана, в которой будет работать команда и др.) на манипуляции с окнами и рабочими столами. Мне оказался очень полезен модуль Maximumize. Он позволяет настроить сочетание клавиш на "разворот выбранного окна так, чтобы оно заняло свободное место, оставшееся от других окон". Позволяет очень быстро располагать несколько окон рядом, чтобы они эффективно использовали пространство стола. И это только один модуль, а их там десятки.

Средства GNOME

Этот раздел уже не про глобальные клавиши, но всё ещё про горячие. В среде GNOME в настройках внешнего вида есть неприметная опция "Редактируемые ускорители меню". Поначалу создаётся ощущение, что опция ни на что не влияет. Скажем так, это не позволит вам редактировать горячие клавиши через какие-то дополнительные формы, окна, параметры и т.п. А это и не нужно! Всё гениальное просто! Выделите пункт меню в GTK2-программе (Firefox и OpenOffice таковыми не являются) и просто нажмите комбинацию клавиш, которые вы хотите назначить на этот пункт! И всё!!! Никаких заморочек, всё просто! Так можно настроить быструю кнопку или сочетание практически на любой пункт меню и не только главного меню, можно и на контекстном меню такое провернуть! Для бывших виндозников (я в их числе) от такого удобства просто шок! Про эту фишку надо всем рассказывать при первом входе в среду GNOME! Еще радует, что после того, как все сочетания настроены таким методом, можно всё зафиксировать от случайного переназначения в процессе работы, отключив упомянутую ранее опцию. Один из минусов - невозможно назначить клавиши для основного меню GNOME, функция работает только внутри программ.

Acer Shiny Media Keys

Этот раздел для владельцев ноутбуков Acer со светящимися мультимедиа-клавишами. Кнопки сенсорные, напоминают тачпад по принципу работы. По-умолчанию они обрабатываются как еще одна мышь и настройка некоторых из них на выполнение команд приведет к тому, что команды будут выполняться еще и при прокрутке колесом на нормальной мыши. Инструкция по приручению диких кнопок была найдена на gentoo-wiki, ограничусь только копией того, что где должно быть прописано. В файле /etc/udev/rules.d/10-acersynaptic.rules должны быть правила:

SUBSYSTEMS=="input", ATTRS{phys}=="isa0060/serio4/input0", KERNEL=="event*", NAME="input/eventtouchpad"
SUBSYSTEMS=="input", ATTRS{phys}=="isa0060/serio3/input0", KERNEL=="event*", NAME="input/eventkeys"

Если файла нет - создаем. Дальше настройка X.org должна выглядеть так (файл /etc/X11/xorg.conf):

Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen" 0 0
InputDevice "Generic Keyboard"
InputDevice "AcerMediaKeys" "CorePointer"
InputDevice "Configured Mouse"
InputDevice "Synaptics Touchpad"
EndSection

Section "InputDevice"
Identifier "AcerMediaKeys"
Driver "evdev"
Option "Device" "/dev/input/eventkeys"
Option "SendCoreEvents" "true"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMApping" "4 5"
Option "Buttons" "8"
Option "ButtonMapping" "1 2 3 6 7 8 9"
EndSection

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/input/eventtouchpad" #here you may need to customize
Option "Protocol" "event"
Option "LeftEdge" "1900"
Option "RightEdge" "5400"
Option "TopEdge" "1900"
Option "BottomEdge" "4000"
Option "FingerLow" "25"
Option "FingerHigh" "30"
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "VertScrollDelta" "100"
Option "MinSpeed" "0.02"
Option "MaxSpeed" "0.18"
Option "AccelFactor" "0.0010"
Option "HorizEdgeScroll" "0"
Option "SHMConfig" "True"
EndSection

Не забудьте поправить по своему вкусу. На самом деле, здесь сразу и настройка тачпада. После этого кнопки будут генерировать события как от мыши, но в диапазоне, в который нормальной мыши кнопок не хватит попасть (кнопка №17, №20 и т.д.) и их смело можно вешать на команды, например, через xbindkeys.

Обновление

В последних версиях udev произошли какие-то изменения и правила не работают. Переименовываем файл в /etc/udev/rules.d/51-acersynaptic.rules и после этого наше правило будет перезаписывать системное и всё снова заработает.

Еще можно попробовать добавить в этот файл правило для отключения работы мультимедиа-клавиш в качестве мыши. Пока не пробовал, но строчка должна быть вот такой:

SUBSYSTEM=="input", ATTRS{phys}=="isa0060/serio3/input0", KERNEL=="mouse*", OPTIONS="ignore_device"

D-bus

Кто-то знает о ней, кто-то первый раз слышит. D-bus - это шина коммуникации процессов. Через нее много что работает в Linux: программы могут узнать о наличии/отсутствии сети у Network Manager'а, ваш музыкальный плеер сообщит программе обмена мгновенными сообщениями название композиции и ваши собеседники увидят ее у вас в статусе, управление Bluetooth-адаптером и еще целый вагон различных коммуникаций между программами происходит через шину D-bus. Но вот мало кто, кроме разработчиков программ, пытался непосредственно использовать D-bus для собственных нужд. Для работы с шиной есть несколько консольных программ, через них можно отправлять сообщения и вызывать функции какой-либо программы, которая предоставляет такие возможности. Как можно "общаться" с какой-либо конкретной программой через D-bus обычно можно найти в разделе документации на сайте программы (также есть смысл искать в разделе для разработчиков).

В общем случае, вызов функции другой программы выглядит следующим образом:

dbus-send --dest=org.freedesktop.ExampleName /org/freedesktop/sample/object/name org.freedesktop.ExampleInterface.ExampleMethod

Где:

  1. org.freedesktop.ExampleName — это имя «пункта назначения», т.е. идентификатор программы;

  2. /org/freedesktop/sample/object/name — путь к объекту в программе, у которого мы будем вызывать функцию;

  3. org.freedesktop.ExampleInterface.ExampleMethod — собственно, имя функции, которую мы вызываем.

Теперь об использовании этой функции в полевых условиях. Например, нужно назначить переключение на следующую композицию в проигрывателе. Для этого мы в худшем случае смотрим справку или man-страницу программы, узнаем необходимый нам ключ запуска программы и вешаем команду на кнопку. Что при этом происходит:

  • при нажатии клавиши запускается второй экземпляр плеера

  • второй экземпляр сообщает первому, что нужно сделать, и прекращает работу.

Зачастую получается довольно медленно и неповоротливо, т.к. плееры в наше время громоздкие и загрузка еще одного экземпляра — не лучшая идея. Да и многие плееры могут запускать параллельно несколько экземпляров одновременно и такой фокус может не пройти. А теперь посмотрим, что происходит при использовании dbus-send:

  • при нажатии клавиши запускается маленькая программа dbus-send

  • она сообщает плееру, что нужно сделать.

Реакция на кнопки ощутимо быстрее предыдущего метода. Один из явных минусов метода — программа должна быть уже запущена, чтобы управляться через D-bus (может я здесь не прав...). В предыдущем методе управления плеером этот недостаток отсутствует. Приведу конкретный пример. Для управления плеером Audacious используются следующие команды:

  • воспроизведение/пауза: dbus-send --dest=org.mpris.audacious /org/atheme/audacious org.atheme.audacious.PlayPause

  • стоп: dbus-send --dest=org.mpris.audacious /Player org.freedesktop.MediaPlayer.Stop

  • предыдущая в списке композиция: dbus-send --dest=org.mpris.audacious /Player org.freedesktop.MediaPlayer.Prev

  • следующая в списке композиция: dbus-send --dest=org.mpris.audacious /Player org.freedesktop.MediaPlayer.Next

На этом всё.

четверг, 25 сентября 2008 г.

Выжимаем из Nvidia GeForce максимум

Многие жалуются на недостаточную скорость работы сочетания Compiz+Nvidia drivers+Firefox и другие "тяжелые" программы. Решением этой проблемы является тонкая настройка Иксов и проприетарных драйверов. Имейте ввиду, что у меня видеокарта Nvidia GeForce 8600M GS и, возможно, для других семейств видеокарт все описанные ниже танцы с бубном будут не нужны или не актуальны. Используется версия драйверов 173.14.09 из Sid.

Для начала необязательный этап: сборка модуля nvidia вместе с ядром. Вместо сборки можно установить уже готовый модуль из пакета nvidia-kernel-..., но т.к. модуля под вашу версию ядра может и не оказаться, соберем модуль сами. Для этого ставим пакет nvidia-kernel-source. В папке /usr/src обнаруживается архив nvidia-kernel.tar.bz2, его нужно распаковать в ту же папку, т.е. структура каталогов будет: /usr/src/modules/nvidia-kernel Далее нужно настроить ядро. На странице вики говорят, что следующие опции вызывают проблемы с драйвером от Nvidia и их необходимо отключить:
  • Device drivers –> Graphics Support –> nVidia Riva support (FB_RIVA)
  • Device drivers –> Graphics support –> nVidia Framebuffer Support (FB_NVIDIA)
  • Device drivers –> Graphics support –> VESA VGA graphics support (FB_VESA)
  • Processor Type and Features –> Local APIC support on uniprocessors (X86_UP_APIC)
Если некоторые опции вы не можете найти, то можно считать, что они отключены. Сохраняем конфиг. После этого пересобираем ядро уже следующей командой (от рута):
make-kpkg --initrd linux_image modules_image
После сборки, кроме пакета с ядром, будет создан еще и пакет с модулем nvidia. Его необходимо установить также в дополнение к ядру. После установки новых ядра и модуля нужно перезагрузить систему.

Итак, для работы драйвера от Nvidia в системе должны быть установлены следующие пакеты:
  • nvidia-glx
  • nvidia-kernel-common
  • nvidia-settings (очень полезная вещь для настройки и мониторинга, но можно и не ставить)
  • nvidia-kernel-... (из репозитория или собранный на предыдущем шаге)

Приступаем к настройке. Для начала нужно настроить иксы на работу с установленным драйвером. Для этого в /etc/X11/xorg.conf нужно в секции "Device" указать
Driver "nvidia"
Перед внесением изменений сделайте бэкап этого файла, мало ли чего. Далее сохраняем файл и перезапускаем иксы (Ctrl+Alt+Backspace). Если иксы не запустились - проводите работу над ошибками. Если иксы запустились, выполняем в консоли glxinfo и смотрим, чтобы были такие строчки:
direct rendering: Yes
OpenGL vendor string: NVIDIA Corporation
Если всё так, то ура, драйвер работает. Если не работает - ищите ошибки, Гугл вам в помощь.

Теперь тюнинг. В /etc/X11/xorg.conf в секцию "Screen" нужно добавить следующее:
Option "AllowGLXWithComposite" "true"
Option "RenderAccel" "true"
Option "UseEvents" "false"
Option "TripleBuffer" "1"
Option "DamageEvents" "1"
Option "BackingStore" "1"
Option "RandRRotation" "true"
Option "NvAGP" "1"
Option "NoLogo"
Option "PixmapCacheSize" "2500000"
Option "AddARGBGLXVisuals" "true"
Option "OnDemandVBlankInterrupts" "true"
Эти опции выдернуты из различных описаний на форумах и обсуждений по оптимизации скорости на форуме Nvidia по Linux. Все описания этих опций есть в документации к драйверам. Для активации разгона можно также добавить:
Option "Coolbits" "1"
сами знаете, что за спаленный чип несете ответственность только вы.

Далее в пользовательский автозапуск необходимо добавить следующее:
nvidia-settings -a InitialPixmapPlacement=2 -a GlyphCache=1
в Гноме можно это добавить в "Сеансы".

Следующий шаг для владельцев ноутбуков. Чтобы отключить зловредный PowerMizer при питании от сети можно воспользоваться описанным мною ранее методом, а можно следующим, более корректным, но не всегда работающим. Итак, для отключения PowerMizer во время питания от сети необходимо в файл /etc/modprobe.d/nvidia-kernel-nkc в строчку, начинающуюся с
options nvidia
добавить через пробел следующую настройку:
NVreg_RegistryDwords="PerfLevelSrc=0x3322"
Т.е. строчка будет выглядеть примерно так:
options nvidia NVreg_DeviceFileUID=0 NVreg_DeviceFileGID=44 NVreg_DeviceFileMode=0660 NVreg_RegistryDwords="PerfLevelSrc=0x3322"
После этого можете перезагрузиться (перезапуск иксов не даст полного эффекта, по-моему) и наблюдать очень неплохую производительность в Compiz и Firefox. :)

Мониторить PowerMizer можно через nvidia-settings на соответствующей закладке. Учтите, что если драйвер уверен в отсутствии питания от сети, т.е. если
Power Source: Battery,
то на максимальное быстродействие не надейтесь. Замечены проблемы с определением источника питания после выхода из спящего режима.

Обновление
После обновления драйверов до 177.80 (пока есть только в experimental) производительность при работе от сети - просто отличная! Впечатления замечательные. И в этой версии должны быть исправлены проблемы с определением источника питания на новых ядрах.

Обновление от 7 ноября 2009
Наткнулся на статейку, описывающую еще некоторые дополнительные параметры, которые можно передать модулю ядра для более тонкой настройки PowerMizer. В частности, есть 2 новых параметра и нужно пояснить уже появлявшийся параметр:
  • PowerMizerDefault - режим по-умолчанию от батареи
  • PowerMizerDefaultAC - то же самое, но при работе от сети
  • PerfLevelSrc - политика переключения режимов, после 0x первые 2 цифры - политика в режиме работы от батареи, последние 2 - при работе от сети. 22 означает фиксированный режим, 33 - динамическое изменение в зависимости от нагрузки.
Список режимов для подстановки в первые 2 параметра можно посмотреть командой:
$ nvidia-settings -q GPUPerfModes -t
Она покажет режимы (perf) и соответствующие им частоты ядра и памяти. После этого можно выбрать подходящий и использовать его в настройке.

среда, 24 сентября 2008 г.

Жизнь в Debian Lenny

В итоге Debian оправдал возложенные надежды, но только после перехода на Lenny, в Etch жить ну уж совсем невозможно. А вот Lenny устраивает гораздо больше, чем Убунту. Здесь нет погони за регулярным частым релизом - релиз выпускается, когда баги залатаны, фичи достигнуты и получается достаточно качественный дистрибутив. Убунта после взгляда на Дебиан кажется слишком уж предустановленной и преднастроенной... веет от нее проприетарными настроениями, когда из установленной системы приходится выкорчевывать лишнее, а не наполнять нужным. А Дебиан в свою очередь даже отчасти выигрывает от этаких родственных связей с Убунтой: в наши дни Убунта становится популярной и многие создатели ПО делают под нее готовые пакеты и репозитории... которые очень часто подходят и к Дебиан. Однако тут следует быть очень осторожными, нет ничего хорошего в частом смешивании пакетов из разных дистрибутивов.

Сборка ядра в Дебиан

Сразу замечание: троеточие в названиях пакетов, файлов и т.д. заменяют версии, т.е. вместо троеточия предполагается версия с которой вы работаете.

Для сборки ядра нам понадобятся:
  • Собственно, исходники ядра: linux-source-...
  • Компилятор: gcc-...
  • Утилита make
  • Утилита сборки пакетов ядра: kernel-package
  • Всё, что утилита сборки еще попросит. :) В моем случае для сборки утилиты конфигурирования ядра понадобились libgtk2.0-dev, libglib2.0-dev и libpango1.0-dev
После установки всего этого в папке /usr/src появится архив linux-source-....tar.bz2 его нужно распаковать здесь же... Исходники ядра должны оказаться в папке /usr/src/linux-source-...

Далее открываем консоль в папке с исходниками ядра и для запуска программы конфигурации набираем в ней из-под рута:
  • для GTK-оболочки: make gconfig
  • для QT-оболочки: make xconfig
  • для консольной ncurces-оболочки: make menuconfig
Если программа сразу не собралась, то вниательно читаем сообщения и ставим пакеты, которые просят, не забывая при этом, что нужны нам пакеты с суффиксом -dev, т.к. программа конфигурации именно собирается, а не просто запускается.

После удачного запуска конфигуратора настраиваем систему. На этом этапе, если вы захотите что-то кардинально поменять, делайте это осторожно! Читайте комментарии к опциям, скорее всего, там есть внятное объяснение и если вы не знаете, что ответить, то в комментариях можно найти ответ по-умолчанию, подходящий в большинстве случаев. Не отключайте модули работы с типом файловой системы, в которую отформатирована корневая система... сами знаете к чему это приведет. Из общих настроек (General setup) можно выделить одну полезную опцию, которая при сборке пригодится: "Local version - append to kernel release" - она позволяет задать некоторый суффикс, добавляемый к версии ядра. Полезна будет эта опция, если вы захотите установить несколько ядер одинаковой версии, но собранных по-разному (например, официальное и собственноручно собранное). Лучше именно так и сделать, иначе можно с первого раза собрать ядро так, что система не загрузится вообще и чтобы попасть обратно в рабочую систему, придется изрядно попотеть. Поэтому впишите лучше сюда что-нибудь вроде tuned.

Далее настраиваем ядро по собственному вкусу и по потребностям. Тут углублюсь в решение насущных проблем и зафиксирую пару полезных (для меня) опций. Для работы встроенной в ноутбук камеры нужно включить:
Device Drivers
-Multimedia Devices
--Video Capture Adapters
---V4L USB Devices
----USB Video Class (UVC)
Для работы индикатора Wi-Fi (у меня карта Intel Corporation PRO/Wireless 3945ABG) нужно включить:
Device Drivers
-Network device support
--Wireless LAN
---Intel PRO/Wireless 3945ABG/BG Network Connection
----Enable LEDS features in iwl3945 driver
После настройки сохраняем конфиг и выходим из конфигуратора, попадаем снова в консоль.

Далее, опять-таки из-под рута, выполняем следующее:
make-kpkg --initrd linux_image
и наслаждаемся сборкой ядра. Приготовьтесь к довольно длительному ожиданию.

После сборки в каталоге выше (/usr/src) появится deb-пакет именуемый linux-image-....deb
Ставим его командой из-под рута:
dpkg -i linux-image-....deb
Перезагружаемся.

Если вы указали суффикс к версии ядра, то выбираем из списка соответствующее ядро и грузимся. Если же суффикс указан не был, то новое ядро просто заменит предыдущее.

Теперь можно пользоваться.
В следующих постах расскажу, как вместе с ядром собирать еще и драйвер видеокарт Nvidia, чтобы не переустанавливать его после каждой сборки ядра.

воскресенье, 20 июля 2008 г.

Решение проблемы с индикатором WiFi (WiFi-LED)

В Debian с ядром 2.6.24 изначально есть проблема с индикатором активности Wi-Fi для карточек Intel Pro Wireless 3945: он не работает вообще. После поиска решение было найдено здесь. Для исправления проблемы качаем последний патч из списка и кладем его в папку с исходниками ядра (в принципе, можете кинуть куда угодно, если знаете что делаете). Далее из-под рута пишем:
patch -p0 -i имя_файла.diff
После этого пересобираем ядро + initrd (в процессе сборки ядра будет задан вопрос по поводу включения WIFI LED ... отвечаем на него положительно, т.е. Y), перезагружаемся и ура! При активном соединении индикатор будет гореть, а при передаче/приеме данных еще и едва заметно мигать.

P.S. Аспекты сборки ядра и initrd опишу несколько позже.
P.P.S. Wi-Fi LED уже в ядре начиная с версии 2.6.26, но, вроде, выключены по-умолчанию. Смотрите пост про сборку ядра.

пятница, 11 июля 2008 г.

Надо заняться редизайном шаблона в блоге, а то какие-то все страшные они...

TuxOnIce (бывший suspend2) в Debian

Надумал поставить себе улучшенную версию "усыпляльщика" системы, TuxOnIce. Самое привлекательное - сжатие образа памяти налету шустрым алгоритмом. Т.к. пока что процесс сжатия происходит быстрее процесса записи на жесткий, это позволяет сократить время засыпания/подъема системы, а это ой как важно!

Сейчас у меня установлено ядро 2.6.24-7 из репов ленни.

Как оказалось, последняя версия патча TuxOnIce есть в Дебиановских репозиториях. Пакет зовется linux-patch-tuxonice. Однако, его установки не достаточно для начала работы TuxOnIce. Это всего-лишь патч. Нужно скачать еще и исходники ядра (можно из репозиториев стянуть, получим исходники того ядра, на котором система и работает). Далее, патчим исходники... для этого переходим в корневую папку исходников (у меня это /usr/src/linux-source-2.6.24) и оттуда от имени рута выполняем

../kernel-patches/all/apply/tuxonice

Теперь открываем конфигуратор ядра и там смотрим опции, которые нам нужны. Все настройки находятся разделе Power management -> Hibernation -> Enchanced Hibernation. Там можно включить/выключить хранение образа памяти в файле или в свопе, поддержку сжатия ;) , поддержку сплеш-картинки, а также включить по-умолчанию TuxOnIce и заменить старый метод гибернации. Себе я включил запись в своп, сжатие и замену старого метода, плюс оставил включенной опцию "Checksum pagaset2" (как я понял, это нужно для проверки целостности образа памяти). Пока не пробовал подключать сплеш-картинку, но обязательно попробую позже...

После этого собираем ядро в дебиан-пакет командой

make deb-pkg

и ждем. Процесс не быстрый. После этого устанавливаем полученный пакет. Если все прошло так же, как у меня, то пакет не заменит старую версию ядра, а поставит еще одну, также модули установятся в отдельную папку.

А теперь самое интересное. Для работы этого чуда нужно:
  • добавить скрипт в initramfs для пробуждения системы, иначе после усыпления при загрузке системы не будет восстановлен образ памяти, а система загрузится как ни в чем не бывало (за исключением отвалившегося свопа с сообщением "Unable to find swap-space signature")
  • собрать initrd с новыми модулями и добавленным скриптом
  • настроить загрузчик на новое ядро, initrd и указать устройство для хранения образа памяти.
Теперь подробно. Убедитесь, что у вас установлен пакет initramfs-tools, он нам понадобится. Скрипт вот такого содержания:

#!/bin/sh
PREREQ=""

prereqs()
{
echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac

if [ -d /sys/power/tuxonice ]; then
echo 1 > /sys/power/tuxonice/do_resume
fi

нужно положить в файл /etc/initramfs-tools/scripts/local-premount/tuxonice
Самая веселая шутка в том, что имя файла должно содержать только цифры, буквы и символ подчеркивания. Если назвать файл как-нибудь так: "tuxonice.sh", то ничего не сработает. ;) Ну и не забываем сделать файл исполняемым:

chmod ugo+x /etc/initramfs-tools/scripts/local-premount/tuxonice

Далее, собираем initrd. Для этого делал я следующее. Для удобства переходим в консоли в папку /boot, затем оттуда от рута выполняем:

mkinitramfs -o initrd.img-2.6.24 2.6.24

Подробнее о параметрах:
  • -o <имя образа> - это выходной файл, думаю можно указывать что душе угодно, главное - затем загрузчику указать тот же файл.
  • <версия ядра> - это версия ядра, для которой мы собираем initrd. Если его не указывать, то программа возьмет модули от текущей версии ядра и система может не стартовать вообще.
Если настройка производится для текущего ядра можно использовать команду по-проще:

update-initramfs -u

Теперь настраиваем загрузчик. Сам я использую GRUB, поэтому и настройку привожу для него. Вот как выглядит запись для нового ядра:

title Debian GNU/Linux, kernel 2.6.24 Custom Kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.24 root=/dev/sda1 ro vga=791 resume=swap:/dev/sda5
initrd /boot/initrd.img-2.6.24

Просто скопируйте строчку, с помощью которой загружаетесь в данный момент и измените 3 параметра:
  • /boot/vmlinuz-2.6.24 - это образ ядра, он устанавливается из deb-пакета, который сгенерирован системой сборки ядра. Подставляйте свой файл.
  • resume=swap:/dev/sda5 - это параметр для TuxOnIce. Он говорит, куда записывать и откуда брать образ памяти. У меня это своп-раздел /dev/sda5. Выяснить, что вам нужно здесь вписывать поможет "fdisk -l", тип какого устройства swap, такой адрес и пишите. Здесь также можно указать и файл, но я не пробовал, поэтому советовать не буду... читайте документацию на официальном сайте.
  • /boot/initrd.img-2.6.24 - это ваш initrd.


На этом базовая настройка заканчивается... и начинаются танцы с бубном. Если система пишет, что на второй стадии ей чего-то там не хватило, что у вас установлено extra_pages_allowance в 500, а ей нужно больше, то методов решения тут несколько. Нужно изменить этот параметр настолько, чтоб вашей системе хватило (он напишет, например, 764/500, вот вам нужно больше, чем 764, себе выставляю на 1000, поэтому далее в методах решения буду использовать эту цифру). Методы:
  • Одноразовый метод. Нужно выполнить
    echo 1000 > /sys/power/tuxonice/extra_pages_allowance
    это увеличит параметр до очередной перезагрузки.
  • Изменить конфигурационный файл /etc/hibernate/suspend2.conf, добавить в него строчку
    ProcSetting extra_pages_allowance 1000
    Есть только одно НО: этот метод у меня не работает, надо еще исследовать... может конфиг переименовать в tuxonice.conf ...
  • Жесткий метод. Нужно найти в пропатченых исходниках ядра эту константу, изменить на желаемое значение, пересобрать ядро и initrd. Будьте аккуратны с этим, отмена патча после изменения будет работать криво.
Предпочтительнее, конечно, заставить работать второй метод. Если получится, допишу. Можно еще строчку из первого метода добавить в скрипт, который затем зашивается в initrd, но пока не проверял такое решение.

Обновление от 15 апреля 2009
В версии 3.0.1 по-умолчанию используется сжатие lzo. А вот модуль для работы с этим сжатием не включается в initrd. Исправляется это добавлением в файл /etc/initramfs-tools/modules строчки:
lzo
Не забудьте обновить initrd:
update-initramfs -u

Настройка fstab

Пришлось на днях вручную настраивать fstab. Хочу занести познания в блог, чтоб не забыть как это делается...

Как обычно, всё просто, если разобраться: в каждой строке представлено по одной точке монтирования. Столбцы через пробел - это:
1) Адрес устройсва, или его идентификатор, или можно еще по метке диска указывать
2) Адрес в файловой системе куда данное устройство монтируется
3) Тип файловой системы. В Дебиане для записи на NTFS нужно указывать драйвер ntfs-3g, еще его предварительно надо установить ;)
4) Опции через запятую без пробелов. Сильно зависят от типа ФС. О некоторых из них хочется поговорить подробнее.
5) Частота "дампа". х.з. зачем и кому это надо (если кто знает, просветите, пожалуйста). Ставим 0 и радуемся.
6) Поле необходимо fsck - оно определяет порядок проверки файловых систем. Для корня ставим 1, для прочих ставим 2. А чтоб ФС не проверялась, ставим 0.

Теперь подробнее об опциях. Для файловых систем без поддержки распределения прав существует 3 опции:
  • umask
  • dmask
  • fmask
Суть следующая: первый параметр задает фильтр, который накладывается на права доступа к папкам и файлам, второй и третий позволяют раздельно задавать маску прав для папок и файлов соответственно. Задаются они в 8-миричном виде. Нюанс в том, что это не права, а именно маски, т.е. это права, которые надо снять у файлов и папок. :) Например, опции "fmask=133,dmask=022" запретят запускать файлы любым пользователям, запретят запись в файлы и папки всем, кроме владельца.

В дополнение к этим опциям есть еще две:
  • uid
  • gid
Они задают соответственно владельца и группу для всех файлов. Обе опции должны задаваться в виде числовых идентификаторов, а не имен.

среда, 2 июля 2008 г.

Нет жизни в Линуксе

Линукс - это зло. Покупайте, люди, винду+хороший антивирус+тотал коммандер+МС офис и живите счастливо!! А то можно кучу времени потратить на настройку Линукса, а он, тварь, так и не хочет (/не может/ему лень) делать то, что вы хотите. Поставил на днях Дебиан. И стало так грустно. Вроде, люди серьезные его делают, а так Убунте проигрывает по всем статьям, что УЖАС просто:
1) В стабильной версии Дебиана Гном версии 2.14 (!!!!). Как можно вообще предлагать ставить этот архаизм?!! Пофигу что он стабильный! Табуретка тоже стабильная, однако на табуретке далеко не уедешь!

Фиг с ним, выкачал еще метров 600 пакетов, обновился до testing. Самое веселое, что хрен где найдешь нормальное хауту! Вроде, 21 век на дворе... Всего-то надо изменить в списке репов etch на lenny, затем обновить список пакетов и из консоли дист-апгрейд сделать! И хоть бы одна сволочь подсказала! Все, перенах, такие умные, что сидят по углам и втихую обновляются до ленни!

2) Не хочет нормально работать блютус-мышь!! Из сервисов блютуса есть только аудио! Версия блютус-апплета такая же как в Убунте 8.04, пакеты такие же установлены, а input-сервиса так и не появилось. :( Ну почему одни могут, а другие - нет?... Конечно, можно каждый раз из консоли ее цеплять через БТ-адрес, но согласитесь, это МАРАЗМ! И ведь тут даже автоконнект при старте системы не спасает... мышь же не всегда включена! Поработал с тачпада, а тут мышь понадобилась.... Включил и заработала? ХЕР! Трахай себе мозг, пока не скиснет!

3) Нельзя выключить динамики на ноутбуке. Т.е. когда наушники втыкаешь, колонки не замолкают (это и в Убунте так :((( ), но в Убунте хоть можно вручную выключить, а в Дебиане - никак. Ну что за современная ОС...

4) Не хотят ставиться дрова на видео. Те, что из репов, ужасно устарели, на них моя железяка тока ползать умеет. Летать ее учат более поздние дрова. Пытался ставить от производителя, предоставил все необходимости, они говорят давай нам ГЦЦ 4.1... У меня и 4.1 и 4.3 установлены, а они его не видят. Грустно. Так и живу на vesa. :(

5) Светячиеся кнопочки упорно работают как тачпад и упорно прокручивают списки вместо перелистывания песен... хоть убейся. Огорчает. :( В драйвере тачпада нету биндинга клавиш. В драйвере обычной мыши есть, а в драйвере тачпада - нет. Весь ман прочитал по синаптиксу - увы.

Кстати, до Дебиана пробовал ставить Генту... желание снести этого "очень быстрого" пингвина возникает примерно после 2-3 часов беспрерывной компилляции пакетов. :( Фронтенда для системы пакетов под ГТК я не увидел. До Апт и Синаптика им - как до Марса пешком!!! Хотя нет, это же быстрая система... как до Марса на велосипеде!

четверг, 29 мая 2008 г.

Восстановление раздела ext3

Решил я Debian поставить...
Для этого надо было выделить место гигов на 10. Не у Ubuntu же его отбирать - у Висты. На диске с Вистой было около 20 Гб свободно, общий объем раздела был - 45 Гб. Из Убунты через Gparted уменьшаю размер раздела до 35 Гб, долго трудилась программа и сказала, что всё хорошо. После этого решил проверить работоспособность Висты: она мне при загрузке выдала, что у нее шок и ей срочно нужно восстановиться. Разрешаю, жду несколько минут (она без объяснения деталей "восстанавливается")... Просит перезагрузки, разрешаю, проходит скандиск, загружается система. Смотрю в "Управление дисками" и у меня начинается легкая паника. Раздел ext3 на 86 Гб со всеми моими данными там отображается как "Свободный". Раздел этот расположен сразу за свободным местом, отобранным у Висты. Перезагружаюсь в Убунту и ... увы. Меня выкидывает в консоль. Пытаюсь перезагрузиться, попадаю в Иксы. Пытаюсь логиниться и получаю сообщение о том, что моя домашняя папка не создана. Вот он, крах!

Но я так просто не сдаюсь. Захожу в Убунту в режиме восстановления, создаю себе пустую домашнюю папку и перезагружаюсь в нормальном режиме. Система меня благополучно пустила. Далее недолгий поиск в Интернете дал результат: люди очень хвалят комплект утилит TestDisk и PhotoRec. Первая программа восстанавливает поврежденную структуру разделов жесткого, вторая восстанавливает данные (мне этого делать не пришлось, поэтому ничего не могу сказать о ее работе). Этот набор есть в официальных репозиториях под именем testdisk. Ставлю его, запускаю с правами рута из консоли testdisk, растягиваю окошко на нужное количество строк, запускаю ее ... молюсь, чтоб она нашла мой раздел ... и она находит! Теперь остается только записать изменения на диск и перезагрузиться. :)

Тут меня еще посетила любимая для GRUB'а ошибка 17, но об этом не буду... В другой раз.

понедельник, 26 мая 2008 г.

Пару слов о Gentoo

Всё больше утверждаюсь во мнении, что самые гуру Линукса сидят на Gentoo. Все самые лучшие описания конфигов, о том как настроить свое железо, все фокусы и танцы с бубном - всё в документации к Gentoo, в частности, на gentoo-wiki.com

Роутер Asus WL-500g Premium V2

Завелась недавно у меня такая вот железка. Asus WL-500gP V2. У него на борту: 4 LAN-порта по 100Mbit/s, 1 WAN-порт, Wi-Fi, внимание ... 2 USB-порта! Работает эта чудо-коробочка под управлением ОС Linux. Стандартную прошивку сразу меняем на волшебную "от Олега". Найти ее можно здесь, форум проживает по этому адресу. Главное - скачать прошивку именно под нужную железку. Теперь моя задача - заставить работать на нем CDMA-телефон Curitel (под Скайлинк, через переходник COM-USB), чтобы интернет с него раздавать, и принтер Canon, соответственно чтобы печатать с любого устройства в сети (сейчас в сети 2 десктопа по проводам и 2 ноутбука по воздуху). Раздача интернета от Скайлинк уже заработала (подробности позже...), а вот по поводу принтера единственный реальный совет - сменить принтер на что-нибудь от HP. Но я так легко не сдаюсь, тем более что от текущего принтера у меня впечатления гораздо лучшие, чем от предыдущего HP. Что-нибудь придумаю... Еще одна насущная задача - организовать простейший учет трафика (с какого IP, сколько пришло/ушло за последний день, неделю, месяц, всего). И выводить это добро через веб-интерфейс. Пока что все предлагаемые решения даны для системы с жестким, а мне нужно очень маленькое решение, чтобы можно было затолкать во внутреннюю память (некуда мне подключать еще и флешку, портов не слишком много).

четверг, 8 мая 2008 г.

Локальная сеть и GPRS одновременно

Проблема следующая. Есть локальная сетка (например, eth0). Подключаемся через gnome-ppp (т.е. по-сути через wvdial) к интернету (GPRS через Bluetooth). В итоге не идут пакеты через GPRS, т.е. вообще никак!

Решил так. Как я понимаю, при соединении через GPRS, пакеты не идут через соединение из-за неправильной таблицы маршрутизации протокола IP. Чтобы это исправить, при соединении добавим перенаправление пакетов по-умолчанию на подключаемый интерфейс (в моем конкретном случае это ppp0). Для этого с правами администратора добавляем в папку "/etc/ppp/ip-up.d" файл (назовем его 1routingfix) с содержимым:

#!/bin/sh
route add default dev "$PPP_IFACE"

Во избежание неприятностей, при отключении интерфейса созданное правило маршрутизации хорошо бы удалить. Для этого с правами админа добавляем папку "/etc/ppp/ip-down.d" файл (назовем так же, 1routingfix) с содержимым:

#!/bin/sh
route del default dev "$PPP_IFACE"

Можно пользоваться.

Тюнинг автоопределения кодировок в Gedit

По-умолчанию у Gedit проблема с автоопределением русской кодировки WINDOWS-1251. Вместо понятного русского текста при открытии файлов получаем "непонятный" русский текст. Решается просто. Запускаем gconf-editor, идем в apps/gedit-2/preferences/encodings, открываем список auto_detect и перемещаем кодировку WINDOWS-1251 выше, чем KOI8R. Всё. :)

пятница, 25 апреля 2008 г.

Как отключить PowerMizer

На новом ноутбуке обнаружилась одна проблема... После старта Compiz летает, а по прошествии пары минут начинает тормозить, причем серьезно так. Причиной тому, как я понял, является технология сбережения энергии PowerMizer в драйверах видеокарты Nvidia. Для решения этой проблемы я использую следующий скрипт:

while true; do
if on_ac_power; then
nvidia-settings -q all > /dev/null
fi
sleep 20;
done
Он не дает драйверу снижать частоты ядра и памяти видеокарты во время питания от сети. Если компьютер питается от батареи, придется потерпеть подтормаживания. Данный скрипт я сохранил в /usr/bin/powermizer-off , задал ему права на исполнение и добавил в автозапуск для своей сессии. Решение самое что ни на есть уродливое, но пока ничего другого не видно... если только драйверописатели из Nvidia не пошевелятся и не сделают настройку для отключения этой технологии в своей фирменной утилите.

вторник, 22 апреля 2008 г.

Как удалить GRUB и поставить XP

На старом буке встала задача полностью удалить Linux вместе с GRUB'ом и заменить его на Windows XP. Просто установка XP не удаляет GRUB, насколько я знаю. Пошарив по сети нашел здесь такое решение. Надо загрузиться с компакт-диска XP, подождать пока он загрузится. Дальше зайти в консоль восстановления (не путать с автоматическим восстановением), после входа в консоль ввести:
fixboot
и затем
fixmbr
Всё. :)

четверг, 17 апреля 2008 г.

Проба Ubuntu Hardy 8.04 Beta

На новый ноутбук Acer Aspire 5290G старый дистрибутив Ubuntu 7.10 не смог установить как мне хочется (что-то там с утилитой проверки разделов не доброе, что-ли... в описании этого бага сказано, что в новой версии всё решено), так что решил попробовать новую бета-версию. CD-болванки под рукой не было, решил опробовать способ установки в флеш, описанный здесь, причем без учета дополнений по поводу того, что некоторые папки копировать не надо. После создания установочной флешки урезал системный раздел встроенными средствами Vista (Управление дисками) на сколько она позволила и удалил второй раздел. В итоге остались следующие разделы:
  1. В начале диска около 10 Гб - данные для резервного восстановления системы, как я понимаю. Из под Vista показывается как "Конфигурация EISA".
  2. Следом за ним - система (пока 43 Гб).
  3. В самом конце диска около 3,5Гб - опять что-то для восстановления родной Vista HP, видится тоже как "Конфигурация EISA".
Далее, подсоединил флешку к USB, зашел в BIOS Setup (F2 при загрузке), указал флешку как диск загрузки №1, загрузился с нее и начал установку.
При установке диски разбил так:
  • В конце свободного диска 10Гб для монтирования в корень ("/"), файловая система ext3.
  • В конце оставшегося свободного места 3Гб для подкачки (swap).
  • На остальное место раздел для монтирования в /home, чтобы данные в случае чего были на отдельном разделе.
Где-то еще видел советы выделять отдельный раздел под /boot, видимо, для сохранения загрузчика даже в самых жестких условиях.
Установка прошла легко и непринужденно, что приятно удивило. На старом ноутбуке установить Ubuntu Gutsy 7.10 стоило мне упорного чтения интернета, чтобы хоть с диска загрузиться, 2-х часов серфинга в интерете с мобильного телефона из-за того, что GRUB после установки выдавал "Error 17", а затем еще серфинга интернета, когда с включенной сплеш-картинкой монитор отображал исключительно черный экран.
На новом же, всё прекрасно установилось... Сразу напрягло 2 вещи:
  1. Сплеш-картинка показывается не совсем корректно, она растягивается на широкий экран.
  2. Не прозвучало культового гимна при загрузке. Т.е. звук, как я думал, не работает.
Про сплеш-картинку решение я, вроде, нашел вот тут, но не знаю, поможет ли мне это. Буду пробовать.
Со звуком всё довольно забавно. Как основную громкость не прибавлял, звука не было.... А решение простое (где-то я его подглядел, только не помню где): надо открыть регулятор громкости, отредактировать список видимых регуляторов так, чтобы был виден регулятор "Surround". Далее надо просто его включить и сделать на нем по-громче. :)
Сразу же обновился, скачалось порядка 100 Мб с лишним.
Следущим шагом была установка родных драйверов от Nvidia. Скачал последнюю на тот момент бета-версию и без труда поставил (пришлось еще докачивать пакеты). Пользовался инструкциями на Linux-форуме Nvidia. Как выключить назойливый логотип при запуске есть тут.
Следующим шагом была настройка системы так, чтобы можно было отправлять ее в режим гибернации. (Ну какой ноутбук без гибернации?) Воспользовался инструкциями здесь. Отличная инструкция. Сразу всё заработало!
Еще один нюанс в новой версии - это работа bluetooth-сервиса. Вернее, функции приема файлов по bluetooth. Ситуация следующая: выключаем bluetooth (кнопочкой слева от клавиатуры, она же и индикатор), перезагружаемся. Bluetooth-апплет не показывается, как и должно быть. Далее, включаем bluetooth. Иконка bluetooth-апплета возникает в трее. Всплывающего сообщения о включенном приеме файлов не появляется. Опция о приеме файлов никакой реакции не дает: ни всплывающего сообщения, ни работающего приема файлов нет. Далее, выходим из текущего пользователя и снова логинимся. Всплывающее сообщение о приеме файлов появится при загрузке, теперь прием файлов работает. По поводу этого бага, я напишу развернутый баг-репорт в Ubuntu. Не хотелось бы, чтоб эта ошибка осталась в релизе.
Удобный регулятор громкости работает без каких-либо настроек. :)
Wi-Fi пока не пробовал, как и ИК-порт, гнезда для наушников, микрофон, камеру и т.д. Как попробую, постараюсь дополнить это сообщение.

вторник, 8 апреля 2008 г.

В продолжение темы Линукса

В качестве редактора выбрал в итоге Gedit. Только вот пока что не нашел, как в нем изменять цветовые схемы для подсветки синтаксиса. А то уж больно режет глаза подсветка скобок.

понедельник, 31 марта 2008 г.

Начинающий линуксоид

С недавних пор увлекся идеями свободного ПО и установил Ubuntu 7.10 на ноутбук и на рабочий компьютер. В качестве десктопа выбрал GNOME, как-то он мне показался дружелюбнее KDE. Остро встал вопрос по поводу качественных альтернатив программам, которыми я пользовался под Windows. В процессе поиска нашел я следующее.
Замена Media player classiс:
Однозначный выбор в пользу SMPlayer! Хотя и в нем есть некоторые недоработки, но зато читает всё и с любыми субтитрами!
Замена Winamp 2.xx:
Пользуюсь Audacious. Пришлось чуток пошаманить с настройками, но в целом очень хороший аудиоплеер. Нет проблем с кодировками тегов, сворачивается в трей (хотя тут есть некоторая оговорка, можно было сделать и по-лучше)
Замена MS Office:
Конечно же OpenOffice.org плюс плагин для открытия документов MS Office 2007.
Замена Total Commander:
Достойных альтернатив нет. По функционалу на 4 с минусом тянет Krusader. Под GNOME вообще ничего стОящего нет!!! Gnome commander и Tux Commander - детские игрушки работать в которых невозможно.
Замена Notepad++:
Действительно хорошего аналога не нашел. Одни редакторы не понимают кодировку cp1251, в других бесят всякие глупые ошибки и недоработки. Люди, в чем же все программируют и правят код под Линуксом??? Как можно жить без качественного текстового редактора???