BTPD (The BitTorrent Protocol Daemon) - отличный консольный bittorrent-клиент, построенный по принципу демона.
Клиент довольно минималистичный ("a good choice for the casual user", как пишут сами разработчики), но благодаря этому нетребователен к ресурсам, быстр и не сложен в освоении.

Состоит из двух основных частей - btpd (собственно демона) и btcli (управляющей программы). Параметры командной строки этих команд подробно описаны в README на сайте разработчиков.

Проблемы.

1) Кириллица в выводе btcli.

При вызове команды btcli list нарушается форматирования строчек с торрентами, в названиях которых присутствуют русские буквы:

Это возникает из-за того, что имена хранятся в UTF-8 и русские буквы занимают 2 байта, при форматировании же команда печати считает все буквы однобайтовыми.
Я предлагаю простенькое решение данной проблемы в виде патча list.c.patch:


1a2
> #include <iconv.h>
78a80
>
82c84,99
< struct item *p;
---
> // Параметр кодирования -->
> iconv_t ss_iconv_t;
> ss_iconv_t = iconv_open("CP1251", "UTF-8");
> // Параметр кодирования <--
>
> // Буфер для перекодированного имени торрента и переменные длин строк
> char *ss_name = NULL;
> int ss_size;
> int ss_inbytesleft;
> int ss_outbytesleft;
> char *ss_inbuf;
> char *ss_outbuf;
> int ss_i;
>
> struct item *p;
>
84c101,120
< printf("%-40.40s %4u %c. ", p->name, p->num, p->st);
---
> // Перекодируем имя торрента в CP-1251 -->
> ss_size = strlen(p->name);
> ss_inbytesleft = ss_size;
> ss_outbytesleft = ss_size;
>
> ss_name = realloc(ss_name, ss_size + 1);
>
> for(ss_i = 0; ss_i < ss_size + 1; ss_i++)
> ss_name[ss_i] = '\0';
>
> ss_inbuf = p->name;
> ss_outbuf = ss_name;
>
> if(iconv(ss_iconv_t, &ss_inbuf, &ss_inbytesleft, &ss_outbuf, &ss_outbytesleft) == -1)
> perror("Iconv failed");
> // Перекодируем имя торрента в CP-1251 <--
>
> printf("%-40.40s %4u %c. ", ss_name, p->num, p->st);
>
> //printf("%-40.40s %4u %c. ", p->name, p->num, p->st);
89a126,129
>
> // Закрываем параметр кодирования и освобождаем память для перекодированного имени
> iconv_close(ss_iconv_t);
> free(ss_name);



Патч накладывается стандартным способом ($patch list.c list.c.patch) на файл btpd-0.13/cli/list.c.

Суть изменений в конвертации имен в кодировку CP1251 перед печатью, где очевидно 1 буква всегда равна одному байту.
Конечно в случае кодировки терминала UTF-8 вывод будет выглядить примерно так:

Что легко исправляется тем же iconv'ом (я предлагаю прописать алиас в bashrc вида
alias b='btcli list | iconv -f CP1251 -t UTF-8' ).

Как видите в результате получается нормально отформатированный список:

Тестированием особым я конечно не занимался, поэтому рекомендую сохранить непропатченную версию файла btcli на случай, если будут какие-либо неприятности с исправленной.
Замечу также, что патч создавался для версии 0.13 и может не работать на других версиях.

2) Запуск btpd.

Проблема удобного запуска btpd решается стандартным скриптом для init.d, который можно как вручную ссылками добавить в rc*.d, так и с помощью chkconfig.
Привожу свой вариант скрипта "btpd":


#!/bin/sh
#
# chkconfig: 2345 33 33
# description: BitTorrent Protocol Daemon


# Source function library.
. /etc/init.d/functions


start()
{
echo -n "Starting BTPD: "
echo_success
su - $USER -c "btpd --bw-out 1000"
echo
}

stop()
{
echo -n "Stopping BTPD: "
echo_success
su - $USER -c "btcli kill 1"
sleep 1
echo
}

