Впервые статья была опубликована в журнале "Системный администратор"

Дистанционное управление в 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 должен подготовить вашу систему к установке 
программы. Для работы программы необходимы следующие библиотеки:
* glibc версии 2.3 (для lirc версии 0.6.6)
* svgalib (последняя версия доступна на ftp://sunsite.unc.edu/pub/Linux/libs/graphics/)
* libirman (http://www.lirc.org/software/snapshots/)
* bttv (http://www.strusel007.de/linux/bttv/index.html)
* исходные тексты и заголовки ядра – они могут понадобиться, если мы будем перекомпилировать 
  ядро, а также для компилирования модулей lirc.
Если сценарий не нашел нужную программе библиотеку (или другую программу), вы увидите 
соответствующее сообщение. В этом случае вам нужно будет установить (или обновить версию) 
указанной библиотеку и опять ввести команду ./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.

Cчетчик Linux coutner