Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
12.83 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

ВЫВОДPCICONF: НАСИНТЕРЕСУЕТИМЯ УСТРОЙСТВА, ПОЛНОЕИСОКРАЩЕННОЕ

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ВОССТАНАВЛИВАЕМТАБЛИЦУРАЗДЕЛОВСПОМОЩЬЮ РЕЗУЛЬТАТРАБОТЫGPART TESTDISK

 

СегодняLinux иFreeBSD легковстаютналюбойсовремен-

Проверь, загрузилсялидрайвер:

 

ныйсервер, домашнийкомпьютерилилэптопинетребуют

 

 

специальногоконфигурирования. Загвоздкалишьвтом, что

# ndiswrapper -l

 

драйверадля«железныхновинок» появляютсяснекоторым

 

 

 

 

опозданием, чтовполнезакономерно, нонеприятно.

Всевпорядке? Загружаймодульиконфигурируйсеть:

 

Еслитвоясвежекупленнаяжелезканикакнепроявляет

 

 

работоспособность, значит, ядронеподхватилоеевовремя

# modprobe ndiswrapper

 

загрузки. Такоеможетпроизойтивдвухситуациях: либо

 

 

ЛАТАЕМСЕТИ

 

драйвернебылзагруженвовремяинициализациисистемы,

 

либодрайверадлятакогоустройстванетвядреилимодуле.

Проблемысподключениемксети— бичновичковвLinux.

 

ВлюбомслучаеследуетопроситьшинуPCI напредмет

Большинстводружелюбныхкпользователюдистрибутивов

 

найденныхустройствизагруженныхдрайверов. Дляэтого

находятсетевыеинтерфейсысамиипытаютсянастроить

 

можноиспользоватьутилитуlspci вLinux илиpciconf во

ихсредствамиDHCP. Срабатываетэтодалеконевсегда.

 

FreeBSD:

Перво-напервозапустикоманду«dmesg | less» вLinux или

 

 

 

 

«less /var/run/dmesg.boot» воFreeBSD инайдивеевыводе

 

 

linux# lspci -v

 

сетевойадаптер, которыйтыиспользуешьдлявыходав

 

 

freebsd# pciconf -l -v

 

интернетилилокальнуюсеть. Например:

 

 

 

 

 

 

Наэкранетыувидишьвсенайденныевовремяинициа-

 

 

nfe0: <NVIDIA nForce2 MCP2 Networking Adapter>

 

лизацииядраустройстваизакрепленныезанимимодули

port …

 

(драйвера). Впервомслучаеимямодулябудетуказанов

 

 

 

 

строке«Kernel modules:», вовтором— впервойстроке

Первоеслово— этоназваниесетевогоинтерфейса(вLinux

 

каждогоустройства.

онбудетименоватьсяeth0 илиeth1). Запустикомандуifconfig

 

Вмоемпримересловоnfe0 всамомначалеотражает

безаргументовинайдивеевыводеэтоназвание. Еслиего

 

имяустройства(сетеваякарта) изакрепленныйзаним

нет— значит, интерфейснеактивен; еслижеввыводенет

 

драйверnfe. Есливместоименитыувидишьслово«none»

строкиinet — значит, емунеприсвоенIP-адрес. Активиро-

 

— значит, ядронезагрузилосоответствующийдрайвер,

ватьинтерфейсможнокомандой:

 

ипораотправлятьсянаегопоиски. Введиполноеимя

 

 

устройстваиназваниеоперационнойсистемывстроку

# ifconfig интерфейс inet IP-адрес netmask

 

поискаgoogle, итынайдешьимянеобходимогомодуля

сетевая-маска up

 

илисообщениеотом, чтоданноеустройствопоканепод-

 

 

 

 

держиваетсяядром.

Обычнодлявыходавлокальнуюсетьнетребуетсяввод

 

Еслипоискдрайверанепринесрезультатов, остаетсяодно

дефолтовогошлюза, такчтопослеисполненияэтойкоманды

 

— ждатьвыходановойверсииядра/ОСинадеяться, чтов

доступклокальнойсетидолженоткрыться. Вслучае, если

 

немпоявитсяподдержкатвоегооборудования. Владельцы

стандартныйшлюзвсе-такииспользуется, выполниследую-

 

неподдерживаемыхсетевыхадаптеровмогутпопытать

щуюкоманду:

 

счастьясфреймворкомNDISWrapper, которыйпредставляет

 

 

собоймодульядраLinux. Онреализуетпрослойкудляработы

# route add default gw IP-шлюза

 

драйверовNDIS (Network Driver Interface Specification),

 

 

 

 

предназначенныхдляWindows.

ТвойпровайдерможетиспользоватьPPPoE илиPPTP-сер-

 

Установипакетndiswrapper, скопируйсдискакаталогсофи-

вердляпредоставлениядоступакинтернету.

 

циальнымдрайверомдляWindows, найдивнемINF-файли

Настройка подобных подключений была подробно

 

выполниэтукоманду:

описана в статье «Прорыв сквозь PPP», опубликован-

 

 

 

 

ной в майском номере за 2008 год. За сим я прощаюсь.

 

 

# ndiswrapper -i driver.inf

 

Удачи! z

 

 

 

 

 

HTTP://WWW

links

Спасательный загрузочныйдиск— www.sysresccd.org.

Восстановитель таблицыразделов gpart — www.brzitwa. de/mb/gpart.

Testdisk — уни-

версальнаяутилита длявосстановления всегоився— www. cgsecurity.org/wiki/ TestDisk.

Спасательданных dd_rescue — www. garloff.de/kurt/linux/ ddrescue.

Утилитаnvclock — www.linuxhardware. org/nvclock.

Прослойка

NDISWrapper для запускасетевых драйверовWindows

sourceforge.net/ projects/ndiswrapper.

XÀÊÅÐ 06 /126/ 09

087

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

i

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

 

o

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

>>m

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

unixoid

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.c

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

LinuxMCE

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Smart Home

 

LinuxMCE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЮРИЙ «BOBER» РАЗЗОРЕНОВ

 

 

 

 

 

 

 

 

 

 

 

 

 

/ZLOY.BOBR@GMAIL.COM/

МОЙУМНЫЙ ДОМ—МОЯ

КРЕПОСТЬ

Smart Home

ДистрибутивLinuxMCE: бесплатноерешениедляуправлениядомом

Технология«умногодома» (Smart Home) уженеодингодбудоражит умыкакразработчиковсофтаижелеза, такиобычныхпользователей. Ведьвдомахсуществуетбольшоеколичествосамыхразнообразныхэлектронныхустройств, приэтомникакнесвязанных междусобой. Еслитысчитаешь, чтосовместитьихвединуюсис- темуоченьдорогоиподсилутолькоспециалистамэкстра-класса, тогдачитайэтустатью. Постараюсьтебяпереубедить.