restart()
{
stop
sleep 5
start
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
msg_usage "${0##*/} {start|stop|restart}"
esac

exit



Естественно $USER замените на пользователя, под которым хотите запускать btpd, либо определите данную переменную.
Есть смысл конечно задать и свои параметры (зд. демон запускается с параметром --bw-out 1000).

Очень небольшая заметка об отличном бесплатном шрифте Дмитрия Сорокина.

Собственно установка шрифта XLinSans, даже в Ubuntu, не представляет из себя абсолютно ничего сложного: берется rpm, конвертится алиеном
(sudo alien <пакет>.rpm) и устанавливается стандартным способом:
sudo dpkg -i <пакет>.deb .

Шрифт уже доступен в том же Abiword'е:


Куда сложнее оказалось найти шрифт, даже зная его название.
В итоге оказалось, что искать нужно пакет из дистрибутива AltLinux под названием "fonts-type1-dmtr40in" (См. страницу пакета в сизифе или на rpm.pbone.net)

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

В этой статье я хочу описать создание мультимедиацентра из самого обычного ПК и операционной системы Lіnux. Я ни в коем случае не претендую на универсальность моего рецепта, а скорее наоборот: некоторые решения вам могут не подойти или просто не понравиться. В статье описан лишь один из многочисленных способов оптимизации Lіnux под проигрывание фильмов и музыки.

Часть 1. Железо.

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


1)Вывод на экран телевизора.

Вполне естественно желание смотреть фильмы на большом экране и реализовать это можно, подключив ПК к телевизору. Ваша видеокарта должна быть оборудована видеовыходом. Мне для этого не пришлось ничего настраивать, я просто купил переходник к видеокарте и подключил ее к видеовходу телевизора. После включения ПК картинка на ТВ-экране дублировала картинку на экране компьютера.

Для некоторых видеокарт есть возможность вывода на ТВ и монитор разных изображений. Таким образом можно смотреть фильм на экране телевизора и одновременно работать, например в текстовом редакторе, у монитора. Настройка зависит от модели карты, типовые конфиги xorg с описаниями можно найти на фтп.
Наверное наилучшим решением будет выбрать конфиг "DualScreen", что позволит запускать медиасофт на втором дисплее, например:
export DISPLAY=:0.1 && mplayer -fs file.name


2)Управление с пульта ДУ.

Если мы хотим получить современную мультимедиасистему, то без пульта дистанционного управления нам никак не обойтись. Для этого подойдет практически любой пульт: от видеомагнитофона, музыкального центра и т. д. С приемником сигнала от пульта все несколько сложнее. Если для вас некритично расстояние от пульта до приемника и вам вполне хватит 1-1,5 метров, то можно приобрести готовый приемопередатчик (например іRmate от Tekram на com-порт, цена примерно 400 руб.). В нагрузку вы получите возможность использовать этот девайс для синхронизации мобильника или КПК с компьютером. Если же расстояние важно (что наиболее вероятно), то надо собирать приемник самостоятельно. На сайте lіrc представлены схемы и описания по сборке. Схемы довольно простые, нужные детали можно купить в любом радиомагазине либо на радиорынке.

Поддержка пульта ДУ осуществляется с помощью универсальной службы для работы с ИК-контроллерами lіrc (Lіnux ІnfraRed Control). Подробное описание настройки этой службы выходит за рамки статьи. Конфиги lіrc просты и понятны, а "обучение" нового пульта с помощью программы іrrecord занимает пару минут.

3) Вывод аудио собственно из динамиков телевизора.

Раз видео мы уже успешно распараллелили (в случае DualScreen), логично то же самое сделать с аудио. Чтобы можно было например кому-то смотреть фильм на экране ТВ и слушать из его же динамиков аудиодорожку фильма, а в это время вы в наушниках за монитором могли бы прослушивать любимую музыку и редактировать всё тот же файл во всё том же текстовом редакторе. Делается это с помощью данного конфига alsa.

Достаточно положить его в /etc/asound.conf и можно запускать аудио раздельно на выходах front и rear. Если мы выделим rear для телевизора, а front для колонок, то логично сделать выход front (обычно зеленое гнездо на звуковой карте) выходом по умолчанию. Для этого в конфиге скопируем секцию frontx как default:


###Copy of "frontx" as default:
pcm.!default {
type plug
slave {
pcm "dshare"
channels 4
}
ttable.0.0 1
ttable.1.1 1
}
##

pcm.dshare {
type dmix
ipc_key 2048
slave {
pcm "hw:0"
rate 44100
period_time 0
period_size 1024
buffer_size 8192
channels 4
}
bindings {
0 0
1 1
2 2
3 3
}
}
pcm.frontx {
type plug
slave {
pcm "dshare"
channels 4
}
ttable.0.0 1
ttable.1.1 1
}
pcm.rearx {
type plug
slave {
pcm "dshare"
channels 4
}
ttable.0.2 1
ttable.1.3 1
}

Теперь по умолчанию музыка будет звучать из колонок ПК, для звучания же через динамики телевизора следует воспользоваться командой вида:
mplayer -ao alsa:device=rearx file.mp3

Во второй ("софтовой") части опишу как объединить заложенные в систему возможности с помощью отличной программы MMS.


 

Copyright © 2007 DamnSmallBlog. Content is licensed under Creative Commons Attribution-Noncommercial.

Design: GeckoandFly and Blogcrowds.