4 мая 2009 г.

Принтер Samsung ML-2015

С незапамятных времен у меня был принтер, название которого вы видите выше. Так получилось, что мне нужно использовать его под Linux. Всё было хорошо, в ранних версиях Ubuntu (< 9.04), он у меня подхватывался системой CUPS как говориться "искоропки". Но вот, незадача, как-то пришлось мне обновиться (во всяком случае я не так часто печатал, чтобы обратить внимание на то, как вёл себя принтер в 8.10, здесь я говорю именно про сейчас) до Jaunty релиза и он у меня перестал работать. Точнее когда отправляешь задание на печать, я получаю следующее: документ тормозится на обработке и мне сообщается, что принтер не подключён (кстати сказать на моём нетбуке под той же версией Ubuntu принтер работает):

Состояние печати

Сравнив настройки принтера в моих дистрибутивах, я обнаружил интересную разницу, которую сам добавить никак не мог (выделено на рисунке):

Свойства принтера

Стерев разницу мой принтер сразу же заработал. Кстати добавив к с вышеизложенному. В /var/log/syslog я увидел следующее:

May 4 19:29:05 vest-desktop hal_lpadmin: Running hal_lpadmin
May 4 19:29:06 vest-desktop hal_lpadmin: hal_lpadmin triggered by low-level USB device
May 4 19:29:06 vest-desktop hal_lpadmin: Getting device ID from the usblp HAL entry ...
May 4 19:29:06 vest-desktop hal_lpadmin: Device ID for /dev/usb/lp0: MFG:Samsung;MDL:ML-2010;DES:;CMD:GDI;
May 4 19:29:06 vest-desktop hal_lpadmin: Written device ID into HAL database entry: MFG:Samsung;MDL:ML-2010;DES:;CMD:GDI;
May 4 19:29:06 vest-desktop hal_lpadmin: add
May 4 19:29:06 vest-desktop hal_lpadmin: Printer reported by HAL: Samsung ML-2010 3D66BKCPA21817X.
May 4 19:29:06 vest-desktop hal_lpadmin: Found configured printer: ML-2010; URI: usb://Samsung/ML-2010?serial=3D66BKCPA21817X.
May 4 19:29:06 vest-desktop hal_lpadmin: Not adding printer: ML-2010 already exists
May 4 19:29:06 vest-desktop hal_lpadmin: Re-enabling printer ML-2010

То есть принтер-то найден верно, хоть и модель немного другая. И серийный номер совпал, но вот это и являлось причиной. Что ж... если такое повторится дальше, будем продолжать исследование.

4 мар. 2009 г.

Gnome Internationalization или интернационализация средствами Glib и intltool

Теперь пришло время, добавить в наш шаблон «Интернационализацию». Основное отличие от «Локализации» заключается в том, что приложение, поддерживающее интернационализацию физически представляет собой один исполняемый файл (с сопутствующими ему файлами с данными), которое равно запускается в операционной системе и отображает локализованную информацию в зависимости от настроек ОС. Локализованное приложение отображает только тот язык, для которого оно было создано. Так, например, в Windows часто вы встречали фразы «Скачать русскую версию». Так вот, это были локализованные приложения.

Наше приложение пока отображает только английскую локаль. Попробуем встроить в него интернационализацию управляемую библиотекой GLib. Для начала нам понадобятся пара пакетов: intltool и gettext. Они помогут нам, избавив от некоторой рутинной работы.

Для начала подправим наш исходный код, и доведём его до следующего состояния (жирным я отмечу то, что дописал непосредственно в файл):

Здесь и далее хочу сказать, что в исходных кодах можно использовать как TAB символы, так и пробелы, в шаблонах configure.ac также, НО в Makefile.am только TAB.

#include <config.h>
#include <stdio.h>
#include <glib/gi18n.h> -- поддержка макросов gettext

int main(int argc, char** argv)
{
    setlocale (LC_ALL, ""); -- устанавливаем текущую локаль, информацию берём с переменных окружения (это можно опустить в GUI программировании)
    bindtextdomain (GETTEXT_PACKAGE, QUOD_LOCALEDIR); -- устанавливаем каталог, где лежат файлы для разных языков
    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -- устанавливаем кодировку для вывода символов (благо Linux легко поддерживает Unicode)
    textdomain (GETTEXT_PACKAGE); -- установка домена по умолчанию

    printf(_("Hello World!\n")); -- отмечаем текст, который надо перевести с помощью макроса _()

    return 0;
}

Почитав повнимательнее, я выяснил, что оказывается сам GLib локализован с помощью механизма gettext, поэтому он принят стандартом де-факто. Существуют разные макросы, выделяющие наш текст, требующий интернационализации. Например, для строк, к которым не может быть применён вызов gettext (например глобальные переменные переменные принимающие строки в массивах), то к ним применяется макрос N_(). Дополнительную информацию можете поискать в самом Glib'e, либо Internationalising GNOME applications, ещё как вариант скачать intltool, и там прочесть HOW-TO. Вообще, информации много, но вот собранной воедино и с нуля — мало.

Следующим этапом идёт создание каталога po, где будут находиться наши переводы. Заодно, подправим наши шаблоны:

~/gnome-quod$ mkdir po

configure.ac
# ======================== initialization ===============================
AC_INIT([Gnome Quod],
        [0.4.0],
        [vest@mail.com],
        [gnome-quod])

AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([-Wall -Werror dist-bzip2])
AC_DEFINE([NDEBUG], [], [Disable debugging information])

# ==================== basic compiler settings ==========================
AC_PROG_CC
AM_PROG_CC_C_O
AC_HEADER_STDC

# ==================== internationalization i18n ========================
IT_PROG_INTLTOOL([0.40.4]) -- требование библиотеки intltool не ниже 0.40.4
GETTEXT_PACKAGE=gnome-quod -- название пакета выносим в отдельную переменную
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], -- которую делаем в качестве
                   [The domain to use with gettext]) -- директивы для препроцессора (см. config.h)
AM_GLIB_GNU_GETTEXT -- не знаю до конца, но скорей всего включает поддержку GETTEXT у Glib (или через)
AC_SUBST(GETTEXT_PACKAGE) -- добавляет опции в компилятор для включения gettext

QUOD_LOCALEDIR=[${datadir}/locale] --указываем, где будут находиться локализации
AC_SUBST(QUOD_LOCALEDIR) -- запоминаем этот путь и добавляем его в опции компилятора

PKG_CHECK_MODULES([GLIB],[glib-2.0 >= 2.18]) -- проверяем, что у нас стоит Glib нужной версии

# ==================== generate files ===================================
AC_CONFIG_FILES([
  Makefile
  src/Makefile
  po/Makefile.in -- выводим ещё один шаблон Makefile'a в новом каталоге po
])
AC_OUTPUT

В HOW-TO, я прочитал следующее, что вместо AM_GLIB_GNU_GETTEXT можно использовать AM_GNU_GETTEXT([external]), а сам autoreconf предложил мне воспользоваться AM_GNU_GETTEXT_VERSION. С одним предупреждением у меня получился следующий вариант:

...
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
                   [The domain to use with gettext])
AM_GNU_GETTEXT_VERSION
...

$ autoreconf
...
autoreconf: configure.ac: AM_GNU_GETTEXT_VERSION is used, but not AM_GNU_GETTEXT

с другим вариантом:

autoreconf: configure.ac: AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION
configure.ac:23: required file `./config.guess' not found
configure.ac:23: `automake --add-missing' can install `config.guess'
configure.ac:23: required file `./config.rpath' not found
configure.ac:23: required file `./config.sub' not found
configure.ac:23: `automake --add-missing' can install `config.sub'
configure.ac:23: required file `./ABOUT-NLS' not found

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

// Makefile.am
SUBDIRS = src po -- добавляем лишний каталог

@INTLTOOL_DESKTOP_RULE@ -- этот макрос позволяет intltool определить, где какие файлы требуют перевода (в частности, в корневой директории может находиться будущий ярлык программы)

INTLTOOL_FILES = \
        intltool-extract.in \
        intltool-merge.in \
        intltool-update.in

EXTRA_DIST = $(INTLTOOL_FILES)

DISTCLEANFILES = \
        intltool-extract \
        intltool-merge \
        intltool-update


# здесь я говорю, что вышеследующие файлы (шаблоны) будут распространятся в дистрибутиве без обработки, в случае очистки сгенерированные с шаблонов файлы следует стирать

# эти строки я встречал не всегда. Они отвечают за очистку кеша, создаваемого intltool
clean-local:
        rm -f po/.intltool-merge-cache


// src/Makefile.am
quod_CFLAGS = \ -- задаём флаги для конкретного исполняемого файла (quod)
        -DQUOD_LOCALEDIR=\"${QUOD_LOCALEDIR}\" \ -- где лежат наши локали
        $(GLIB_CFLAGS) \ -- флаги для компиляции с Glib
        -I$(top_srcdir) -- путь, с заголовками уровнем выше (обычно для config.h)

quod_LDADD = \ -- тоже самое, но для линковщика
        $(INTLLIBS) \ -- библиотеки intltool
        $(GLIB_LIBS) -- библиотеки Glib

bin_PROGRAMS = quod
quod_SOURCES = main.c

В предыдущем посте я описывал, почему я использовал макрос AM_PROG_CC_C_O. Именно благодаря ему, я указал для конкретного бинарного файла нужные флаги для компилятора. Теперь следует дописать небольшие файлы в po каталог, и затем приступить к запуску скриптов. Процедура создания файлов немного автоматизирована:

~/gnome-quod$ intltoolize -- этот скрипт создаст файл po/Makefile.in.in

// вручную создаём po/LINGUAS
# please keep this list sorted alphabetically
#
ru -- по алфавиту указываем какие языки у нас будут присутствовать

// вручную создаём po/POTFILES.in
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
src/main.c -- здесь описываем все файлы, где нужен перевод (даже файлы с ярлыками для рабочего стола)

// Проверяем:
~/gnome-quod/po$ ls -l
итого 8
-rwxr-xr-x 1 vest vest 51 2008-12-10 10:50 LINGUAS
lrwxrwxrwx 1 vest vest 34 2009-03-04 18:52 Makefile.in.in -> /usr/share/intltool/Makefile.in.in
-rwxr-xr-x 1 vest vest 68 2009-03-04 19:04 POTFILES.in

На самом деле видите, что Makefile.in.in это всего-навсего ссылка. Далее попытаемся создать pot-файл, содержащий строки, нуждающиеся в переводе:

~/gnome-quod/po$ intltool-update --pot -- выполнять это надо внутри каталога po

~/gnome-quod/po$ cat gnome-quod.pot
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-03-04 19:08+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../src/main.c:13
#, c-format
msgid "Hello World!\n"
msgstr ""

Вот так выглядит шаблон, созданный скриптом. Сам pot-файл не нужен, так как генерируется автоматически. То, что требуется от вас, это сделать копию файла с именем того языка, на который вы будете создавать свою локализацию (в нашем случае ru.po). Сам файл хорошо документирован, вам следует обратить внимание на то, что CHARSET следует исправить в UTF-8. Есть другой способ создать шаблон нужной локализации средствами gettext (но про UTF-8 строки следует не забывать. Помните наши изменения в исходном файле main.c):

~/gnome-quod/po$ msginit --locale=ru
Новый каталог сообщений должен содержать ваш адрес электронной почты,
чтобы пользователи могли присылать свои замечания по поводу ваших
передов, а также чтобы сопроводители программ могли связаться с вами в
том случае, если возникнут непредвиденные технические проблемы.

Which is your email address?
1 Vest@home.tula.net
...
9 vest@vest-desktop

Please choose the number, or enter your email address.
9 -- я ввёл это чисто (просто так, на самом деле введите либо номер либо свой реальный адрес)
A translation team for your language (ru) does not exist yet.
If you want to create a new translation team for ru, please visit
 http://www.iro.umontreal.ca/contrib/po/HTML/teams.html
 http://www.iro.umontreal.ca/contrib/po/HTML/leaders.html
 http://www.iro.umontreal.ca/contrib/po/HTML/index.html

Создано ru.po. -- вот это самое главное.

~/gnome-quod/po$ cat ru.po
# Russian translations for Gnome Quod package.
# Copyright (C) 2009 THE Gnome Quod'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Gnome Quod package.
# Vladislav Volodin <vest@vest-desktop>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: Gnome Quod 0.4.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-03-04 19:08+0300\n"
"PO-Revision-Date: 2009-03-04 19:18+0300\n"
"Last-Translator: Vladislav Volodin <vest@vest-desktop>\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n" -- как видите, это надо поменять на UTF-8
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: ../src/main.c:13
#, c-format
msgid "Hello World!\n"
msgstr ""

Далее переводим строку следующим образом. Оставляем оригинал вверху, нужный перевод внизу, и всё сохраняем в формате UTF-8:

...
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: ../src/main.c:13
#, c-format
msgid "Hello World!\n"
msgstr "Привет Мир!\n"

И пробуем реконфигурировать наш проект, собирать, и устанавливать. Остаётся проверить:

vest@vest-desktop:~/gnome-quod$ autoreconf && ./configure && make
...
checking whether NLS is requested... yes
checking for intltool >= 0.40.4... 0.40.5 found
checking for intltool-update... /usr/bin/intltool-update
checking for intltool-merge... /usr/bin/intltool-merge
checking for intltool-extract... /usr/bin/intltool-extract
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
...
checking for GLIB... yes
...
# INTLTOOL_MAKEFILE
make all-recursive
make[1]: Вход в каталог `/home/vest/gnome-quod'
Making all in src
make[2]: Вход в каталог `/home/vest/gnome-quod/src'
gcc -DHAVE_CONFIG_H -I. -I.. -DQUOD_LOCALEDIR=\"/usr/local/share/locale\" -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I.. -g -O2 -MT quod-main.o -MD -MP -MF .deps/quod-main.Tpo -c -o quod-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/quod-main.Tpo .deps/quod-main.Po
gcc -DQUOD_LOCALEDIR=\"/usr/local/share/locale\" -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I.. -g -O2 -o quod quod-main.o -lglib-2.0
...
~/gnome-quod$ quod
Привет Мир!
$

Теперь можно вас поздравить с тем, что у вас «интернационализовано» ваше приложение. Далее попробуйте уже сами создать пакет с помощью make dist, и просмотреть какие файлы распространяются с пакетом, а какие нет.

И ещё, не забывайте каждый раз обновлять файл POTFILES.in, когда добавляете новые исходные файлы в src каталог. И затем выполняйте intltool-update ru. Она также обновляет файлы с переводом, если у вас добавляются новые строки, указывая вам на число переведённых или не переведённых строк. Смотрите, что будет если подправить исходный код следующим образом:

// main.c
printf(_("Hello World!!\n")); -- лишний восклицательный знак

:~/gnome-quod$ cd po
~/gnome-quod/po$ intltool-update ru
... завершено.
0 переведенных сообщений, 1 неточный перевод.
~/gnome-quod/po$ cat ru.po

#: ../src/main.c:13
#, fuzzy, c-format -- здесь он подправил, что наше исходной сообщение теперь другое. После исправления это слово можно стереть
msgid "Hello World!!\n" -- ведь появился восклицательный знак
msgstr "Привет Мир!!\n" -- добавим его здесь

Вот собственно и всё, жду Ваших комментариев и дополнений.

Web-камера Creative Vista IM (VF0420)

Небольшое предисловие, мне понадобилась камера, которая работала бы в Linux'е (а именно у меня в Ubuntu 8.10), и упор делался на проприетарный Skype. И я купил камеру, модель Creative Vista IM (VF0420). Определяется эта камера следующим образом:

$ lsusb
Bus 001 Device 002: ID 041e:4064 Creative Technology, Ltd

Могу сказать, что с нуля, камера на Desktop-машине работала на приложении Cheese притормаживая, VLC ничего не открывал. Другие я не пробовал. Сам Skype определяет камеру, но к сожалению во время тестов и вещания вместо изображения рисует шумы в виде зелёных полос и точек.

Говорят, что модуль gspca плохо поддерживает камеру. Готовое решение я сперва отыскал здесь, но потом (когда уже всё заработало по первому варианту) обнаружил здесь (на русском языке). Потому, чтобы не дублироваться решил привести ссылки на эти источники.

Вот, что хочу добавить: после установки модулей у меня перестал работать cheese, плохо заработала camorama (чёрно-белые 4-5 изображений, сжатых в один ряд по-горизонтали). Можно запустить gstreamer-properties и попробовать принудительно выбрать устройство видеозахвата (на v4l работало, на v4l2 — нет)

Ещё, что не указано в источниках, проверьте принадлежит ли ваш пользователь группе video. Название группы можно уточнить, просмотрев аттрибуты на файл /dev/video0. Добавив пользователя в группу и перелогинившись в X у меня заработал Skype (2.0.0.72).

Удачи вам с вашими камерами. Даже купив камеру, которая создала мне по умолчанию видео устройство, мне всё равно пришлось выполнить вышеуказанное.

27 февр. 2009 г.

Autotools с нуля

На этот раз, я постараюсь объяснить, возможно, знакомую всем по предыдущим постам тему об использовании Autotools. Мне пришлось этот путь пройти заново, и немного по-другому, для того, чтобы мой проект выглядел так, как того требуют Gnome Games. Так получилось, что я написал им письмо о том, что у меня есть игра Gnome Quod (для Ubuntu вы сможете использовать мой автоматический репозиторий на PPA), и я бы хотел привести её к виду, соответствующему Gnome Games. Автор сборника игр, выделил мне ряд требований, решив которые, я смогу попробовать заново попросить его о включении моей игры в их пакет. Ну да ладно, это будет не скоро, и я сомневаюсь в этом, но давайте приступим к подготовке нового пакета, прежней игры.

Здесь я буду описывать конкретные вещи, что я делал, и по-возможности, что получал. Для подробной информации по тому или иному макросу, советую вам поискать в мануалах.

Для начала создадим папку с названием gnome-quod. Так будет называться мой каталог, где будут находиться все исходники, весь пакет, откуда потом, мы будем создавать пакеты. Затем, создаём файл-шаблон configure.ac. Его будет просматривать скрипт Autotools с названием autoreconf. Этот скрипт занимает одно из главных положений, в нашем проекте. Первоначальное содержание configure.ac будет следующим (комментарии только для осмысления.):

# ======================== initialization ===============================
Здесь будет описываться инициализация проекта: имя, начальный каталог и пр.

# ==================== basic compiler settings ==========================
Основные опции компилятора (например, используемый язык)

# ==================== checks for libraries =============================
Проверка существования библиотек

# ==================== checks for header files ==========================
Проверка существования заголовочных файлов (если нужно)

# ===== checks for typedefs, structures and compiler characteristics ====
Проверка типов, структур, особенностей компилятора

# ==================== checks for library functions =====================
Проверка функций библиотек. Полезно, когда версия библиотеки мало ли соответствует требуемой, но в ней нет функции, или, например, вы не уточняете версию библиотеки, и потому в случае отсутствия функции, можете реализовать её сами.

# ==================== generate files ===================================
Здесь создаются файлы, которые потом используются make'ом

AC_OUTPUT -- эта строка даёт всему начало

Порядок, который я описал, важен, но не существенно. Но главное не путать конец с началом. А вообще лучше придерживаться этого шаблона. Я встречал его во многих исходных файлах. Так что, будет у вас как у всех , если конечно, вам это не мешает. Теперь давайте добавим, в отдельные группы следующие макросы. Они должны описывать наш проект так, чтобы он работал.

# ======================== initialization ===============================
AC_INIT([Gnome Quod],
        [0.4.0],
        [vest@mail.com],
        [gnome-quod]) -- длинное имя, версия пакета, адрес куда стоит писать bug-репорты, краткое имя пакета

AC_CONFIG_SRCDIR([src/main.c]) -- проверка безопасности, что по этому адресу находится заведомо известный исходный файл
AC_CONFIG_HEADERS([config.h]) -- здесь создаётся заголовочный конфигурационный файл, который может быть использован в исходных файлах (в частности, там определена директива NDEBUG, см. ниже)
AM_INIT_AUTOMAKE([-Wall -Werror dist-bzip2]) -- включаем компилятору все предостережения и ошибки, чтобы подробно видеть всё на экране, о процессе компилции, дистрибутив распространяется в виде упакованного файла bz2
AC_DEFINE([NDEBUG], [], [Disable debugging information]) -- эта строка нужна лично мне, так как я использую assert функции, и если что, мне их нужно отключать

# ==================== basic compiler settings ==========================
AC_PROG_CC -- используем только Си компилятор
AM_PROG_CC_C_O -- нужно использовать вместо AC_PROG_CC_C_O, позволяет использовать флаги для каждой цели в Makefile
AC_HEADER_STDC -- проверка стандартных заголовочных файлов "stdlib.h", "stdarg.h", "string.h", "float.h". Это уже не нужно, так как они всегда есть, можно не проверять.

# ==================== generate files ===================================
AC_CONFIG_FILES([
  Makefile
  src/Makefile
]) -- происходит вызов AC_OUTPUT для каждого файла.
AC_OUTPUT -- создаёт много файлов, которые нам нужны

Далее создаём файлы-шаблоны Makefile.am и src/Makefile.am:

# Makefile.am
SUBDIRS = src

# src/Makefile.am
bin_PROGRAMS = quod
quod_SOURCES = main.c

Конечно же нам нужно создать main.c, с неким Hello World'ом.

#include <config.h>
#include <stdio.h>

int main(int argc, char** argv)
{
    printf("Hello World!\n");

    return 0;
}

Вот собственно и всё, на данный момент, далее выполняем следующие команды:

~/gnome-quod$ autoreconf --install
/usr/share/aclocal/lf_x11.m4:33: warning: underquoted definition of LF_PATH_XLIB
/usr/share/aclocal/lf_x11.m4:33: run info '(automake)Extending aclocal'
/usr/share/aclocal/lf_x11.m4:33: or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
configure.ac:14: installing `./compile'
configure.ac:9: installing `./install-sh'
configure.ac:9: installing `./missing'
src/Makefile.am: installing `./depcomp'
Makefile.am: installing `./INSTALL'
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
Makefile.am: installing `./COPYING'
autoreconf: automake failed with exit status: 1

Как вы видите, получили ошибки. Связаны они с тем, что наш проект полностью соответствует GNU стандарту, согласно configure.ac, но на деле таковым не является. Требуется создать самому следующие файлы, и желательно заполнить их. Вы можете посмотреть пример заполнения в любом серьёзном проекте, либо обратившись к Learning the GNU development tools. Создадим их и попробуем ещё раз (я ещё создал файл THANKS, название говорит само за себя):

$ ls
AUTHORS ChangeLog configure.ac Makefile.am NEWS README THANKS src

$ autoreconf --install
/usr/share/aclocal/lf_x11.m4:33: warning: underquoted definition of LF_PATH_XLIB
/usr/share/aclocal/lf_x11.m4:33: run info '(automake)Extending aclocal'
/usr/share/aclocal/lf_x11.m4:33: or see http://sources.redhat.com/automake/automake.html#Extending-aclocal
configure.ac:14: installing `./compile'
configure.ac:9: installing `./install-sh'
configure.ac:9: installing `./missing'
src/Makefile.am: installing `./depcomp'
Makefile.am: installing `./INSTALL'
Makefile.am: installing `./COPYING'

Каждый раз, когда меняется один из шаблонов, следует вызывать autoreconf без параметров. Иногда вы встретите в пакетах файл autogen.sh, по идеи он похож с предыдущим. Не вдаваясь в подробности этапов конфигурирования, здесь осуществляется поочерёдный вызов некоторых скриптов, входящих в состав Autotools.

Можно избежать проблем с тем, что не существует файлов, для этого стоит "сказать", что мы не соответствуем стандарту, для этого следует изменить макрос AM_INIT_AUTOMAKE следующим образом:

...
AM_INIT_AUTOMAKE([-Wall -Werror dist-bzip2 foreign])
...

Теперь поочерёдно выполним следующие команды, и взглянем на результат:

$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
....
checking for ANSI C header files... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands

$ make
make all-recursive
make[1]: Вход в каталог `/home/vest/gnome-quod'
Making all in src
make[2]: Вход в каталог `/home/vest/gnome-quod/src'
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
mv -f .deps/main.Tpo .deps/main.Po
gcc -g -O2 -o quod main.o
make[2]: Выход из каталога `/home/vest/gnome-quod/src'
make[2]: Вход в каталог `/home/vest/gnome-quod'
make[2]: Выход из каталога `/home/vest/gnome-quod'
make[1]: Выход из каталога `/home/vest/gnome-quod'

$ src/quod
Hello World!

Здесь я решил не урезать вывод, чтобы вы могли заметить. Тут поэтапно проходит конфигурирование, компиляция программы и последующий её запуск. Если вам нужен распространяемый пакет, выполните следующую команду make dist, в текущем каталоге вы получите следующие два файла:

$ ls -l gnome-quod-*
-rw-r--r-- 1 vest vest 73173 2009-02-27 01:01 gnome-quod-0.4.0.tar.bz2
-rw-r--r-- 1 vest vest 87568 2009-02-27 01:01 gnome-quod-0.4.0.tar.gz

Итак, на сегодня это пока всё. Вся вышеперечисленная информация, чуть более чем подробно объясняется в этой презентации (http://www.lrde.epita.fr/~adl/autotools.html). Советую с ней ознакомиться.

25 янв. 2009 г.

Игра на КДЕ. День последний.

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

Короче... я стёр KDE и поставил себе Чистый Gnome.

Как высказались мои друзья, после KDE я потерял всякую мораль, стал замкнутым и отчуждённым. Глупо, но такое ощущение, что KDE может повлиять на человека не в лучшую сторону... не в лучшую.

Вы спросите буду ли я играть на KDE вновь? — Быть может, быть может. Я не хочу обещать, может быть это будет традицией, неделя Gnome, неделя KDE. Но если честно, KDE меня нервирует.

Я сожалею о том, что играл на KDE...

23 янв. 2009 г.

Игра на КДЕ. День пятый.

Вот идёт ещё один день моего смелого пребывания в KDE. Что у меня изменилось за последнее время? Я начинаю привыкать к проблемам со звуком и постоянно вылетающими теперь Konqueror и Firefox. Вчера Firefox удивил меня тем, что когда я заходил на какой-то из сайтов он тихо закрылся. Причем эту ошибку отследить было нельзя, потому я запустил его в консольном режиме, и вот что я получил:

$ firefox
QPixmap: Invalid pixmap parameters

(firefox:10500): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed <-- многократное появление таких строчек

The program 'firefox' received an X Window System error.
This probably reflects a bug in the program.
The error was 'RenderBadPicture (invalid Picture parameter)'.
(Details: serial 3472708 error_code 169 request_code 155 minor_code 7)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb80347c7]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_lock+0x2e) [0xb803496e]
#2 /usr/lib/libX11.so.6 [0xb6b2b619]
#3 /usr/lib/libXrender.so.1(XRenderFreePicture+0x41) [0xb6bdcf41]
#4 /usr/lib/libQtGui.so.4 [0xb41d86bf]
... многократное появление похожих строчек связанных с этой библиотекой]
#17 /usr/lib/libQtGui.so.4 [0xb41d2d5a]
#18 /lib/tls/i686/cmov/libc.so.6(exit+0x89) [0xb7dc2d69]
#19 /usr/lib/libgdk-x11-2.0.so.0 [0xb66e26b7]
Segmentation fault

Меня насторожила строка, сразу же после выполнения команды. Похоже имеется какая-то проблема с QPixmap. И это мне не понравилось. Потому я решил обновиться на KDE 4.2-rc-1. Воспользовавшись ссылкой, так "заботливо" предоставленной моими друзьями, которые они аргументировали следующим образом:

Один: http://www.kubuntu.org/news/kde-4.2-rc1
Вест
сделайте этот смертельный номер
один хрен потом вам кеды сносить, а то и всю ось переставлять :)
Другой: Да, поставьте бету, ведь вам уже всё равно :)

Заодно и помогли ссылкой. Аргументы были весомые, я не мог ничего сказать плохого в сторону KDE и решил обновиться. Скачивать пришлось около 250 мб пакетов, что собственно я и сделал.

Надо добавить, что обновление может не пройти с первого раза, по разным причинам, возможно надо было делать это при закрытом KDE. Но обновиться можно, нужно быть настойчивее. Одна из причин может быть такой:

E: /var/cache/apt/archives/kdebase-workspace-data_4%3a4.1.96-0ubuntu4~intrepid1~ppa1_all.deb: попытка перезаписать /usr/share/doc/kde4/HTML/en/kcontrol/windowspecific/index.cache.bz2, который уже имеется в пакете kde-window-manager

Итак, обновление прошло почти с первого раза... После гламурного, красивого и приятного глазу моего KDE 4.1.4 я получил почти не изменившееся окно:

Что сразу хочется отметить: изменилось меню в красивую сторону, иконки раньше имеющие баг на протяжении года жизни KDE в System Tray'e, связаный с некорректным отображением прозрачности в виде чёрного квадрата вокруг них, сейчас исправились. Почему-то пришла идея, что на чёрном чёрный квадрат не видно, и потому решили в Tray'е "вырезать" прямоугольник и закрасить его чёрным цветом, что по-моему сделано почти правильно. Ведь это же KDE! Меню тоже похорошело, приобрело красивую рамочку. Кстати сказать о плазмоидах. Теперь плазмоиды могут масштабировать так, как нормальные окна, то есть один из углов становится фиксированным, а другой перемещается за мышью (раньше это было от центра плазмоида, и он постоянно уходил за пределы экрана). Ещё хочется добавить то, что при масштабировании не происходит увеличения или уменьшения иконок, то есть всё вроде бы даже хорошо и KDE могло бы заполучить ещё одного пользователя, но... Как вы видите, справа внизу я оставил ошибку, связанную с Phonon'ом. Но у меня звук продолжал работать, Amarok играл, как? Не знаю, наверное через PulseAudio.

Удивительная вещь №5 заключается в том, что можно вытянуть уведомление, что я и сделал, но после чего остался маленький квадратик, тоже плазмоид. Промастабировав его и развернув, видно, что antialiasing по-прежнему не работает. Причём на некоторые рамки распространяется, но на шрифты нет. Вообще-то, вращение плазмоидов является основной фишкой KDE4, так как до этого я нигде похожего не видел. Зачем это нужно? Я пока не решил, наверняка это требует ресурсов (раз уж это у меня даже на выключенных эффектах подтормаживает). Зато представьте, у вас немного перекошен стол, на котором стоит монитор и "о чудо!", вы можете внести поправку на все плазмоиды, которые есть на рабочем столе. Вращение окон пока остаётся за гранью мыслемого... Подождём.

Ах да! Я вспомнил, опять же вчера, то есть на четвёртый день, меня поразило то, что безопасность KDE может быть под угрозой. Не верите? Итак, Удивительная вещь №6. Включив однажды компьютер, залогинившисть в KDE, мне предстало следующее окошко:

Не знаю как вы, но я испугался, хорошо, что у меня есть KDE и оно мена предупредило, что моя мышка может быть захвачена. Теперь моя безопасность уже выросла. Кстати сказать, Konqueror не стал стабильней и по-прежнему аварийно завершался... и не он один, другие, неизвестные мне приложения, закрывались тоже. Вот, например, что происходит при завершении System Tray'a (GTK приложения остаются обделёнными, в то время как QT'шные нет. KDE - единоличник!):

Но и эта вещь легко исправляется, достаточно закрыть эти окошки, как они тут же радостные, что я их освободил от оконного плена, возвращаются назад к себе в tray. Но радость Gajim'a была больше чем у Pidgin'a. Он показал мне уведомление о том, что пришло новое сообщение (конвертик), но на радостях забыл, что при этом "человечек" должен скрыться. То есть теперь это человечек с конвертиком в руках (кстати были случаи, когда конвертик был прикреплён к незадачливому почтальону сзади, как у Карлсона):

Запустив так привычный мне inkscape (мне нужно было подрисовать один градиент в SVG-файле) я получил Удивительную вещь №7. В чём она заключается? Это в том, что настройка градиента не работает так, как мне того надо. Там, где вы не видите шкалу цветов учтите, что она на самом деле есть!

В довершении хочется привести фразу одного из моих друзей, конечно же за вычетом идиоматических выражений: "оно кривое, с ****ным юзабилити и для него фактически нет родных приложений на куте4, а те вменяемые, что есть на куте4, работают и без кде4 на ура и вообще никак к нему не относятся"

21 янв. 2009 г.

Игра на КДЕ. День третий.

Вот и наступил третий день моего пребывания в KDE 4.1.4. Что я могу сказать? В битве с KDE чувство победы плавно переходило от меня к KDE, и от KDE ко мне: как только я зашёл в этот DE, первым делом я обнаружил пропажу звука в музыкальных приложениях, так заботливо запущенного день назад. О звуке я расскажу попозже. Для начала мне стоит сказать, что как только я открыл konqueror на страничке моего блога, мне не понравился цвет шрифта вкладок, который я захотел изменить. Конечно же я полез в systemsettings (теперь уже локализованный в "Параметры Системы"). "Завоеватель" этого перепугался и выдал мне последовательных два окна:

Ну ничего, эта проблема всего-навсего с konquer'ом у меня бывала всего два раза за два дня, так, что я думаю это не страшно. Теперь вернёмся к звуку. Основная проблема была в том, что у меня пропало воспроизведение музыкальных файлов. В моём Gnome для воспроизведения использовался backend Xine, в то время как здесь его не было. Чтобы голову себе не забивать, признаюсь откровенно, я установил метапакет kubuntu-desktop. Что это даёт? Собственно там прилагаются всевозможные попытке по тому, чтобы всё работало. В частности звук. Проблема вроде решилась, но остаются некоторые нюансы. Могу сказать, что звук работает теперь. Но для этого приходится сперва закрыть все приложения его использующие (в том числе и GTK+), потом на всякий случай перегрузить alsa-utils и pulseaudio. Собственно после этих преобразований, у меня получилось всё перенаправить через PulseAudio. Запустив pavucontrol, вы можете это проверить:

Если вы заметили, здесь видно, что сейчас воспроизводится Skype, Amarok, Gajim (paplay). То есть, я позволяю себе использование Звукового Сервера PulseAudio, который разрешает мне одновременное использование звуковой карточки приложениями разных типов.

Теперь, Удивительная вещь №4. Даже после установки метапакета kubuntu-desktop у меня с предыдущего сайта про PulseAudio произошла загрузка вот такого SVG-файла. Да-да, именно, почему-то KDE пока не умеет отображать SVG-файлы ни в konqueror'e, ни в firefox'e:

Хорошо, хоть есть inkscape, он помог мне исправить ситуацию. Я качал картинку и открыл её руками. А также, немного погуглив, обнаружил интересный проект KSVG. Очень интересно, но к сожалению мне не хочется его компилировать, так как в репозиториях его нет. Равно как и версии для KDE4 пока тоже видимо нет. А ещё хочу снова сказать, что konqueror у меня опять закрылся. Видимо он не выдерживает более 4-ёх вкладок при открытии 5-ой Google. Ниже приводится правильный оригинал верхнего изображения:

Напоследок покажу вам текущий рабочий стол, который я решил допилить себе именно так, чтобы мне стало удобно. Но, хочу сказать... Удивительная вещь №5: те, кто столкнётся с установкой тем под KDE4 обнаружат "приятную" новость, оказывается, так просто скачать и поставить тему или plasmoid под DE не так уж и просто. "Почему?" - спросите вы. Потому что, их так просто не установить. Здесь я нашёл одну статью, которая "обещает" быструю установку тем под Plasma, а вот здесь "чуть медленнее". По итогам проделанной работы я поломал внешний вид KDE полностью, и посетовал, что не существует более простого способа установки тем как в Gnome из tar архивов. Но зато, я нашёл у KDE встроенный менеджер по управлению внешним видом, виджетами и прочим. Назвать его точно не могу, одно из предположений это superkaramba, он позволяет скачивать апплеты с KDE-look.org, но почему-то количество доступных в этом приложении апплетов, несравнимо меньше чем имеется оных на сайте. Решение проблемы снова просто - нужно либо скомпилировать всё, что вам понравится, либо попробовать поискать скомпилированный кем-нибудь пакет. Я, к сожалению ничего подходящего не нашёл, возможно вам повезёт больше, так как я решил не тратить на это время свыше 10 минут. Потому смотрите на то, что у меня получилось хотя бы так:

Комментарий по этой картинке было тоже много, как и по первой, которая, по мнению "неназвавшихся" порочит славное имя KDE. Однако здесь было недовольство по поводу синеватости рабочего стола. Ну что ж, пусть, мне так удобно, благодаря таким нежным цветам и яркостью моего монитора, я постарался снизить риск развития заболевания "Красноглазия", которое могу в скором будущем подхватить, если конечно не потру KDE раньше. Хотя с музыкой и Firefox'ом KDE не так страшно (konqueror меня разочаровал своими аварийными завершениями и постоянным беспокойством о том, что я отправляю гнусные скриншоты в этот блог, волнуясь либо за мою, либо за его безопасность).

Но всё равно, несмотря на всяческие ухищрения оно всё ещё имеет популярность у пользователей

19 янв. 2009 г.

Игра на КДЕ. Предисловие

Это и последующие сообщения появились в результате одного или нескольких событий. Да, к сожалению, я хотел описывать в своём блоге только то, что может быть полезно людям, столкнувшимся с Ubuntu, программированием, то есть всем тем, что связано с компьютером.
В один, прекрасный день, один из друзей по переписке отыскал в интернете флеш-игру под названием Globulos. Рассказывать про эту игру можно долго, но это не являлось темой текущего сообщения. Единственное, что можно выделить, что при соответствующей небольшой тренировке вполне можно устраивать соревнования. Главное, чтобы была причина...

... И вот причина появилась. Моими друзьями в количестве 2 "штук" (дабы их не деанонимизировать, не буду приводить их имена и ники), была разработана и предложена, а потом принята причина игры на "что-то". И как вы поняли из темы поста, это что-то было — установка проигравшим менеджера рабочего стола KDE 4, по возможности, последней версией (на время написания статьи, у меня в локальном репозитарии Бунты была версия 4.1.4).

Игра была напряжённой, сперва побеждал я со счётом 2:1. Кстати сказать, по комментариям моих друзей и по статистике, у меня были неплохие шансы на победу, всем казалось, что у меня есть транспортир. Так как игра шла до 3 очков, мне достаточно было забить один гол, но...

... но судьба-злодейка не позволила мне забить этот мячик ни разу, и потому, методично проигрывая, сперва 2:2, потом 3:2, я, можно сказать, стал счастливым обладателем пакета kde, а потом уже и kdebase. Первый пакет это установка базового KDE, а второй — его основных приложений (ведь это было бы не по правилам уговора, поставить KDE и продолжать пользоваться Nautilus'ом).

Если учесть то, что я никогда в жизни не сидел и не ставил KDE с нуля, мне пришлось это сделать. Ставятся пакеты относительно быстро, если локальный репозиторий, и занимают где-то 700-800 мб свободного пространства. Первое, что бросается в глаза, это интерфейс чем-то сравнимый с Windows Vista. Вы уведите его чёрные рамочки до тех пор, пока я не найду как это всё можно сменить. На рисунке ниже, вы видите "коробочный" интерфейс, где одновременно помещены разные приложения, без предварительной настройки их внешнего вида:

Знакомство с КДЕ

Вообще, внешний вид, это всего лишь мелочь, подумал я, как оказалось не совсем, мало того, что мои Gnome-приложения, потеряли свой первоначальный вид, так оказалось, что KDE со своим декоратором тормозит у меня так сильно, что я начал жалеть об этой игре вообще.

Пока я решал проблемы с увеличением производительности моей, я столкнулся с Удивительными вещами. Они могут быть неудивительны для вас, но я, ни разу не видевший KDE больше 10 минут, после использования Gnome в течении полутора лет, начал удивляться.

Итак Удивительная вещь №1: в Gnome, когда происходит выбор темы или цветов рабочего окружения, окна изменяют свой окрас мгновенно. В KDE для этого нужно смотреть в маленький прямоугольник наверху, что на мой взгляд очень неудобно. Ведь, получается, что мне нужно вообразить как будет выглядеть моё окно, после применения параметров. Конечно, можно сохранить промежуточный профиль с цветами, чтобы попробовать подбирать дальше, но это решение не для меня.

Вот и цвета

Удивительная вещь №2 заключается в том, что оказывается чтобы применить сглаживание к шрифтам (а я скажу вам, что оно по-умолчанию ужасно) мне нужно перезапустить приложения, если только не само KDE. Ах да, ещё можно ввести дополнение к этой удивительной вещи. Взгляните, оказывается в KDE не хватает места для сообщений в маленьких диалоговых окнах. Поэтому там существует полоса прокрутки. Жаль, конечно, что создатели не предусмотрели этого и не вставили перевод строки (ведь Gnome сам переносит и всё умещает. Такая вот у них политика):

Удивительная вещь №3: KDE поражает своими настройками графического интерфейса (это первое, с чем я столкнулся). Вы можете менять тут ВСЁ, вплоть до бесполезных, на мой взгляд, вещей. Можно взять красивую тему, и испортить её настройками KDE, либо взять плохую тему, и настройки KDE, думаю, вам не помогут. Можно убирать кнопки управления экраном, можно их добавить, удалить, переместить, можно изменить даже толщину бордюра окон, причем безо всяких мыслимых ограничений. Такое ощущение, что скрипту, где содержится команда 'rm -rf /' дали права root'а:

Напоследок, мне понравилось не только то, что Wine после завершения полноэкранного OpenGl приложения "упорядочил" мне окна:

но и то, что пока я писал эту статью я получил вот это:

Я думаю, на сегодня пока всё. У меня на тот день, осталось много неразрешённых проблем, таких как отсутствие звука в системе (похоже это связано с использованием мной PulseAudio, отключение декораций, увеличение производительности всего, что тормозит). А ещё, мне хочется закончить эту статью мыслью: "Мне стыдно, что я поставил KDE". Но неделя ещё длинная, я успею исправить все эти проблемы.

Мне кажется, или мои глаза становятся красными...