>> unixoid

ПРОЕКТLINUXMCE

потребуетсяспециальныйадаптер(дляTCP/

обнаружениядвижениявполезрениякамеры

НазваниеLinuxMCE (www.linuxmce.org)

IP достаточносетевухи). Чтобынезапутаться

используетсяпрограммаMotion, речьокоторой

расшифровываетсякакLinux Media Center

водинаковыхустройствах, установленных

шлавстатье«Сумеречныйдозор», опублико-

Edition. Можносуверенностьюпредположить,

вразныхкомнатах, интерфейсуправления

ваннойвмартовскомномереzза2008 год.

чтоэтотдистрибутивпозволяетпревратить

предлагаетинтерактивныепланыпомещений,

Продуманныймеханизмсценариевпозво-

обычныйкомпьютервсовременныйдомашний

вкоторыхпользовательможет«расположить»

ляетлегкообъединитьреакциюнескольких

развлекательныймедиацентр(Home Theater

имеющиесядевайсыпосвоемуусмотрению.

устройствнанаступлениеопределенного

PC, HTPC). НоназначениеLinuxMCE гораздо

Вкачествекамернаблюденияможноисполь-

события/событийиликритерия(времясуток,

шире— Home Automation System, илиполно-

зоватьобычнуювеб-камеру, нолучшевсегодля

деньнедели). Приэтомпользовательполучает

функциональнаясистемаавтоматизациидома!

этойцелиподходятIP-камеры, поддерживаю-

оченьгибкиймеханизмуправлениярежимом

Онаспособнауправлятьвсемидоступными

щиеразличныевариантыудаленногоуправ-

работысистемыохраны. Достаточноустано-

девайсами, начинаяотобычного(ну, несовсем)

ления, даиценананихсегодняужеперестала

витьнескольковариантов, спомощьюкоторых

выключателясветадоустройствбезопасности

бытьзаоблачной. Аналоговаявидеокамера

определить, какдействоватьсистемевслучае

(сигнализацияивидеонаблюдение), атакже

цепляетсячерезплатувидеозахвата. Захвачен-

возникновениятехилииныхсобытий(поднять

климат-контроляибытовыхприборов. Чтобы

ноеизображениеслюбойподключеннойкаме-

тревогу, отправитьSMS, позвонитьнауказанный

включитьсявединуюсистему, устройства

рыможнопросматриватьвреальномвремени,

номерит.д.). Еслипомещениеужеимеетгото-

должныуметьработатьпопротоколуTCP/

записыватьпостоянно, позаданномуусловию

вуюсистемуохраны, LinuxMCE способенлегко

IP, X10, INSTEON, PLCBus, EIB/KNX, Z-Wave

(время, движение, звоноквдверьит.п.) или

интегрироватьсяивзаимодействоватьсней.

или1-Wire. Длясвязилюбогоизнихскомпом

использоватькомбинациюэтихметодов. Для

ОсновойтелефониивLinuxMCE является

088

 

XÀÊÅÐ 06 /126/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

P

 

 

 

 

BUY

NOW!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

серверAsterisk. Настройкапараметровего работыприпомощинесколькоизмененного

FreePBX (www.freepbx.org) понятнадаже человеку, далекомуотVoIP, инезайметмного времени. ДлязвонковсLinuxMCE наобычную телефоннуюлиниюпонадобитсяАТА-адаптер

(либо PCI-плата для аналоговых линий

а-ля Digium TDM410P с модулем расширения FXO — Прим. ред.), атакжесофтофон

(Xlite, Bria, Ekiga) илиIP-телефон. Некоторые моделителефоновпозволяютуправлятьвсеми настройкамиLinuxMCE сосвоегоэкрана. До- ступнафункцияfollow-me («следуйзамной»), обеспечивающаяавтоматическоеперенаправлениевыводанаразличныеустройства, ккоторымподходитпользователь, передвигаясьпопомещениям. Привыходепользователя иззоныуправлениясистемапереключается сBluetooth насотовуюсеть(GPRS/WAP), что позволяетконтролироватьдомиуправлятьим практическиналюбомрасстоянии. ФункциональностьHTPC, вобщем-то, стандартна— проигрываниемедиаконтента (фильмы, «живое» илизаписанноеТВ, музыка, интернет-радио, фотки) сразныхисточников, сохранениефайловнадиск, управлениеоборудованиемприпомощиIR (через трансмиттерGC100) илиBluetooth. Крометого, имеющийсявкомплектеSlimServer (сейчас— SqueezeCenter) позволяеттранслироватьаудиопотокнадругиекомпонентыSmart Home. Началопроектадатированофевралем2007 года, когдачерезпятьмесяцевработына Ubuntu былапрактическиполностью(без коммерческихмодулейDRM) портирована системаавтоматизацииPlutohome (построена наDebian). ПоследующиеверсииLinuxMCE в качествеосновыиспользуютKubuntu. Выбор былпродиктованбольшимивозможностями KDE поинтеграциирабочихсред. Хотянужно отметить, чторелизыMCE выходятгораздо позжеKubuntu. Так, версия0704, базирующаясянаKubuntu 7.04, появиласьвавгусте2007 (Kubuntu — апрель), текущаястабильная0710

— вмае2008. Какможнозаметить, нумерация LinuxMCE отражаетверсиюKubuntu, который послужилосновой. Релиз0810 находитсяна данныймоментвсостоянииразработки, — это первыйрелизнаKDE 4.x. Учитываябольшое количествоизменений, вносимыхвдистрибутив, приняторешениесверсии0810 (планируетсяполностьюрешитьвсепроблемы, связанныеспереходомнановыйKDE) мигрировать нагодовойциклвыходадистрибутива.

СТРУКТУРА

SMART HOME НАLINUXMCE

Прежде, чемприступитькболееподробному обзорувозможностейдистрибутива, познакомимсясоспециальнымитерминами, — они помогутпонятьпринципы, накоторыхпостроен LinuxMCE. Сердцемиодновременномозгом всейсистемыявляетсявыделенный(иединственныйвсети) серверCore. Нанемсобственно иработаютсервисы, предоставляемыеэтим

решением. Именнотутнастраиваютсявсевиды устройствисервисов— IP-телефоны, камеры, проигрыватели, TV-тюнерыипр. Компьютер Core долженбытьдостаточномощным, — на егоплечивыпадаетсамаябольшаянагрузка пообработкеданных. Должнобытьдостаточно слотоврасширения, чтобыподключитьвсеустройства. Такжепонадобитсяпроизводительный иемкийжесткийдиск, хотявкачествесистемы храненияинформацииможноиспользовать выделенныйNAS-сервер. Core предоставляет всенеобходимоедлязагрузкитонких(бездисковых) клиентов, которыезатемиспользуютсяв качествеMedia Director’ов.

