среда, 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

На этом всё.