2010-12-24

Установка нескольких симпатичных дополнений для Ubuntu

Чтобы не лазить по ссылкам и не искать заново, запишу здесь, как установить некоторые понравившиеся мне украшательства (на 10.04)

# Новые шрифты Ubuntu из PPA
sudo add-apt-repository ppa:webupd8team/ubuntu-font-family
sudo apt-get update
sudo apt-get install ttf-ubuntu-font-family

# Новый avant window navigator из PPA и тема к нему
sudo add-apt-repository ppa:awn-testing/ppa
sudo apt-get update
sudo apt-get install avant-window-navigator-trunk python-awn-extras-trunk awn-applets-c-extras-trunk dockmanager-daemon dockmanager
wget http://ubuntulogy.org/wp-content/uploads/2010/09/AmbianceStyle.tar.gz

# Иконки Faenza из PPA
sudo add-apt-repository ppa:tiheum/equinox
sudo apt-get update
sudo apt-get install faenza-icon-theme

# Темы Bisigi
sudo add-apt-repository ppa:bisigi
sudo aptitude update
sudo aptitude install bisigi-themes

2010-12-23

Переименование файлов по времени их создания

Дано: много файлов видео с телефона, формат 3gp, видеозаписи дочери с рождения. Замысел - сделать видеоальбом.
Нужно: переименовать их в соответствии со временем их создания, например "2010-12-23-10-26.3gp", чтобы порядок сортировки был в порядке создания.
Используем стандартные возможности консоли. Запускаем цикл по файлам формата 3gp, и производим действия перемещения с найденным файлом, предварительно состряпав ему новое имя из времени его создания.
for i in *.3gp; do mv "$i" "`ls -l $i | awk '{ print $6 "-" $7 }' | awk -F':' '{ print $1 "-" $2 }'`.3gp"; done

2010-12-16

Запись звука, звучащего в моих колонках. Конечно, в Ubuntu.

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

Установим регулятор громкости PulseAudio, если он еще не установлен.
sudo apt-get install pavucontrol
Теперь можно его открыть и включить возможность записи с устройства вывода.



Выбираем галочкой "Monitor of Встроенное устройство Analog Stereo". Теперь откроем Audacity и настроим его на запись.



Теперь включаем радио или флеш, или что угодно, и жмем красную кнопку записи в Audacity. После окончания записи (нажать кнопку "Стоп" - квадратную такую, знаете?) - идем в меню "Файл - Экспортировать", выбираем формат, ID3 теги. Сохраняем записываем следующий трек.

2010-10-29

Rhythmbox и странности с ID3

Когда-то пробовал пользоваться этим плеером, но столкнулся с некоторыми неприятными вещами в нем, и отбросил как негодный. И только сегодня понял, в чем дело.
Странности были такие: у некоторых файлов он не мог изменить ID3 теги. То есть изменения происходили, и через две-три секунды всё возвращалось как было. И названия треков, и альбомов. Из-за этого многие треки оказывались в разделе неопределенного жанра. Причем программа EasyTAG нормально все меняла.
Наконец стало понятно в чем дело. Rhythmbox не умеет нормально работать с ID3 версии 2.4, а именно в такие я преобразовывал теги, когда что-то там менял. В результате, настроил в EasyTAG сохранение тегов в версии 2.3, и Rhythmbox тут же все подхватил, стал откликаться на изменения в тегах сторонними средствами, и вообще повел себя молодцом.
Вот как выглядят мои настройки EasyTAG:

2010-10-25

Шрифты семейства Ubuntu из 10.10 в 10.04 и 9.10

Симпатичные такие шрифты. Поставим же их себе через PPA:

sudo add-apt-repository ppa:webupd8team/ubuntu-font-family
sudo apt-get update
sudo apt-get install ttf-ubuntu-font-family

2010-10-08

Ubuntu и удаление копий файлов (например, фотографий)

Пользовался F-Spot, копировал файлы из папок в папки, в результате чего сложилась такая ситуация, что одна и та-же фотография хранилась в разных каталогах или с разными именами, различавшимися окончаниями, такими как "_1.jpg" или "-1.jpg". Вручную эту всю груду перебирать - с ума сойти.
Нам поможет простая и эффективная утилита fdupes.

sudo apt-get install fdupes
fdupes -r -d -N ~/папка/c/фотографиями

-r - рекурсивно, с подкаталогами
-d - удалять копии
-N - не спрашивать пользователя о том, какую из копий оставить, удалить все, кроме первой.

Разработчик, тебе мои аплодисменты.

2010-09-09

Заметка про GEDIT

Как я писал ранее о расширениях этого стандартного в Ubuntu текстового редактора. Здесь я опишу, как он мне помог в быстром решении одного простого вопроса.
Считаю картриджи в коробках. Синих в этой 7, в той 5, тут 14... Так и записываю: 7+5+14 и т.д. И так для каждого цвета. А теперь это надо сложить. А лень.
Поэтому, открываю Gedit, Правка-Параметры-Модули. Ставлю галку на "Внешние инструменты".
Создаю новый, называю "Математика". Вот так:


Теперь выделяю мой математический кусок, жму Alt+m и он заменяется результатом.
Чувствуете, как руки начинают чесаться от желания что-нибудь наворотить? Тогда вот вам еще кое что. В скриптах используются переменные окружения, такие как $PATH, $HOME или $PWD. Но для скриптов Gedit есть и свои особенные. Вот они:


$GEDIT_SELECTED_TEXT - Выделенный текст
$GEDIT_CURRENT_WORD - Слово, на котором находится курсор
$GEDIT_CURRENT_LINE - Строка, на которой находится курсор
$GEDIT_CURRENT_LINE_NUMBER - Номер строки, на которой находится курсор
$GEDIT_CURRENT_DOCUMENT_URI - URI документа
$GEDIT_CURRENT_DOCUMENT_NAME - Имя документа (файла)
$GEDIT_CURRENT_DOCUMENT_SCHEME - Тип документа (file/ftp/ssh)
$GEDIT_CURRENT_DOCUMENT_PATH - Полный путь к файлу (для локальных)
$GEDIT_CURRENT_DOCUMENT_DIR - Каталог текущего файла
$GEDIT_CURRENT_DOCUMENT_TYPE - Тип содержимого документа
$GEDIT_CURRENT_DOCUMENTS_URI - Список URI открытых документов
$GEDIT_CURRENT_DOCUMENTS_PATH - Список путей открытых документов

Вам и Gedit в руки! Кстати, не забудьте установить плагины:
sudo apt-get install gedit-plugins

2010-07-30

Автоматический backup базы MSSQL

Дано: некая база данных на сервере MSSQL 2005 Express.
Нужно: производить резервное копирование БД одним кликом или даже вообще без клика, автоматически.
Насколько я знаю, в полной версии (не Express) есть готовые инструменты для этого, и очень неплохие. Но она платная. Поэтому будем обходиться тем, что есть. И у нас получится.

Итак, резервное копирование, как и многое другое, может выполняться путем запроса T-SQL. Как узнать, как выглядит такой запрос? Можно, конечно погуглить, и вгрызаться в документацию, но есть способ проще. Кто не знал - сейчас покажу.
Запускаем SQL Server Management Studio Express. Выбираем свою базу и...



Все, теперь у нас есть sql-файл с готовым сценарием, делающим backup. Назовем его, к примеру, mssql_backup.sql, и положим на диск D.
Теперь осталось его запустить извне. Для этого есть консольная утилита sqlcmd, которая входит в состав сервера (респект парням из MS!). Пользоваться так:

sqlcmd -S .\SQLEXPRESS -i "d:\mssql_backup.sql"
где -S .\SQLEXPRESS - указание на имя сервера, по умолчанию оно такое.
Создаем bat-файл с этой командой, запускаем, наблюдаем процесс. Красота!

Осталось пара моментов.
1) Как сделать, чтобы это происходило по расписанию? Cron тут нету, есть планировщик заданий, но в моем XP он не пожелал сохранять задание в расписании, ругался на отсутствие прав... Погуглив, я узнал, что это баг и чинить его, видимо, уже не будут.
Поэтому, не заморачиваясь, кинул скрипт в автозапуск. Комп включается ежедневно, так что бэкап каждое утро меня вполне устраивает.
2) Как сделать, чтобы файл резервной копии не перезаписывался каждый раз? Хотелось бы, чтобы имя файла говорило мне, от какого числа эта копия.
Что ж, невозможного нет: правим сохраненный ранее сценарий:

DECLARE @filedate VARCHAR(20)
SET @filedate=REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),20),':','.'),' ','_')

DECLARE @file_path VARCHAR(256)
SET @file_path='D:\MSSQL_DataBases\main_'+@filedate+'.bak'

BACKUP DATABASE [main] TO  DISK = @file_path WITH NOFORMAT, INIT,  NAME = N'main-Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Теперь файлы будут выглядеть как main_2010-07-30_09.14.19.bak, что нам и требовалось. Можно дописать в bat-файл команду для их копирования куда-нибудь еще, например в сеть. Для надежности.
Ясное дело, что ни о каких наворотах или вопросах безопасности тут речи нет. Я просто показал пример, как это можно сделать.

2010-07-12

Управление сервисами Google из командной строки

Случайно узнал, что есть и такое. Так что запишу себе на заметку и вам на радость! По-моему, очень интересно, особенно для автоматизации-скриптизации своего компьютерного хозяйства.

Проект GoogleCL

2010-07-01

Чистим MKV-файлы от ненужных треков

Имеем: кучу файлов MKV (типа file-01.mkv, file-02.mkv ... file-24.mkv), в каждом из которых множество треков (видео, аудио, субтитры).
Нужно: оставить в них только одну видео- и одну звуковую дорожку.

Для работы с MKV нам понадобится одна утилита: mkvtoolnix
sudo apt-get install mkvtoolnix

Чтобы посмотреть, какие треки есть в файле, сделаем так:
mkvinfo file-01.mkv

Получаем довольно полную картину состава файла. Но нам нужна только часть, поэтому отфильтруем ненужное:
mkvinfo file-01.mkv | grep -Gi 'A track\|track number\|track type\|codec id\|Language'

| + A track
|  + Track number: 1
|  + Track type: video
|  + Codec ID: V_MPEG4/ISO/AVC
|  + Language: und
| + A track
|  + Track number: 2
|  + Track type: audio
|  + Codec ID: A_AAC
|  + Language: rus
| + A track
|  + Track number: 3
|  + Track type: audio
|  + Codec ID: A_AAC
|  + Language: jpn
| + A track
|  + Track number: 4
|  + Track type: subtitles
|  + Codec ID: S_TEXT/ASS
|  + Language: rus

Запоминаем номера нужных треков и их содержимое. Например, мне нужны только первый и третий трек. Берем их из исходного файла и создаем новый, содержащий только эти два трека:
mkvmerge file-01.mkv --vtracks 1 --atracks 3 -o file-01_.mkv
Если в файле только один видеотрек (как обычно и бывает), то достаточно и этого:
mkvmerge file-01.mkv -a 3 -o file-01_.mkv
Если субтитры тоже нужно включить, то
mkvmerge file-01.mkv -a 3 --stracks 4 -o file-01_.mkv

Ну а теперь, для пробы создадим копии первых пяти файлов, но только с нужными нам 1 и 3 треками:
for i in *{01..05}.mkv; do mkvmerge "$i" -a 3 -o "${i%.mkv}_.mkv"; done

Все получилось? Тогда можно и остальные обработать.

P.S. На всякий случай, если вы хотите вытащить оттуда субтитры в отдельный файл, то никто вам не мешает. К примеру, так:
mkvextract tracks file-01.mkv -c UTF-8 4:file-01.ass

2010-06-28

Видео для android

Устройства на базе Google Android воспроизводят видео определенного формата (mp4). Чтобы сжать кино для просмотра можно использовать ffmpeg, собранный с кодеком x264.

К примеру, такой скрипт в арсенале андроидовода может прижиться. Назовем его android.sh, сделаем исполняемым и положим в какую-нибудь папку, проходящую по данным PATH.



Теперь сжатие файла выполняется командой:
android.sh FileName
или, если нужно выбрать звуковую дорожку
android.sh FileName 1

Пока что мне не попадалось видео, которые бы конвертировались криво. Ура ffmpeg-у.

А как быть с субтитрами?

Единственный плейер, который умеет играть видео с субтитрами (из тех, что мне известны) - mVideoPlayer (даже умеет их сдвигать на указанное кол-во миллисекунд в обе стороны). Единственный тип субтитров, которые он кушает - SRT. Соответственно, в кодировке UTF-8.
Значит, нужно конвертировать субтитры из других форматов. Специальные программы есть в репозитариях, но уже на третьем файле линуксоид подумает: а нельзя ли как-то это автоматизировать? Я искал что-нибудь консольное, и не нашел.
Пришлось, как всегда, брать python в руки. Пока что соорудил конвертировщик ASS в SRT, понадобится другой формат переводить - думаю, и с ним проблем не будет. На выходе отдает файл в исходной кодировке. Вот что получилось на скорую руку (создайте файл подобный предыдущему, например subconv.py)



Теперь файл конвертирую так:
subconv.py -f FileSub.ass
и создается FileSub.srt в той-же папке.
Для конвертирования пачки использую цикл:
for i in *.ass; do subconv.py -f "$i"; done

P.S. Буквально вчера было обновление mVideoPlayer, в котором добавилась поддержка субтитров SSA и ASS. Теперь стало еще легче.

Сборка свежего ffmpeg

Заметка на память. Сборка свежего ffmpeg с кодеком x264. Взято здесь.

sudo apt-get install subversion
mkdir ~/src
cd ~/src
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
sudo apt-get install checkinstall
sudo apt-get install libfaac-dev libfaad-dev libmp3lame-dev \
libtheora-dev libxvidcore-dev libvorbis-dev libogg-dev libdirac-dev \
libopenjpeg-dev libschroedinger-dev libspeex-dev libgsm1-dev yasm \
libopencore-amrnb-dev libopencore-amrwb-dev libdc1394-22-dev
sudo apt-get install git-core
git clone git://git.videolan.org/x264.git
cd x264
./configure
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 \
--pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1" --default
sudo ./configure --enable-gpl --enable-nonfree --enable-pthreads \
--enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora \
--enable-libx264 --enable-libxvid --enable-x11grab --enable-libdirac \
--enable-libopenjpeg --enable-libschroedinger --enable-libspeex \
--enable-libgsm --enable-libvorbis --enable-libopencore-amrnb \
--enable-libopencore-amrwb --enable-libdc1394 --enable-version3
sudo make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg \
--pkgversion "3:0.svn`date +%Y%m%d` -12ubuntu3" --default
P.S. Если процессе сборки ffmpeg пишет так

.../libavcodec.so: undefined reference to `x264_encoder_open_94'
collect2: ld returned 1 exit status
make: *** [ffmpeg_g] Ошибка 1
возможно установлены лишние пакеты:

sudo apt-get purge x264 libx264-dev

2010-06-18

Ядро. Заметки на память.

Получить исходники ядра. Можно установить из репозитариев для текущего ядра или скачать посвежее с kernel.org. Распаковать архив
tar -xvjf *.tar.bz2
Пропатчить ядро:
Скопировать патчи в папку с исходниками ядра, после чего для файлов *.patch
patch -p1 < filename.patch
или для файлов *.bz2
bzcat patch.bz2 | patch -p1
Получить конфигурацию текущего ядра:
zcat /proc/config.gz > .config
Или скопировать подходящий generic из /boot в файл .config
Можно подправить конфигурацию
make xconfig
make-kpkg clean
Создаем пакеты для установки
sudo su
make-kpkg --initrd --revision=i386 kernel_image kernel_headers modules_image
Устанавливаем их:
dpkg -i *.deb

2010-06-17

Собрать несколько видеофайлов в один

Используя mencoder, собрать несколько AVI-файлов:
sudo apt-get install mencoder
mencoder 1.avi 2.avi 3.avi -oac copy -ovc copy -o out.avi

Если у нас несколько файлов формата MOV, переведем их сначала в AVI, например, с помощью ffmpeg:
sudo apt-get install ffmpeg
for i in *.MOV; do ffmpeg -i "$i" -vcodec mpeg4 -b 480k -r 23.976 -acodec libmp3lame -ab 96k -sameq -pass 1 ${i%MOV}avi; done


Теперь соберем все AVI в один:
sudo apt-get install transcode-utils
avimerge -o out.avi -i *.avi

2010-06-10

Firefox, Flash и звук (вернее, его отсутствие)

Все понятно, да? Видео есть, звука нет. У меня это носило периодический характер - то есть, то нет. Иногда в Chrome он есть, иногда и там пропадает. Почитав вики-страничку PulseAudio кажется понял, в чем дело.
Делаем так. Убеждаемся, что установлено все, что нужно:
sudo apt-get install flashplugin-installer flashplugin-nonfree flashplugin-nonfree-extrasound
sudo gedit /etc/firefox/firefoxrc
Вписываем туда строку
FIREFOX_DSP="padsp"
Сохраняем, закрываем, перезапускаем Firefox. Теперь звук работает!

P.S. НЕ панацея. На следующий день снова не работало.
Переустановил свежую ALSA (см.форум) - снова звучит. Интересно, надолго ли?

2010-06-08

Sony VAIO + Ubuntu. Как подружить?

Инструкция для огорченных совместной неработой ноутбука Sony VAIO и Ubuntu.
Установить и настроить Ubuntu 10.04 мне предстояло на двух ноутбуках Sony VAIO, один из них S-серии (VPCS11M9R/B), второй F-серии (VPCF11Z1R/BI).

Проблема:
Не удается установить Ubuntu, при запуске с Live-CD возникает черный экран. Наблюдается на S-серии.
Лечение:
Запускаем линукс с передачей ядру параметра nomodeset. Для этого после появления меню загрузки с диска нажать F6, и отметить галкой этот параметр. После установки нужно прописать этот параметр в меню загрузки, подредактировав меню grub:
sudo gedit /boot/grub/grub.cfg
После строки
### BEGIN /etc/grub.d/10_linux ###
видим описание пунктов загрузки. К нужному нам (обычно самому первому) после слов "quiet splash" допишем "nomodeset", так чтобы строка стала похожа на
linux /boot/vmlinuz-2.6.33.4-candela root=/dev/sda2 ro quiet splash nomodeset
Теперь с этого пункта удастся запустить Ubuntu. Правда, он какой-то убитый... Еще бы, с таким-то параметром. Может быть, многого будет не хватать, например меню или панелей, но у нас всегда есть Alt-F2, чтобы написать там 'gnome-terminal' и снова стать хозяином положения. Не огорчаемся, это еще не все, всё у нас будет нормально.

Проблема:
Не удается задействовать драйвера NVidia. Замечено и на S и на F серии, но по разному. После попытки их установить и запустить Ubuntu получаем нечто жуткое - F-серия отображает съехавшее или расплывающееся изображение, а S-серия с параметром nomodeset вообще его не грузит, а без него - ну да, черный экран.
Лечение:
Нам нужно получить бинарный EDID-файл из драйверов под Windiws (если я правильно понял) и подсунуть его в xorg.conf. Для этого берем программу "Phoenix EDID Designer" например, здесь (она работает в Win7 и бесплатна, softMCCS в семерке даже не запустилась). Запускаем ее в Windows7 (вы ведь не удалили ее, правда?), и проделываем там:
"Tools > Extract Registry EDID", "Extract EDID", "File > Export" как ".raw" файл. Теперь забираем этот файл в линукс, к примеру, на флешке. Копируем этот файл куда-нибудь, у меня получилось в '/etc/X11/edid.raw'. Немного пошаманим в файле xorg.conf, правда в Ubuntu 10.04 его уже не найти, но никто не мешает нам его создать.
sudo gedit /etc/X11/xorg.conf
И напишем там такие заклинания:
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
Option "ConnectedMonitor" "DFP-0"
Option "CustomEDID" "DFP-0:/etc/X11/edid.raw"
EndSection
Сохраняем. Теперь можно установить драйвер от NVidia. Пользователи F-серии смогут это сделать через GUI, а терминальщикам в S-серии придется как-то так:
sudo apt-get install nvidia-185*
Ну или новее, если будет к тому моменту. Осталось убрать nomodeset из меню grub (для S-серии) и перезагрузиться. Видео починили.

Проблема:
Не видит устройств WiFi. Наблюдается в S-серии.
Лечение:
Нам нужна новая прошивка для WiFi, номер 6050. Копируем файл с сайта, распаковываем, читаем readme и копируем
sudo cp iwlwifi-6050-4.ucode /lib/firmware/
Перезагрузка, система видит wlan0, ну не прекрасно ли?

Проблема:
Система не работает со звуковым устройством. Наблюдается и в F и в S сериях.
Лечение:
Установка последней версии alsa. Для этого, по рецепту с форума:
sudo apt-get install linux-headers-`uname -r` build-essential gcc gawk libgettext-ruby-util libgettext-ruby1.8 libncurses5-dev libncursesw5-dev xmlto checkinstall
wget ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.23.tar.bz2
wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.23.tar.bz2
wget ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.23.tar.bz2
tar jxvf alsa-driver-1.0.23.tar.bz2
tar jxvf alsa-lib-1.0.23.tar.bz2
tar jxvf alsa-utils-1.0.23.tar.bz2
cd ./alsa-driver-1.0.23
./configure --with-cards=hda-intel
make
sudo make install
cd ../alsa-lib-1.0.23
./configure
make
sudo make install
cd ../alsa-utils-1.0.23
./configure
make
sudo make install
sudo alsaconf

Этого оказалось достаточным, чтобы все запело и за играло, переключалось на наушники и обратно.

Что еще осталось:
Не работает Bluetooth в S-серии и не могу переключиться на встроенный микрофон (S и F). Если кто решил, отпишитесь.

P.S. Установка этого ядра для версии 10.10 (2.6.36 RC3) что-то изменила: заработал микрофон! Зато отвалились 3D эффекты: драйвер Nvidia не работает. Но это внушает надежду, что к релизу 10.10 наконец все заработает как надо!

2010-05-13

Тексты Библии в формате FB2

Искал себе на коммуникатор под Android тексты Священного Писания. На маркете нашел или иностранные переводы, или так называемый "перевод нового мира", т.е. искаженные тексты под нужды определенных лиц, которых я не буду называть. А обычного Синодального перевода на русском языке - нет. Тогда решил установить программу-читалку и просто тексты Писания туда загнать.
Установил FBReader, и выяснилось, что обычные txt он уже не кушает. Стал искать в интернете файлы fb2 для него, и наталкивался на неполные тексты. То только Ветхий Завет, то в Новом нескольких книг не хватает. В результате я взял на себя смелость создать то, чего мне не хватало.
Тексты взяты из программы "Цитата из Бибилии" Тимофея Ха.

Скачать файл Bible.fb2.zip

P.S. Для андроидов: распакуйте из архива файл Bible.fb2 и положите его в папку Books на карте памяти, что вставляется в ваш аппарат. Если такой папки нет, создайте ее.

2010-05-06

Pidgin, Empathy, Gajim и Yota

При работе в  сети Yota без всяких других соединений network-manager сообщает, что нет сети, что вводит некоторые приложения в сетевой ступор. Например, Pidgin или Empathy не могут соединиться со своими серверами, при том, что Firefox вполне нормально лезет в интернет по wimax-соединению.
Поиск привел меня к Gajim - этот jabber-клиент работает, не обращая внимания на network-manager. Взял с сайта последнюю версию и собрал в deb-пакет, берите, кому надо.

P.S. Нужен mail-агент для linux? Берите его здесь.

2010-04-23

Тюнинг Empathy

По умолчанию этот IM-клиент выглядит, прямо скажем, не очень. Простецкое окно чата, топорные иконки. В Ubuntu 10.04 его уже подрихтовали, добавили нормальные темы значков в список контактов и тему оформления окна чата. Но, чтобы достичь такой красоты, не обязательно устанавливать новый дистрибутив.

Установка значков в списке контактов

Качаем значки, например, эти, и распаковываем папку hicolor в каталог ~/.icons

Установка темы окна чата

Качаем тему отсюда, и распаковываем папку с именем типа ИмяТемы.AdiumMessageStyle в каталог ~/.local/share/adium/message-styles/

Вообще-то эти темы от Mac-овского IM-клиента Adium. В Ubuntu 10.04 Empathy укомплектован темой Renkoo.

2010-04-20

Функции в bash. Архивируй это!

Несмотря на два с половиной года использования Linux (вплотную с Ubuntu 7.10), как-то не вникал в тонкости shell-программирования. Ну цикл организовать, условия, выборки - пригождалось, но не белее того. Написал себе пару десятков alias-ов, для удобства, но чтобы обрабатывать опции командной строки писал отдельные скрипты на bash или python и складывал их в ~/bin, добавив путь к этой папке к переменной PATH.
Сравнительно недавно попалась на глаза информация о функциях в bash, и оказалось - это то, что мне нужно, чтобы не плодить скрипты. Они, оказывается, способны обрабатывать опции. В связи с этим, чтобы удобнее было создавать zip-архивы из чего угодно и поменьше тыкать по клавишам, накидал вот такую функцию, и поместил ее в ~/.bashrc

function zipp(){
    if [ -d "$1" ]; then out=`basename "$1"`".zip"; fi
    if [ -f "$1" ]; then out=`echo $1 | sed 's/\(.*\)\..*$/\1/g'`".zip"; fi
    zip -r -9 "$PWD/$out" "$1"
}

В ней проверяется, что сжимаем, каталог или файл, если файл - то отсекается расширение, если каталог - берется его имя без полного пути. После этого к имени добавляется ".zip", и передается архиватору как имя файла создаваемого архива.
Опции -r и -9 означают архивирование со всеми вложенными файлами с максимальной степенью сжатия.
Теперь, вместо того, чтобы писать в консоли
$ zip -9 -r myfolder.zip myfolder/

я пишу
$ zipp myfolder

Неправда ли, намного удобнее?

2010-04-19

Создаем DEB-пакет

Сегодня мы будем учиться готовить стандартные Debian-ские пакеты.
Оказывается, это не так сложно, и к тому же интересно.

Немного информации о пакете

Если вкратце, то deb-пакет - это ar-архив, распаковать который можно так:
$ ar x mydebpackage.deb

В результате мы увидим извлеченные файлы:
data.tar.gz (tar-архив с файловой структурой, копируемой в систему при установке)
debian-bynary (файл с номером версии формата пакетов)
control.tar.gz (tar-архив управляющей информации о пакете)

В файле control.tar.gz содержатся интересные вещи:
- postinst (скрипт, выполняемый после установки)
- postrm (скрипт, выполняемый после удаления)
- md5sums (контрольные суммы файлов)
- control (остальная метаинформация)

Например, в control может быть примерно такое содержимое:

Package: mypackage (название пакета)
Version: 0.1 (версия)
Depends: liba, libb1, libc2 (зависимости)
Recommends: libpamparam, lalala (рекомендовано)
Suggests: libbestdeb (могут улучшить работу пакета)
Section: utils
Priority: optional
Description: My best package! But for what?...



Создаем свой DEB

Чтобы создать deb-пакет, у нас есть все, что нужно. К примеру, я хочу собрать пакет видео-утилит, назовем его videotools.
В него войдут bash-скрипты для извлечения из видеофайлов отдельно аудио-дорожки, видео-дорожки, конвертирования avi в flv и обратно.

Для начала, создаем структуру каталогов.

videotools (каталог, в котором все остальное)
- DEBIAN/control (каталог DEBIAN с файлом control)
- usr/local/bin/getaudio (этот и остальные - мои скрипты)
- usr/local/bin/getvideo
- usr/local/bin/flv2avi
- usr/local/bin/avi2flv

Содержимое файла control будет примерно таким:

Package: videotools
Version: 0.1
Maintainer: Kawaikunee <secret@mail>
Description: Contaned scripts getaudio, getvideo, flv2avi, avi2flv
Section: utils
Priority: optional
Architecture: all
Depends: bash, mplayer, mencoder

Архитектуру указываю любую, это же просто bash-скрипты.

Теперь собираем пакет:
$ dpkg-deb --build videotools
И получаем файл videotools.deb

Трубим в фанфары и кушаем мороженое в честь успеха.

Дополнительная информация

Виртуальный пакет - это общее имя, употребляемое к любому из пакетов некой группы, все пакеты из которой обеспечивают подобную базовую функциональность (например, программы для работы с электронной почтой).
Чтобы добавить файл в виртуальный пакет какой-либо функциональности, нужно указать это в файле control, например так:
Provides: mail-transport-agent
Чтобы сделать файл зависимым от чего-то общего, так:
Depends: mail-transport-agent

Метапакет - пакет, в котором нет реальных файлов, он содержит только зависимости, чтобы гарантированно установить их. Например - ubuntu-standard

Создание DEB-пакета из исходников

Никакой магии. Устанавливаем пакет checkinstall (я уверен, не нужно вас учить, как это делается ^_^). Как обычно, в папке с распакованными исходниками делаем
$ ./configure && make
а вместо
$ sudo make install
набираем
$ sudo checkinstall
Такой финт ушами сначала создаст deb-пакет, а потом установит его через apt, что в дальнейшем обеспечит его корректное удаление, даже если разработчик не предусмотрел такой возможности. К тому-же, у нас останется пакет, который мы можем переслать друзьям, менее сведующим в этих консольных тонкостях, или которым это вовсе ни к чему.

Создание DEB-пакета для программ на Python

Для этого используем пакет py2deb(http://www.manatlan.com/page/py2deb). Приведены очень доступные примеры, а сам пакет скачивается там же, на сайте разработчика.
Например, вот скрипт, которым я упаковываю программу для изучения Библии. Оцените простоту!

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from glob import glob
from py2deb import Py2deb

p=Py2deb("bible")

p.author="Kawaikunee"
p.mail="secret@mail"
p.description="Программа в помощь изучающим Библию. Просмотр, поиск, параллельные места. Выделить текст и нажать клавишу F: поиск по выделенному. Клик на номере стиха: показать параллельные места. Клик на названии отрывка в найденном: открыть эту главу."
p.url = "http://kawaikunee.blogspot.com"
p.depends="python-gtk2, python, python-pysqlite2, msttcorefonts"
p.license="gpl"
p.section="utils"
p.arch="all"

p["/usr/bin"] = ["bible.py|bible","bible_iface.py","bible_shift.py"]
p["/usr/share/Bible/src"] = ["ot.png","nt.png","ap.png","ava.svg","bible_shift.xml"]
p["/usr/share/Bible/modules"] = ["modules/rst.sqlite|rst.sqlite","modules/kjv.sqlite|kjv.sqlite","modules/bible.db|bible.db"]
p["/usr/share/Bible"] = glob("modules/para/*")
p["/usr/share/applications"]=["Bible.desktop|Bible.desktop"]

p.generate("0.3.1")

Воодушевил? Дерзайте!

2010-04-08

Синхронизация TomBoy с UbuntuOne

Вторая попытка синхронизировать TomBoy с UbuntuOne потерпела фиаско. Сначала то, что на сервере, стало приплывать на локальный комп и добавлять повторные заметки с переименовыванием прежних (добавлялось слово "старая"). Удаление "старых" ни к чему не привело - при синхронизации создавал их заново. При этом регулярно выдавало ошибку "Синхронизация не удалась". Мыслю в направлении, что я удалил "Первую заметку", вероятно это критично для него, впрочем - это только догадки в попытке хоть как-то оправдать нелепые действия программы. Вторая, и катастрофическая бага: я удалил на сервере все заметки, надеясь, что теперь то с локального компьютера они туда зальются и будет мир во всем мире, но не тут то было: синхронизация удалила то, что было на компе. Хорошо, что оставались резервные копии.
Более-менее нормально отработала синхронизация в локальную папку. Буду пользоваться таким способом.

2010-04-05

Работа с MSSQL Server в консоли linux

По работе приходится использовать MSSQL Server, никуда не денешься. И это одна из причин, почему у меня на работе два компьютера - один под MS Windows XP (где и стоит SQL Server), второй - Linux Mint 8 Helena.
Что делать, когда раз-два в день (или в неделю) необходимо выполнить пару запросов к этому серверу баз данных? Ну, для начала нужно пересесть за компьютер с изделием MS (или воспользоваться удаленным доступом), запустить SQL Server Managment Studio Express, подождать, пока этот монстр загрузится, залогинится, открыть окошко для запроса, и только после этого можно начать работу.
Как много букв! Как хотелось бы чего-нибудь попроще и побыстрее! Что-то типа консоли mysql. Что-ж, достаточно приложить руки и голову, а python сделает остальное.
Вот, что у меня получилось. Мне нравится.

2010-03-24

Источник программы для изучения Библии

Теперь, когда есть сайт церкви, выложил пакет с программой в помощь изучающим Библию в линуксе на него, чтобы не заморачиваться с файлами на mail.ru
http://zelbaptist.org/dists/bible_0.3.1_all.deb

Обновление:
http://zelbaptist.org/dists/bible_0.3.2_all.deb
- исправлен поиск на русском (стал регистронезависимым)
- исправлена ошибка при переходе на перевод, в котором нет апокрифов

2010-03-02

Сайт церкви стартовал

1 марта 2010 года запущен сайт церкви, реконструированный на Pylons(web-фреймворк на Python). В дальнейшем будут добавляться новые возможности, пока это базовая часть. Ознакомиться можно здесь.

2010-02-18

Скрипт-напоминалка

Задача: нужно через определенный промежуток времени выполнять какие-то задания. Например, выводить пользователю сообщения через каждый час, чтобы он пошел попил чайку, отдохнул от монитора.
Можно воспользоваться монстрами типа cron. Но намного проще и быстрее написать такой скрипт самому. Например, такой:

#!/bin/bash
# Для вывода на экран в графическом режиме необходимо экспортировать переменную
export DISPLAY=:0.0
# Сообщим себе, что скрипт запущен
sleep 10 && notify-send "Таймер включен"
# Запустим в цикле сообщение о перерыве, ожидая вывода следующего 1 час
while :; do sleep 3600 && notify-send "Перерыв 15 минут"; done

Теперь сохраним скрипт, дадим ему права на выполнение и пропишем в автозагрузку.

P.S.
Для вывода сообщений посредством notify-send не забудьте установить libnotify-bin:
$ sudo apt-get install libnotify-bin

2010-02-17

Ubuntu + Yota = дружба навек

Об этом уже писали на разных форумах и т.п., но быть может собранное в одной статье поможет кому-то разобраться быстрее. Предполагается, что у вас модем-флешка от Samsung.
Устанавливаем libusb с исходниками:
$ sudo apt-get install libusb-1.0-1 libusb-1.0-1-dev
Если вам нужны man-страницы к драйверу, то устанавливаем также
$ sudo apt-get install asciidoc docbook2

Скачиваем драйвер отсюда. Распаковываем архив.
В консоли заходим в каталог с распакованными файлами.
Если вы будете использовать man-страницы, то
./configure
Если, как и я, не будете, то
./configure --without-man-pages
Далее все по классике.
make && sudo make install

После перезагрузки ifconfig покажет наличие нового устройства wimax0
У меня работает сразу. Но если у вас по какой-то причине интернет не работает, то делаем так:
$ sudo /usr/local/madwimax/sbin/madwimax
Чтоб было легче, можно прописать команду в псевдонимы в файле ~/.bashrc
alias yota='sudo /usr/local/madwimax/sbin/madwimax'

Спасибо разработчику драйвера. Работает без проблем.

Некоторые различия при установке Python Imaging Library (PIL)

Установка через APT
$ sudo apt-get install python-imaging
$ python
>>>from PIL import Image

Установка через easy_install:
$ easy_install PIL
$ python
>>>import Image

На заметку.

2010-01-20

Свежая версия Midnight Commander

Даже в последних версиях Ubuntu в поставке идет слегка устаревшая версия MC. Там не работает несколько отличных вещей, которые радуют меня теперь:
- поддержка скинов (не тоже самое, что [Colors] в ~/.mc/ini)
- показ/скрытие файлов с точкой в начале имени по Alt-.
Это только на первый взгляд. К тому же, устранены некоторые досадные глюки, типа "Оболочка все еще активна".
Чтобы установить, следуйте инструкциям, например, для 9.10 так:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F82FBD49
deb http://ppa.launchpad.net/zyv/ppa/ubuntu karmic main
deb-src http://ppa.launchpad.net/zyv/ppa/ubuntu karmic main
sudo apt-get update
sudo apt-get upgrade