MediaDirector(илиMediaStation)—этообычный компьютер,исполняющийрольмедиаклиента, непосредственновыводящеговидеонаэкран телевизораилимузыкувколонки.Егоможно использоватьтакжевкачестведесктопа(с Kubuntu),персональноговидеорекордера(PVR), домофонаилидлявидеосвязи.Плюснанего возложеназадачапоуправлениюимониторингу завсемпроисходящимвдоме:предлагаетсясоответствующееэкранноеменю,иподключаются устройствауправления.Какправило,такиесистемыненуждаютсявжесткомдискеизагружают-

подключеннойксистемномублокуклавиатуры илипультовдистанционногоуправления.Список орбитеров,которыеможноиспользоватьсовместносLinuxMCE,приведеннастраницеwiki. linuxmce.org/index.php/Category:Orbiters.Напри-

мер,вкачествемобильногоорбитераподойдут

Nokia770/7650/6620/N800/N810,IPAQ2210/5550/ hx2410,Cisco7970(XML-Orbiter)идр.Интерфейс дляподключенияновыхустройствнаписанна Ruby.Orbiterпереведеннанесколькоязыкови поддерживаетразличныевариантыоформления.Русскоговспискедоступныхязыковнет; впрочем,большаячастьиспользуемыхтерминов должнабытьпонятнаибезперевода.

УСТАНОВКАLINUXMCE

Ориентировочныесистемныетребованиядля разныхкомпонентовприведенывдокументе, расположенномпоадресуwiki.linuxmce.org/ index.php/Hardware. Естественно, дляCore и Media Director требованияотличаются. Еслине предусмотрензахватикодированиевидеопотока, тодляCore рекомендуемымминимумом являетсякомпьютерклассаPentium-III 733 МГц с256 МбRAM и4 Гбхардом(непонятнопочему, уменяпослеустановкивсегдасъедалосьне

«MEDIADIRECTOR—ЭТООБЫЧНЫЙКОМ-

ПЬЮТЕР,ИСПОЛНЯЮЩИЙРОЛЬМЕДИАКЛИЕНТА,НЕПОСРЕДСТВЕННОВЫВОДЯЩЕГОВИДЕОНАЭКРАНТЕЛЕВИЗОРА ИЛИМУЗЫКУВКОЛОНКИ.ЕГОМОЖНО ИСПОЛЬЗОВАТЬТАКЖЕВКАЧЕСТВЕДЕСКТОПА(СKUBUNTU),ПЕРСОНАЛЬНОГО ВИДЕОРЕКОРДЕРА(PVR),ДОМОФОНАИЛИ ДЛЯВИДЕОСВЯЗИ.».

сяпосети,нониктонезапрещаетиспользовать

менее8,5 Гб). ТаккакMedia Director’ынепос-

хард.ВSmartHomeможетбытьнесколькоMedia

редственноучаствуютввыводеинформации,

Director’ов,установленныхвразныхкомнатах

длянихтребуютсякачественныевидеои

иподключенныхквыходнымустройствам.Сам

звуковыекарты. Разработчикирекомендуютис-

Core-серверможетбыть«чистым»илигибрид-

пользоватьсLinuxMCE платыотNVidia (GeForce

ным(Hybrid),тоестьбытьещеиMediaDirector’ом.

6200 — GeForce 8500). СписокTV-тюнерови

Hybrid—наверное,самыйпростойвариант

картзахвататынайдешьпоссылке(втомчисле

использованиявсейсистемы.

поддерживаютсяиустройства, подключаемые

ГрафическийинтерфейсуправленияMedia

поUSB).

Director’омивсемиустройствами«умногодома»

Стабильнаянамоментнаписанияэтих

получилназваниеOrbiter.Онбываетнескольких

строкверсия0710 распространяетсядля

видов:универсальныйсвеб-интерфейсом,поз-

32- и64-битныхредакцийKubuntu 7.10 (Gutsy

воляющийуправлятьсистемойслюбогокомпа;

Gibbon). Вдальнейшембудемрассматривать

мобильный,представляющийсобойтелефон(с

установкуинастройкуименноэтогорелиза.

установленнойSymbianилиMicrosoftMobile)и

Кстати, вконцемартаистексрокподдержки

поддерживающийнужныефункции;ПКилиКПК,

десктопныхверсий*Ubuntu 7.10, поэтому

подключенныечерезWiFi.Крометого,всостав

обновленийкнимуженепредвидится.

MediaDirector’авходит«экранный»орбитер,

Настраницезагрузкиможновыбратьодиниз

позволяющийулучшитьуправлениеприпомощи

двухвариантовустановочногообраза. Еслиуже

XÀÊÅÐ 06 /126/ 09

089

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

Click

 

BUY

>>m

w

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

unixoid

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INFO

info

• Дляупрощениямы называемLinuxMCE

дистрибутивом, хотя

насамомделеэто ВОВРЕМЯУСТАНОВКИСЛЕДУЕТВЫБРАТЬ

свободноедополне- РЕЖИМCORE ИЛИHYBRID ниекдистрибутиву

Kubuntu.

 

 

• Основойсистемы

«ВКАЧЕСТВЕКАМЕРНА-

 

 

автоматизации

БЛЮДЕНИЯЛУЧШЕВСЕГО

 

 

вLinuxMCE является

 

 

Pluto (plutohome.

ПОДХОДЯТIP-КАМЕРЫ».

 

 

com). Егокодотноси-

 

 

тельнонедавностал

 

 

 

доступенподGPL,

 

 

 

хотяготовыереше-

естьдисксKubuntu 7.10, можноостановитьсянадвухCD-

 

 

нияраспространяют-

дисках, обозначенныхсоответственноLinuxMCE-CD1-i386-

 

 

сяподкоммерческой

rc2.iso иLinuxMCE-CD2-i386-rc2.iso (для64-битныхсистемв

 

 

лицензией.

именибудетприсутствоватьamd64). Онисодержатпакетыдля

 

 

 

конвертациисистемывLinuxMCE. Здесьестьодиннюанс—

 

 

• Основнаяфило-

этодолжнабыть«свежая» системабезкаких-либоапдейтов

 

 

софияLinuxMCE

(кстати, отинтернетанавремяустановкилучшеотключиться,

 

 

выраженавдевизе

чтобыоперационкачегоневытянула), иначеинсталлятор

 

 

проекта: «If you’re

LinuxMCE можетвыдатьошибкуизавершитьработу.

 

 

 

 

using a Media Center

Для«чистой» установкипредназначенDVD-диск. Доступны

 

 

PC, it’s all about the

дваварианта— обычный3,9 ГбиDual Layer — 7,0 Гб. Второй

 

 

 

 

media, stupid, not the

