ДЕНИС КОЛЕСНИЧЕНКО
Дистанционное управление в Linux
Довольно часто настольные компьютеры (не говоря уже о ноутбуках) оснащаются инфракрасными датчиками. Иногда датчик подключается к последовательному порту, а иногда – непосредственно к материнской плате, к так называемому IR-порту. Помню, пять лет назад у меня был компьютер с IR-портом (материнская плата VIA Apollo VPX 5SVA). В то время я не мог найти применения инфракрасному порту, а сегодня он мне бы очень пригодился: на новом компьютере не оказалось инфракрасного порта, поэтому пришлось подключить инфракрасный датчик к обыкновенному последовательному порту. В Windows все просто, достаточно только установить драйвер и датчик готов к работе. Для настройки инфракрасного датчика в Linux нужно немного поработать и головой, и руками.
Итак, у нас есть компьютер, инфракрасный датчик, пуль и Linux. Нам еще понадобится программа lirc (Linux Infrared Remote Control) – программа IR-дистанционного управления. Данную программу можно скачать с сайта www.lirc.org. Самая последняя версия 0.6.6. Программу можно скачать как в виде архива исходных текстов, так и в пакете RPM. В первом случае вам нужно будет самому откомпилировать программу, а это означает, что вам понадобится установленный компилятор gcc и все необходимые ему пакеты. Если вы скачали RPM-пакет, то для установки программы вам достаточно установить этот пакет. На сайте www.lirc.org можно найти только архивы с исходными текстами программы. Найти RPM-пакет можно с помощью поисковой машины пакетов http://rpmfind.net. Использовать RPMFind очень просто: введите название пакета (lirc) и нажмите кнопку Find. После этого вы получите список дистрибутивов, для которых имеются собранные RPM-пакеты программы. Выберите свой дистрибутив и скачайте файл (я скачал файл ftp://rpmfind.net/linux/freshrpms/redhat/9/lirc/lirc-0.6.6-fr1.i386.rpm).
Установка RPM-пакета программы обычно не вызывает проблем, поэтому сейчас мы рассмотрим установку программы из исходных текстов.
Вам нужно скачать файл lirc-0.6.6.tar.bz2 – 384 Кб (или lirc-0.6.5.tar.bz2 – 311 Кб). Все последующие действия нужно выполнять от имени администратора, то есть пользователя с UID 0 (обычно это пользователь root). Распакуйте архив в каталог /usr/rc/lirc и выполните команду:
./configure --with-driver=
Параметр device зависит от вашего устройства. Версия 0.6.6 поддерживает следующие устройства:
- animax – AnimaX (Anir Remote Control );
- avermedia – Avermedia (TVCapture & TVPhone (pre 98), а также некоторые TVCapture98 (ID 0x00021461) и TVPhone98 (ID 0x00011461) карты);
- bestbuy – BESTBUY (Easy TV (BT848 и BT878));
- caraca – CARACA (RC5 Remote Control);
- chronos – Chronos Video Shuttle II (BTTV ID 0x23);
- cph03x – ASKEY (AS-218 / AS-220 – ASKEY MagicTV);
- creative – Creative (PC-DVD Remote);
- fly98 – LiveView FlyVideo’98;
- generic – основные драйверы (Motorola, NEC, SONY, RC-5, RECS80, SANYO, DEMON);
- hauppauge – Hauppauge (WinTV primo; WinTV pci; WinTV radio);
- knc_one – KNC ONE (TV Station);
- knc_one – Anubis (Typhoon TView Tuner);
- logitech – Logitech (Value Infrared Remote Control);
- packard_bell – Packard Bell Remote (El Cheapo Packard Bell Remote);
- pctv (или pinnacle_systems) – Pinnacle Systems (PCTV Remote);
- pixelview (или playtv) – Pixelview (Pixelview PlayTV PRO, BT878+W/FM, RemoteMaster 2000);
- provideo – 3DeMON ( PV951);
- realmagic (sigma_designs) – Sigma Designs (REALmagic remote control);
- silitek – Silitek (SM-1000);
- technisat – Technisat (MediaFocus PC card);
- tekram – Tekram M230 (ATI 264VT (btt829));
- winfast – Leadtek (Leadtek CoolCommand (Winfast TV2000).
Я перечислил возможные значения параметра device, затем следует производитель устройства, а в скобках – поддерживаемые модели. Если вы все-таки сомневаетесь, загляните в каталог /usr/src/lirc/remotes (или в каталог /usr/share/doc/lirc-0.6.6/remotes, если вы устанавливали программу из RPM-пакета). В этом каталоге вы найдете дополнительную информацию относительно выбора устройства.
Вернемся к установке программы. Сценарий configure должен подготовить вашу систему к установке программы. Для работы программы необходимы следующие библиотеки:
Если сценарий не нашел нужную программе библиотеку (или другую программу), вы увидите соответствующее сообщение. В этом случае вам нужно будет установить (или обновить версию) указанную библиотеку и опять ввести команду ./configure.
Если же сценарий сообщит, что ваша система готова к установке программы, введите команды:
# make
# make install
После всего этого у вас появится устройство /dev/lirc (это же устройство появится при установке из RPM-пакета). Как оказалось позже, /dev/lirc – это просто ссылка на устройство /dev/ttyS0.
Осталось только настроить это устройство. В файле /etc/modules.conf (или conf.modules) пропишите строку:
alias char-major-61 lirc_sir
Драйвер lirc_sir (или lirc_serial) – это драйвер для датчика, подключенного к последовательному порту. Можно также уточнить параметры устройства, например:
options lirc_serial irq=4 io=0x3e8
Затем нужно отключить первый последовательный порт (COM1 или /dev/ttyS0). Для этого воспользуемся командой setserial:
setserial /dev/ttyS0 uart none
Убедитесь, что каталог /usr/lib (или /usr/loca/lib – для старых версий) прописан в файле /etc/ld.so.conf. Если нет, то добавьте его в файл ld.so.conf и введите команду ldconfig. В каталоге /usr/lib находится библиотека lirc_client.
После этого нужно добавить модуль устройства к ядру с помощью программы insmod или же, по примеру Microsoft, перезагрузить машину:
insmod lirc_serial [sense=N]
N может принимать значение либо 0, либо 1 в зависимости от активности вашего IR-приемника. Если активность схемы приемника высока, параметр N = 0, в противном случае – 1.
Параметр sense необязательный и использовать его нужно в случае, если программа не смогла автоматически установить параметры вашего устройства. Для тестирования вашего IR-приемника используется программа mode2.
Когда вы нажимаете кнопку STOP (или любую другую) на своем пульте дистанционного управления, приемник получает определенный сигнал. Для сопоставления названий кнопок (команд) принятым сигналам используется конфигурационный файл /etc/lircd.conf (в старых версиях программы /usr/local/etc/lircd.conf).
Для записи этого файла используется программа irrecord:
irrecord –d /dev/lirc /etc/lircd.conf
Выполните все инструкции программы, по окончании работы будет создан конфигурационный файл. Вот пример конфигурационного файла для приемника Creative PC-DVD Remote:
begin remote
name CREATIVE_INFRA_DVD
bits 16
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9293 4302
one 771 1494
zero 771 358
ptrail 756
pre_data_bits 16
pre_data 0x8435
gap 108646
toggle_bit 0
begin codes
play 0x00000000000005FA
stop 0x00000000000016E9
pause 0x00000000000000FF
eject 0x00000000000002FD
last 0x00000000000017E8
rrev 0x00000000000004FB
ffwd 0x00000000000006F9
next 0x00000000000001FE
1 0x00000000000008F7
2 0x00000000000009F6
3 0x0000000000000AF5
shift 0x00000000000014EB
4 0x0000000000000CF3
5 0x0000000000000DF2
6 0x0000000000000EF1
mouse 0x00000000000007F8
7 0x00000000000010EF
8 0x00000000000011EE
9 0x00000000000012ED
vol+ 0x0000000000000FF0
start 0x00000000000003FC
0 0x00000000000015EA
mute 0x0000000000000BF4
vol- 0x00000000000013EC
end codes
end remote
Если у вас нет времени на работу с утилитой irrecord, можно использовать один из конфигурационных файлов, предоставленных разработчиками LIRC. В каталоге /usr/share/doc/lirc-0.6.6/remotes/ находятся файлы конфигурации практически для всех поддерживаемых устройств. Однако будьте готовы к тому, что некоторые команды у вас не будут работать, поскольку невозможно создать файлы конфигурации для всех существующих моделей IR-приемников.
После создания файла конфигурации можно попробовать запустить демон lircd. Для этого введите команду:
service lircd start
или
/etc/init.d/lircd start
На этом работу по настройке IR-датчика можно было бы считать завершенной, но в пакете lirc есть одна «изюминка», которую просто невозможно забыть – это программа irexec. Данная программа позволяет выполнять программы. Вот формат файла .lircrc (он должен находиться в домашнем каталоге пользователя):
begin
prog = программа, которая будет обрабатывать событие
button = кнопка, которую нажали
repeat = если 0, то повторный сигнал (нажатие кнопки)
будет игнорироваться
config = команда
end
Небольшой пример:
begin
prog = irexec
button = 1
repeat = 1
config = echo “Вы нажали кнопку 1”
end
begin
prog = irexec
button = PLAY
config = echo “Вы нажали кнопку PLAY”
end
В заключение приведу несколько важных отличий версии 0.6.6 от предыдущих версий:
- Конфигурационные файлы хранятся в каталоге /etc, а не /usr/local/etc.
- Библиотека libirc_client находится в каталоге /usr/lib, а не /usr/loca/lib.
- Модули теперь называются lirc_driver (driver зависит от типа устройства), а не lirc.o.
Ваши вопросы и комментарии присылайте по адресу dhsilabs@mail.ru.