12/29/2008

brainfuck: X.org и HAL

После обновления X.org сервера до версии 1.5.3, и его перезапуска обнаружилось, что клавиатура и мышка напрочь отказываются работать. Причем зависания были такими, что систему привести в чувства можно было лишь при помощи Magic Sysrq клавиш.

Все оказалось очень просто, разработчики X.org'a решили отдать всю работу с устройствами ввода, на откуп подсистеме hal (Hardware Abstraction Layer).

Теперь для того, чтобы заработали иксы, нужно демону hal сказать, как управляться с устройствами. Для этого нужно создать файл /etc/hal/fdi/policy/10-x11-input.fdi
с вот таким вот содержанием:

<?;xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.mouse">
<merge key="input.x11_driver" type="string">evdev</merge>
</match>

<match key="info.capabilities" contains="input.keyboard">
<!--merge key="input.x11_driver" type="string">evdev</merge> -->
<merge key="input.xkb.model" type="string">evdev</merge>
<merge key="input.xkb.rules" type="string">xorg</merge>
<merge key="input.xkb.layout" type="string">us,ru</merge>
<merge key="input.xkb.variant" type="string">,winkeys</merge>
<merge key="input.xkb.options" type="strlist">grp:toggle,grp_led:scroll</merge>
</match>
</device>
</deviceinfo>



Все эелементы этого XML файда соттветствуют секциям InputDevice для мышки и клавиатуры из конфигурационного файла X.org. Следовательно, эти секции из конфиг файла иксов можно удалить.

По умолчанию иксы все равно пытаются получать информацию об устройствах ввода из своего конфиг файла, и тогда начинается просто кошмар. У меня в системе курсор начинает метаться по экрану, и клавиатура перестает работать.Чтобы это вылечить, нужно указать иксам получать устройства от hal. Делается это с помощью добавления в конфиг файл X11 (/etc/X11/xorg.conf) дополнительной секции:

Section "ServerFlags"
Option "AutoAddDevices" "False"
EndSection

Однако, у меня так и не получилось заставить иксы переключать раскладку клавиатуры, на русский, хотя правила для этого определены.

Вот костыль, который я применяю, для решения этой проблемы:
после рестарта иксов, установить правило для переключения раскладки через xkb:
setxkbmap -layout "us,ru(winkeys)" -option "grp:switch,grp:toggle,grp_led:scroll"
Ввиду того, что комп я перезагружаю очень и очень редко, то это мне это не очень сильно мешает.

И все таки, проблема так и остается не решенной. Если у кого-то получилось ее решить, отпишите пожалуйста.

P.S. Разработчикам, конечно видней, но вот зачем было переходить с использования удобного и понятного конфигурационного файла, на использования не очень внятного xml, мне совершенно непонятно. Ведь удобство пользователя должно цениться превыше всего,
а мучиться пол дня с этим HAL как то совсем не хочется.

12/26/2008

Удаленное редактирование файлов.

С помощью Emacs можно редактировать файлы не только на локальном компьютере, но и на удаленном компьютере. Вот краткий список поддерживаемых протоколов:
smb, rsh, ssh, fttp, sftp.