содержитдемо-видеохорошегокачества. Надосказать,

 

 

PC».

пользаотнегоневелика, поэтомусмыслакачатьневижу.

 

 

 

DVD устанавливаетсянепросто, аоченьпросто: достаточно

 

 

• Призапущенном

выбратьжесткийдискиввестипарольдляпользователя

 

 

LinuxMCE дляпере-

linuxmce, которыйбудетиспользоватьсядлядоступапоSSH.

 

 

ходавKubuntu нажи-

Послечеговсенеобходимыефайлыскопируютсянахард. В

 

 

маем<Ctrl+Alt+F7>

этомвариантебудетиспользованвесьдиск, данныенако-

 

 

 

 

и<Ctrl+Alt+F11> для

торомуничтожатся. Вариантмультизагрузкиизначальноне

 

 

возвращенияобрат-

предусмотрен; правда, инсталляторлегкообмануть(смотри

 

 

новLinuxMCE.

врезку).

 

 

 

УстановкасCD тоженесложна. Записыватьскачанные

 

 

• 25 марта2009 года

образынадискнеобязательно. СтавимKubuntu 7.10, затем

 

 

завершенаподде-

монтируемCD1 изLinuxMCE вкаталог/mnt:

 

 

ржка*Ubuntu 7.10.

 

 

 

 

 

 

 

$ sudo mount LinuxMCE-CD1-i386-rc2.iso /mnt -o loop

 

 

• Дляустановки

 

 

 

 

исходногокода

И— устанавливаемнаходящийсявнутрипакетmce-

 

 

 

LinuxMCE выполни

installer:

 

 

команду«svn co

 

 

 

http://svn.linuxmce.

$ sudo dpkg -i /mnt/mce-installer_2.0.1-1_i386.deb

 

 

com/pluto/trunk/

 

 

 

 

linuxmce».

Послеэтогонарабочемстолепоявитсязначок«Install

 

 

 

LinuxMCE». Чтобыначатьпроцессустановки, простощел-

 

 

• ОбзорMythTV читай

каемпонему. Да, вовремяустановкибудутперезаписаны

 

 

 

 

встатье«Строимдо-

некоторыесистемныефайлы. Всякоебывает, поэтомуна

 

 

машнююмедиастан-

«боевой» системелучшенеэкспериментировать.

 

 

цию» виюльском

Установкавыполненаввиденелокализованногопоша-

 

 

номережурналаза

говогомастера. Впервомокнеполучаемсообщениео

 

 

2007 год.

том, чтообновлениебудетпроизводитьсяизрепозитария

 

 

 

 

 

LinuxMCE (внемсодержатсявсенеобходимыепакеты),

 

 

 

анеUbuntu. Назначениевторогошага, предлагаю-

 

 

 

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

 

 

 

Насамомделездесьпредстоитопределиться, вкаком

 

 

 

 

УСТАНОВКА DVD-ВЕРСИИ

LINUXMCE

НАОТДЕЛЬНЫЙ РАЗДЕЛ

ПоумолчаниюприиспользованииDVDинсталлятор забираетхардполностью,попутнозатираявсюинфу. Ноестьодинтрюк,позволяющийпоставитьDVD-вер- сиювотдельныйраздел.Идеяпроста:нужнозаставить установщикповерить,чтосистемаужеесть,азначит, еенужнопростообновить.Дляэтоговотдельном разделе(лучше,чтобыэтобыл/dev/sda1),отформатированномводнуизфайловыхсистемLinux,создаем каталог/etc,авнем—пустойфайлpluto.conf.Вовремя установкипрограмманаходит/etc/pluto.confипредлагаетобновитьимеющуюсясистему.

режимебудетработатьнашсервер— Hybrid (выбираем Yes) илиCore (No, отказываемсяотпроигрывателя). Если накомпьютеребудетобнаруженавидеокартаотNVidia, мастерпредложитустановитьпроприетарныедрайвера (изинтернетаилисCD1). Отказыватьсяотэтойпроцедурынестоит. Далеесистемапробуетнастроитьсетевые интерфейсыприпомощиDHCP. Прижеланиивыбираем

«No, i’ll set my network options manually» иустанавли-

ваемнастройкивручную. Затемуказываемзеркало, с которогобудетпроизводитьсяобновление(вспискеесть ироссийское). ПоумолчаниюнасерверестартуетDHCPсервис, раздающийIP-адресавдиапазоне192.168.80.1- 192.168.80.254. Можноизменитьэтинастройки. Например, еслиLinuxMCE будетединственнымхостом, тогдав DHCP нетнеобходимости. Теперьследуетопределиться стем, какбудетиспользоватьсякомпьютер. Припомощи переключателявыбираемодиниздвухпредложенных вариантов:

Primarily used as a PC — поумолчаниюзагружается Kubuntu, номожнопереключитьсявLinuxMCE;

A dedicated LinuxMCE — наоборот.

Кстати, первыйварианттакжеможноиспользоватьнакомпьютере, выполняющемрольMedia Director’аиобычного десктопа.

Наэтомвсе. Теперьмастерпопроситуказать, гденахо-

дитсяCD1/CD2 иустановочныйKubuntu 7.10 Desktop.

Самыйудобныйвариант— задатьрасположениенахарде соответствующихISO-образов, тогдаможноначатьпроцесс установки, оставитькомпьютеризанятьсясвоимиделами. Есливыбрать«It’s in CD Drive», придетсяпоследовательно вставлятькаждыйдисквпривод. Впроцессеустановкимогутпоявлятьсясообщенияобошибках, обычноонивозникаютпритестированиидрайверовкразличнымустройствам. ЕслиустановканезаконченасError, тонанихобращать вниманиенестоит, нарезультатработыониневлияют. По окончаниибудетзапрошенаперезагрузка.

НАСТРОЙКИПОСЛЕПЕРЕЗАГРУЗКИ

Первая загрузка несколько затянется, поскольку будут проверяться и донастраиваться все сервисы. Далее запустится мастер настройки аудио и видео — «AV

090

XÀÊÅÐ 06 /126/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

>>

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

unixoidw

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

 

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

МАСТЕРHOUSE SETUP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WIZARD ПОМОЖЕТ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СКОНФИГУРИРОВАТЬ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПОДКЛЮЧЕННЫЕУСТ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РОЙСТВА

ПОСЛЕУСТАНОВКИLINUXMCE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВЕБ-КОНСОЛЬУПРАВЛЕНИЯLINUXMCE — ЗАПУСТИТСЯA/V WIZARD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ADMIN WEBSITE

 

 

 

 

 

 

 

 

 

 

 

 

 

ОРБИТЕРМОЖЕТИМЕТЬНЕСКОЛЬКОВАРИАНТОВИНТЕРФЕЙСОВ

Wizard». Сам процесс состоит из трех этапов, разбитых на девять шагов. На настройки рабочего стола Kubuntu эти установки никак не влияют, — они действуют только для LinuxMCE. В последующем мастер можно запустить повторно из меню LinuxMCE, выбрав Advanced

— A/V Wizard (или в командной строке /usr/pluto/bin/ AVWizard_Run.sh). Вначале при помощи трех окон выбираем видеоинтерфейс (VGA, DVI/HDMI, S-Video и так далее), разрешение и частоту развертки. После

проверки правильности этих установок будет запрошен выбор одного из трех вариантов Orbiter User Interface (UI). Самый простой — «Static images, no overlay (lightweight)» — не требователен к производительности видеоподсистемы и будет работать на всех платформах.

Наиболее продвинутый — «OpenGL with alpha blending (high-end)» — потребует NVidia 6/7/8/9xxx с не менее 128

Мб ОЗУ. После выбора одного из режимов с поддержкой OpenGL нужно протестировать работу нажатием кнопки «Test». На шаге «Adjust Image Size» указываем правильный размер изображения. Выбираем разъем, к которому подключены аудиоколонки, и тестируем вывод звука в обычном режиме, в Dolby и DTS (Digital Theater Sound) — последние два будут доступны в зависимости от выбранного аудиоразъема. Попутно выставляем нужную громкость. Смотрим итог. Если все в порядке, нажимаем «I agree» и ждем некоторое время, пока будут произведены соответствующие доустановки.

Теперьточновсе. Еслибылвыбранвариант«Primarily used as a PC», загрузитсяKDE, нарабочемстолекоторого будетрасположенаиконкадлязапускаLinuxMCE Launch Manager. Менеджерсодержитнескольковкладок, —

внихможнозапускатьMCE, атакжеуправлятьнекоторымиегопараметрамиипросматриватьжурналы. Для запускаLinuxMCE вовкладке«Start» нажимаем«Start LinuxMCE» или«Start Core services», еслинужнытолько сервисы, предоставляемыеCore. Дляавтоматического ихстартаприоткрытииLaunch Manager простоустановифлажкивполе«Autostart Settings». Запускзаймет некотороевремя, попрошествиикоторогозапустится ещеодинмастер, наэтотраз— House Setup Wizard (в процессеэксплуатацииегоможновызватьизменю«Misc

— Advanced Options — Setup Wizard»). Напервомшаге проверяютсянастройкивидеоизвука; есливидноизображение, ислышенголос, нажимаем«Next» иполучаем списокустройствудаленногоуправления. Далеемастер можетразделитьсянадва: House Setup Wizard иMedia Player Wizard. Первыйпомогаетнастроитьиспользованиесистемы, длячегопонадобитсяввестиимя, выбрать изспискастрану, указатьколичествоиназначение комнат, настроитьсистемыуправлениясветом, безопасности, параметрыVoIP-провайдераиPVR-систему (MythTV илиVDR). Еслинекоторыхустройстввсистеме нет, нажимаем«Continue without one». Мастерукажет логинипарольдлярегистрациииполученияготовой почты. ТеперьвMedia Player Wizard длякаждойкомнаты указываемсписокустройствиметодыуправленияими. Напоследнемшагеможноустановитьрядпрограмм (w32codecs, DVD CSS идругие). ЕслиПДУдлякакого-то устройстваотсутствует, нажимаем«Don’t control my …» иидемдальше. Впроцессевыбораустройствбудутустанавливатьсявсенеобходимыедрайвера, приэтомокно сообщенийбудетчутьперекрыватьрабочееполемастера (неоченьудобно). Поокончаниищелкаем«Start using the system». ДляпереходавKubuntu используемссылку

«KDE Desktop» илинажимаем<Ctrl+Alt+F7>; еслинужно вернутьсяобратновLinuxMCE — <Ctrl+Alt+F11>.

ПослеустановкидоступенLinuxMCE Admin Website, которыйможнооткрыть, обратившисьпоадресуhttp://core_ip/ pluto-admin илинажавкнопкувLaunch Manager. Отсюда можнопроизвестивсенастройки, окоторыхговорилось ранее, ипоссылкенапервойстраницескачатьорбитеры дляWindows инекоторыедругиеутилиты.

ЗАКЛЮЧЕНИЕ

Возможностей у LinuxMCE довольно много, поэтому первоначальную настройку должен производить человек, как минимум понимающий, что он делает. Что касается последующей эксплуатации, то она не вызовет проблем даже у чайника — выбирай устройство да нажимай кнопки! z

HTTP://WWW

links

• Официальныйсайт проектаLinuxMCE — linuxmce.org.

WiKi проекта

LinuxMCE содержит огромноеколичество информации— wiki. linuxmce.org.

Неофициаль-

ныйрусский сайтLinuxMCE — linuxmce.ru.

• Интернет-проект «Умныйдомсвоими руками» — hosm.ru.

WARNING

warning

ПриустановкеDVDвариантаLinuxMCE вседанныена жесткомдискебудут уничтожены, мультизагрузкасистемне предусмотрена.

XÀÊÅÐ 06 /126/ 09

091

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

++++ BUY

>>m

 

 

 

 

 

coding

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

++++

РОМАН «SPIRIT» ХОМЕНКО

++++/ HTTP://TUTAMC.COM /

ROMEO

 

++++

MONTAGUE

INTERNET

 

.NET

 

++++

 

JULIET

 

 

KOARL

WASINET

CAPULET

 

.ORG

.COM

++++

 

 

 

 

FRANZ PETER

 

++++

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

++++

++++

++++

++++

++++

++++

++ ++

РОБОТ

СХЕМАРАБОТЫДЖАББЕРА

 

ДЛЯ

АДМИНИСТРАТОРА

Программимкрутойjabber-ботсподдержкой плагиновнаPython’е

Британскиеученыедавнодоказали, чтособственнымджаббер-ботом долженобладатьлюбойуважающийсебяадминистратор.

Ещебы, ведьэтоонспасетвэкстремальнойситуации, когдаподрукой нетputty, затоестьджаббер-клиент(тыведьужезавязалсаськой, правда?).

++++

++++

++++

Пришлотепло, авместесним— ивыездына природусшашлыками. Ипокаясмотрелна костер, предвкушаяначалоотдыха, зазвонилтелефон(всоответствиисприказамион долженбытьприкаждомсотрудникемилициинаслучайтревогииликоманды«сбор»). Звонилполковник, срочновызывающийменя наработуитребующийвыдатьемунасерваке новыйпароль. Работынапаруминут, ногдеже явлесудостанукомпсинетом? Матерыйгик портативнуюЭВМсебе, наверняка, найдети там(пить, гулятьиморальноразлагатьсябез

ноута/субноутанемыслимо!), нояоказалсяне таков, инаэтомпикникдляменязакончился. Вечеромявспомнил, чтонателефонеуменя установленджаббер-месенджер, и, еслибына сервакеприсутствовалсоответствующийбот, которыймогбыисполнятьегокоманды, летний отдыхбынеобломался. «Никогданепоздно начать», — сказалсебеяипринялсязаработу.

PYTHON & JABBER

ПочемуPython? Апотому, чтозеленыйзмий

— единственныйразвивающийся(вотличие

отPerl’а, развитиекоторогоде-фактопре- кращено) системный(вотличиеотвебовского PHP) скриптовыйязыкпрограммирования. Выборпротоколасделатьещепроще, ведь уджабберавэтомпланенетконкурентов— аськанеподходитввидуотсутствиянативногошифрованияицентрализованности(их сервакможетлежатьиликапиталистическое начальствоопятьначнетчто-томутитьсо сменойпротокола).

ЮзатьнаПитонеджаббер-протоколмож- нодвумяспособами: простымисложным.

++++

092

XÀÊÅÐ 06 /126/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

>> coding

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ЛОГОДЖАББЕРА

«Сложно» — этопутемчтениядокументации (xmpp.org/rfcs) исиспользованиемсокетов. Еслихочешьразобратьсяспротоколом— это способоптимален, советуюпосмотреть, как сделанбототeLWAux (исходникиестьна диске).

Легкийпутьподразумеваетиспользование уженаписанныхбиблиотек. Ихнемало, например:

Twisted Words

(twistedmatrix.com/projects/words);

jabber.py

(jabberpy.sourceforge.net);

xmppppy

(xmpppy.sourceforge.net).

Выборопределяетсявосновномличнымипристрастиями. Мнебольшепонравиласьxmppppy отАлексеяНежданова. Еюмыивоспользуемся.

АРХИТЕКТУРА

Итак, задачапоставлена: написатьджаббербот, способныйприниматьиисполнять команды. Нет, стой, этослишкомпросто. Усложнимвсеинапишемполноценныйбот споддержкойплагинов, одинизкоторыхи решаетзадачуадминистрирования. Системаунасбудетсостоятьизбота(bot. py), файлаконфигурации(config.ini), папкис плагинами(plugins) ибиблиотекиxmpppy. Бот будетиметьдватипаплагинов. Представителипервойгруппыдоступнывсем, второй— лишьизбранным, поспискуилипаролю. Припроектированиисистемысплагинами всегдавстаетвопрособихполномочияхпо управлениюботом. Соднойстороны, чем меньшеправплагинумыдаем, темпроще ихписать, ноивозможностиполучаются болееограниченными. Поэтомупустьлучше плагиныбудутнизкоуровневыми. Трудностей мынебоимся.

СИСТЕМАКОНФИГОВ

Программингботаначнемсреализации чтенияконфига, которыйбудетхранитьсяво всемизвестномini-форматевфайлеconfig. ini (кстати, амерывеселопроизносят«ini» как «айнай»). Всекцииconnect мыразместимпараметрыдоступакаккаунту, накоторомбудет висетьбот, авсекцииpermission — список

юзеров, имеющихдоступкадминке(пароли будутхранитьсятамже).

Удобнуюработусini-файламивПитонеобе- спечиваетбиблиотекаConfigParser. Длячтенияпараметровмыиспользуемдвефункции оттуда. Первая, read — длячтенияконфигурационногофайла, имякоторогопередаетсякак параметр. Втораяфункция, get, нужна, чтобы достатькакой-топараметр. Онапринимаетв качествепараметровсекциюиимяпараметра. Рассмотримэтуфункцию:

def loadConfig(): import ConfigParser config = \

ConfigParser.ConfigParser()

config.read('config.ini') login = config.get('connect',

'login')

password = config.get(‘connect’, 'password')

allow_password = config.get('permission',

'allow_password') user_no_pass = config.get(

'permission', 'user_no_pass') user_no_pass = \

user_no_pass.split(',')

return {'login':login, 'password':password, 'allow_password':allow_password, 'user_no_pass':user_no_pass}

Здесьмычитаемпеременнуюсосписком юзеров, которымразрешендоступвадминку, ипревращаемвсписокметодомsplit позапятойкакразделителю. Далеевсепараметры мывозвращаемупакованнымивассоциативныймассив(наязыкеПитона— словарь). Теперьконфигможнопрочитать:

config = loadConfig()

ЗАПУСКБОТА

Перейдемкиспользованиюxmpppy изапуску бота. Спервасоздадимобъектjid отxmpp.JID, передавимяпользователя, взятогоизнашего загруженногоконфига. Созданиеглавного объектаbot производитсяотxmpp.Client спередачейдомена, накоторомнаходитсяюзер, и пустымсписком, чтобынаэкранневыводилась отладочнаяинформация(тру-хакерыработают толькометодомнаучноготыка).

jid = xmpp.JID(config['login']) bot = xmpp.Client(jid. getDomain(),debug=[])

Чтобыиметьполныйконтрольнадботомв любойточкепрограммы(ивглавномцикле, ив плагинах), мыбудемпередаватьнашобъектbot повсеместно. Новедьконфиг, списокплагинов идругаяслужебнаяинформациятакжеможет понадобиться(например, плагинуhelp нужно знать, какиеплагиныустановлены)? Да, и поэтомувобъектbot мысохранимвсюинтереснуюинфу. Так, конфигсохранимстрокой:

bot.config = config

Можнозаконектитьсяипройтиаутентификацию:

bot.connect()

bot.auth(jid.getNode(),

bot.config['password'])

Приемсообщениявxmpppy реализуется черезпривязкуфункцииксобытиюприхода сообщения. Сначаланужносоздатьфункцию, кпримеру, message, апотом, методомbot. RegisterHandler зарегистрироватьее:

bot.RegisterHandler('message',

message)

Теперь в цикле необходимо вызвать bot. Process(1), который принимает входящие

ПРОЕКТJABBER

Jabber— система мгновенного обмена сообщениями и информацией о присутствии на основе открытого протокола XMPP. Проект был основан Джереми Миллером в начале 1998 года и стартовал с разработки сервера jabberd. В настоящий момент есть некоторая непонятность в отношении терминов jabber и xmpp. Даже в английской Википедии с jabber стоит переадресация на xmpp. Эта непонятка в первую очередь связана с тем, что под именем xmpp протокол был стандартизирован в IETF. Каждый пользователь в джаббер-сети имеет уникальный идентификатор — Jabber ID (сокращенно JID). Адрес JID содержит имя пользователя и доменное имя сервера, на котором зарегистрирован пользователь. Подобно адресу электронной почты, они разделены знаком @. Пользователь может иметь одновременно несколько подключений, для различения которых

используется дополнительное значение JID, называемое «ресурсом» и добавляемое через слеш в конец адреса. К примеру, пусть полный адрес пользователя будет user@example. com/work, тогда сообщения, посланные на адрес user@example.com, дойдут на указанный адрес вне зависимости от имени ресурса, но сообщения для user@example.com/work дойдут только при соответствующем подключенном ресурсе!

XÀÊÅÐ 06 /126/ 09

093

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++ BUY

>>m coding

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

++++

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

 

 

 

 

ССЫЛКИ

 

 

 

 

 

 

 

 

 

 

НАОБЪЕКТЫ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

 

 

 

 

ИПЕРЕМЕННЫЕ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В Питоне (да и в других языках, например, в PHP), есть один

 

 

 

 

 

 

 

 

 

 

нюанс, про который часто забывают. Рассмотрим пример работы

 

++++

 

 

 

 

с переменными:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a = 1; b = a; b = 2 print a #1

++++print b #2

Он выведет на экран 1, потом 2, и это закономерно. А что, если переменная будет в объекте? Посмотрим:

++++

 

 

 

class Obj():

 

 

def __init__(self):

 

 

 

 

pass

++++

 

 

 

a = Obj(); a.var = 1; b = a; b.var = 2

 

 

print a.var #2

++++

print b.var #2

 

 

Сюрприз! На экран выводятся сплошные двойки! А случает-

 

 

 

 

ся это потому, что операция «=» при работе с объектами не

++++

копирует их, как при других типах переменных, а создает

 

 

ссылку.

 

 

В контексте нашего примера это означает, что переменную

 

 

bot мы обычно передавали как бы по значению, а на самом

++++

деле — как ссылку.

сообщения и обрабатывает их. Разумеется, вечный цикл здесь не нужен, поэтому в свойстве online смело запишем единичку, и

++++будем крутить цикл до тех пор, пока эта единичка не изменит свое

значение:

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

ROMEO

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

INTERNET

 

 

 

 

-x cha

 

 

 

 

MONTAGUE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПОДРОБНЕЕ

 

 

 

JULIET

 

 

 

 

ОXMPPPY

 

 

 

 

 

 

 

 

 

 

 

 

Библиотека xmpppy содержит много полезных объектов. Рассмотрим некоторые из них.

ОбъектJIDдляработысJabberID.При создании принимает параметр — Jabber-идентификатор.

Методы:

getDomain, возвращает домен;

getNode, âîçâðàщаем имя пользователя;

getResource, возвращает ресóðñ.

ГлавныйобъектClient.При создании принимает домен джаббер-сервера и переменную для отладочной информации. Методы:

connect, подключение к серверу;

auth, авторизация, принимает параметры: имя пользователя и пароль;

RegisterHandler, привязка функций к событиям, принимает параметры тип события(message, presence, iq) и имя функции;

sendInitPresence, отправка начальных запросов, нужно запускать после авторизации;

send, отправка сообщений, принимает объект Message;

Process, запустить обработку входных сообщений;

disconnect, отключиться от сервера.

Message—объектсообщения.Принимает параметры — имя юзера и текст сообщения.

Методы:

getBody, возвращает текст сообщения;

getFrom, возвращает имя пользователя, от кого сообщение.

bot.online = 1 while bot.online:

bot.Process(1)

bot.disconnect()

++++

++++

++ ++

++++

++++

++++

ПРОЦЕДУРАОБРАБОТКИ

ВХОДЯЩИХСООБЩЕНИЙ

def message(conn,mess):

#Достаем имя пользователя

global bot

user = mess.getFrom()

text = mess.getBody()

user = str(user).split('/')

#если сообщение служебное — выходим

user = user[0]

if ( text == None ):

 

return

#Если юзер не админ — говорим «команды нет»

 

if user not in bot.config['user_no_pass']:

# Из входящего сообщения достаем команду

text = "wrong command. try 'help'"

command = text.split('')

bot.send(xmpp.Message(mess.getFrom(),text))

command = command[0]

return

#если команда в списке публичных — запускаем

#Если команда есть в «админских»

if command in bot.plugins[‘public_commands’]:

if command in bot.plugins['commands']:

#Запускаем команду

runPlugin(command, bot, mess)

runPlugin(command,bot,mess)

else:

return

text = "wrong command. try 'help'"

 

bot.send(xmpp.Message(mess.getFrom(),text))

++++ 094

XÀÊÅÐ 06 /126/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

>> coding

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

СУРОВОЕПИТОНОВСКОЕЛОГО

КНИГАПОДЖАББЕРУ NETBEANS — ОТЛИЧНАЯIDE

ДЛЯPYTHON

Дляостановкиботанамбудетдостаточноизменить1 на0. Врезультате, онкорректноотсоединитсяотсервераизавершитсвоюработу.

Когданашботзапущен, мыможемвернутьсякнаписанию функцииобработкивходящихсообщений. Простейший вариант, способныйприниматьсообщениеиреагироватьна сейзнаменательныйфакт, выглядитпримернотак:

def message(conn,mess): global bot

if (mess.getBody() == None ): return

bot.send(

xmpp.Message(mess.getFrom(),'hello'))

Вначалеэтогоучасткакодамыкомандой«global bot» получаемдоступкобъектунашегобота. Далееидетобработка входящегосообщения, гдеспомощьюкомандыmess. getBody мыполучаемсообщение. Есливходящеесообщение равноNone, этоозначает, чтопришласлужебнаякоманда (допустим, прото, чтоюзерчто-тонампечатает). Такиесообщениямыобрабатыватьненастроены, иреакциянаних однозначна— выходизфункции.

ВследующейчастиМарлезонскогобалетамывоспользуемсяметодомsend, отправиввответпростоесообщение. ЭтотметодвкачествепараметрапринимаетобъектMessage библиотекиxmpppy. Приеесозданиимыпередаемдвапараметра: первый— комунужноотправитьсообщения, а второй— текстсообщения.

ПЛАГИНЫ

Простаяподдержкаплагиновреализованавсамой библиотекеxmpppy, номысделаемеепо-своему, написав собственнуюархитектуруплагинов(какминимум, сблэкджеком!). Сначалаопределимсясоструктуройплагина. Каждый плагинбудетиметьназвание, аналогичноеисполняемой имкоманде. Кпримеру, еслимыхотимсоздатьплагин, которыйнакоманду«echo some text» посылаетсообщение сэтимжетекстом, топлагиндолженбудетназыватьсяecho иразмещатьсявфайлecho.py вкаталогеplugins. Вкаждом плагинедолжнысодержатьсядвефункции. Одна, init, может проводитьнекуюпредварительнуюинициализациюиобязательновозвращать1, еслиплагинможноиспользоватьлишь админам, и0, есливсемюзерам. Втораяжеобязательная функция— run — вкачествевходногопараметрапринимает ссылкунанашботивходящеесообщение. Кпримеру, плагин echo выглядиттак:

import xmpp

def init(): return 0

def run(bot,mess): bot.send(xmpp.Message(mess.getFrom(),

mess.getBody()))

Напишемфункцию,загружающуюнашиплагины.Поскольку мыужерешили,чтоонидолжнынаходитьсявпапкеplugins,то

вэтомкаталогенампридетсяпоместитьпустойфайл__init__.py

таковотребованиеПитона.Этошаманскоедействопозволит намимпортироватьфайлыкакмодульфункцией__import__. Итак, намнужнозагрузитьвсефайлы, размещенныевпапке plugins (кроме__init__.py) вкакую-топеременную. Кроме того, вовремяинициализациимысоздадимдвасписка, которыебудутсодержатьреестрзагруженного. Впервом (public_commands) будутперечисленытеплагины, которые можнозапуститьбезавторизации, авовтором(commands)

элитные(тру, VIP) — админскиеплагины. Вкачестверезультатаработыфункциявернетнамассоциативныймассив сплагинамиисписками:

def loadPlugins():

import os commands = []

public_commands = []

#Перебираем все файлы из папки plugins for fname in os.listdir('plugins/'):

#Если файл заканчивается на '.py' if fname.endswith('.py'):

#Обрезаем последние 3 буквы plugin_name = fname[:-3] #Если имя файла не '__init__' if plugin_name != '__init__':

#Загружаем плагин в переменную plugins = __import__('plugins.' +

plugin_name)

#Достаем плагин с переменной

plugin = getattr(plugins, plugin_name)

#Если плагин админский if plugin.init():

HTTP://WWW

links xmpppy.sourceforge. net — cайтбиблиоте-

киxmpppy.

DVD

dvd

Надискеты найдешьполныеисходникибота.

Видео, иллюстрирующееработусботом, ждеттебятамже— нанашемDVD.

XÀÊÅÐ 06 /126/ 09

095

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

++++ BUY

>>m

 

 

 

 

 

 

 

 

 

 

coding

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

++++

ROMEO

INTERNET

MONTAGUE

.NET

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

++++

++++commands.append(plugin_name)

else: public_commands.append(plugin_name)

++++#Возвращаем ассоциативный словарь

return {

'plugins':plugins,

'commands':commands,

++++'public_commands':public_commands

}

++++«ЗАДАЧАПОСТАВЛЕНА:

НАПИСАТЬДЖАББЕР-БОТ,

++++СПОСОБНЫЙПРИНИМАТЬ ИИСПОЛНЯТЬКОМАНДЫ.

++++НЕТ, ЭТОСЛИШКОМПРОСТО.

УСЛОЖНИМВСЕИНАПИШЕМ

++++ПОЛНОЦЕННЫЙБОТ СПОДДЕРЖКОЙПЛАГИНОВ,

++++ОДИНИЗКОТОРЫХ

ИБУДЕТРЕШАТЬЗАДАЧУ

JULIET

KOARL

WASINET

CAPULET

 

 

.COM

ОБРАБОТКАСООБЩЕНИЙ.ORG

Осталосьизменитьфункциюmessage, котораяобрабатываетвходящие

FRANZ PETER

сообщения. Логикаееработытакова:

Выделяемизвходящегосообщениякоманду(символыотначаладо пробела);

Смотримналичиекомандывсписке«публичных».

Если к публичным она не относится, стало быть — проверяем авторизацию и факт наличия команды в списке «админских».

Есликоманданашлась, тозапускаемее. Впротивномслучае— сообщаемюзеруоприскорбномфактеотсутствиякомандывнаших списках.

Кстати, рассмотрим один момент. Имя пользователя, которое возвращает команда mess.getFrom(), не всегда возвратит правильное значение (с точки зрения проверки авторизации). Почему? Ведь там может быть имя ресурса (смотри врезку про Джаббер), которое нам не нужно. Стало быть, ресурс мы должны обрезать, например, вызвав метод строки split(‘/’) и потом взять первый элемент списка. Полностью функцию смотри на соответствующей врезке.

ИСПОЛНЕНИЕКОМАНД

Ну, вотинасталовремязакодить«виновникаторжества» — плагин, исполняющийсистемныекоманды. Нареченонбудетговорящимименем «cmd», апринципегоработыбудеттаков:

Обрезаемпервые4 символавходящегосообщения(кпримеру, cmd ls Æls).

Передаемкомандувцепочкуфункцийos.popen(cmd).read().

Полученныйрезультатконвертируем(принеобходимости) вutf-8 (при инициализацииботамынеуказываликодировку, поумолчаниюэтобудет

UNICODE).

Возвращаемпользователюрезультат.

++++АДМИНИСТРИРОВАНИЯ». Воткакэтовыглядитвстрокахсуровогопрограммногокода:

Эта функция важна для понимания работы Питона в плане загрузки

++++плагинов «на лету» — советую подробно в ней разобраться. После загрузки в переменную plugins плагина, его оттуда можно вытянуть функцией getattr с указанием в первом параметре имени переменной, где хранятся плагины, а во втором параметре — имени

++++плагина. В результате, функция возвращает сам плагин, из которого

уже потом можно вызывать функции, в нем находящиеся. К примеру, в вышеуказанной функции загрузки мы запускаем для каждого из них функцию init. В зависимости от результата имя плагина добав-

++ ++ ляем или в список public_commands, или в commands. Написанную загрузкуплагиновможнозаюзатьиприэтомзаписатьрезультатвсоответствующеесвойствобота:

++++bot.plugins = loadPlugins()

Чтобывызватьнашплагин, напишеммаленькуюфункцию, котораябудет приниматьимякоманды, ссылкунаботаивходящеесообщение:

++++

def runPlugin(command,bot,mess):

plugin = getattr(bot.plugins['plugins'],command)

plugin.run(bot,mess)

++++

Этафункция, исходяизимениплагина(параметрcommand), вытаскива-

етегоизbot.plugins[‘plugins’] изапускаетфункциюrun.

++++ 096

import xmpp import os

def init(): return 1

def run(bot,mess): cmd = mess.getBody() cmd = cmd[4:]

output = os.popen(cmd).read()

if not isinstance(output, unicode):

output = unicode(output,'utf-8','ignore')

bot.send(xmpp.Message(mess.getFrom(),output))

HAPPY END

Наэтомразработкуботаможносчитатьзавершенной.

Мы реализовали все, что хотели, оставив задел для неограниченного расширения функционала при помощи плагинов. На диске, кроме вышеперечисленных плагинов, содержатся и плагины бонусные. А чтобы продемонстрировать запуск и работу готового бота, я записал видео. Если что-то будет непонятно — спрашивай! z

XÀÊÅÐ 06 /126/ 09

Соседние файлы в папке журнал хакер