Для редактирования в конфиг емакса нужно добавить:
(require 'tramp)

В общем случае чтобы открыть файл или каталог на удаленной машине необходимо выполнить команду открытия файла:
C-x C-f

и в качестве пути прописать:
/method:username@remote_host:/remote/path

где, method - это тип протокола, может быть ssh, ftp, rsh

Например для того чтобы для отредактировать файл через ssh от имени пользователя root нужно написать путь так:

/ssh:root@192.168.0.2:/etc/X11/xorg.conf

Более подробно об удаленном редактировании файлов можно почитать на официальной страничке tramp'a.
http://www.gnu.org/software/tramp/

12/25/2008

Несколько полезных фишек в Emacs.

Обычно в исходном коде, вашем или чужом, частенько встречаются комментарии, типа:
// TODO: сделать это.
// FIXME: переписать этот кусочек кода.
Для того, чтобы emacs выделял такие ключевые слова в комментариях, необходимо ему указать это в конфиге:

(add-hook 'c-mode-common-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\<\\(FIXME\\|TODO\\|BUG\\):" 1 font-lock-warning-face t)))))

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

(defun insert-second-hook ()
(interactive)
(insert "()")
(goto-char (- (point) 1)))
(global-set-key (kbd "\(") 'insert-second-hook)

12/07/2008

Удобство отладки.

Не секрет, что очень много времени программист использует для отладки своих программ.
В Линукс, для отладки приложений пользовательского уровня используется интерактивный отладчик GDB. По умолчанию, GDB предполагает использование интерфейса командной строки, что для некоторых представляется очень и очень неудобным, и вообще...
И вообще такие люди говорят:" Вот бы нам такой отладчик. как в Visual Studio!".
На самом деле для GDB очень давно существует подобный интерфейс.
И, как вы уже наверное догадались, для этого нам понадобится "текстовый редактор" Emacs.
Итак начинаем отладку.
Запустим Emacs в каталоге с программой, которую собираетесь отлаживать. Так же было бы неплохо, чтобы в этом же каталоге лежали еще и исходные тексты.
Для активизации режима отладки, нужно в минибуфере набрать gdb.
На что вы получите примерно следующее приглашение:
Run gdb (like this): gdb --annotate=3 main.
В большинстве случаев этого достаточно.
Жмем Enter, и после этого опять же в минибуфере, активируем много-оконный режим:
M-x gdb-many-windows
после активации получится примерно следующее:

В центре исходник вашей программы.Слева вверху - консоль GDB. Справа, рядом с ней список отображающий значения регистров или переменных. Внизу слева - Стек. Справа - список точек останова программы.
Итак, поехали. Для запуска программы пожно либо написать в консоли gdb start, либо воспользоваться соответствуюим пунктом из меню GUD.
Точки останова можно ставить как с помощью консоли, так и с помощью мыши, просто кликнув на серой полоске (не знаю как она называется по научному) около понравившейся строки:
Все понятно и наглядно представлено. Более того, если устновить курсор на какую-нибудь переменную, и нажать на кнопку P на панели инструментов, то распечатается значение этой переменной. Точно таким же образом можно наблюдать за состоянием переменной, установив Watchpoint. С помощью той же панели инструментов можно побродить вверх и вниз по стеку. Можно с помощью удобных кнопочек осуществлять пошаговую отладку.
В общем весьма удобно и по функционалу ничем не хуже, чем Visual Studio.
З.Ы. Кому интересно, предлагайте, допишу что нибудь еще.

12/06/2008

Удобный просмотр мануалов.

Любой пользователь линукс знает, что без мануало эту систему использовать тяжеловато, а пользоваться командной строкой практически невозможно.
Чтобы посмотреть мануал (руководство) по какой-нибудь программе, необходимо использовать команду man.
Например команда man ls, отобразит всю необходимую информацию о команде ls.
Бывает так, что не всегда известно, по какой команде или какой функции нужен мануал, и часто приходится использовать поиск по коллекции документации:
команда man -k keyword будет искать keyword в текстах мануалов.
Но пост не об этом.=) Пост о среде редактирования Emacs.
Да, да Emacs'ом весьма удобно просматривать маны, для этого существует два режима:
собственно man-mode и woman
Наиболее удобным лично для меня является woman.
Если в исходном тексте программы у вас курсор установлен на какой либо функции, то
набрав M-x woman можно посмотреть ман по этой функции, причем если манов несколько, то Emacs предложит выбрать наиболее подходящий.
Руководства прекрасно отображаются как на русском, так и на английском языке.
Работает навигация не только по ссылкам, в разделе "Смотрите также", но и по любым подсвеченным словам, если для них имеется ман страницы.
Если вы не знаете какую конкретно страницу нужно посмотреть, можно воспользоваться авто дополнением. Нажатие клавиши TAB выведет полный список всех доступных страниц.
У меня все.
P.S. Вот так это все выглядит: