@ Карта сайта News Автора!

Bog BOS: Использование пульта ДУ в Linux: Lirc

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL

Последнее изменение файла: 2007.02.16
Скопировано с www.bog.pp.ru: 2024.11.23

Bog BOS: Использование пульта ДУ в Linux: Lirc

Пакет Lirc позволяет использовать пульт ДУ для управления операционной системой Linux и прикладными программами. В качестве пульта ДУ можно использовать как самодельные устройства (на сайте даются рекомендации по их изготовлению), так и промышленно изготавливаемые ИК передатчики. В частности, я использую пульт ДУ и ИК приёмник от ТВ тюнера AVerMedia TVPhone98 w/VCR и ТВ тюнера AverMedia AVerTV Studio 307. Пакет также позволяет использовать оборудование для передачи ИК сигналов.

Состав и возможности пакета

В состав пакета входят:

lircd и lircdm

Сервер lircd преобразует ИК сигналы, полученные от различных драйверов, в стандартного вида сообщения, которые прикладные программы могут получить через сокет (/dev/lircd). В качестве параметра можно указать имя файла настройки (обычно /etc/lircd.conf). По сигналу HUP сервер перечитывает файл настройки и переоткрывает журнальный файл (если не используется syslog), после чего извещает клиентов. Ключи:

Сервер lircmd получает сообщения от lircd и имитирует мышку типа MouseSystems, IntelliMouse или IMPS/2. Файл настройки - /etc/lircmd.conf. Ключ --nodaemon позволяет отлаживать работу сервера. Сообщения об ошибках выводятся на syslog.

Установка lirc 0.7.1 в Fedora Core 3 (lirc 0.8.1 в FC6) для AverMedia AVerTV Studio 307

  1. установить драйверы для AverMedia AVerTV Studio 307 (модуль saa7134 и пр.) и обеспечить их загрузку (в частности, saa7134 подгружает модуль ir_common:
    saa7134[0]: registered input device for IR
    
  2. FC3: установить пакеты с репозитория at-stable: lirc-kmdl-2.6.10-1.770_FC3.i686 (не нужен?), lirc-lib-devel.i386, lirc-lib.i386, lirc.i386, lirc-devices.noarch, portaudio.i386 (зачем он понадобился?)
  3. FC6: установить пакеты lirc, lirc-devel и lirc-doc
  4. посмотреть какое клавиатурное устройство создают saa7134/ir_common (в данном случае /dev/input/event2):
    cat /proc/bus/input/devices
    
    ...
    I: Bus=0001 Vendor=1461 Product=9715 Version=0001
    N: Name="saa7134 IR (Avermedia AVerTV St"
    P: Phys=pci-0000:02:02.0/ir0
    H: Handlers=kbd event2
    B: EV=100003
    B: KEY=40fc310 82140000 0 0 0 0 2048000 180 4001 9e0000 7bb80 0 0
    ...
    
  5. отредактировать /etc/sysconfig/lircd в FC3 или /etc/sysconfig/lirc в FC6 (не удивлюсь, если при следующей загрузке номер устройства будет другим - у меня в /dev/input/ длинный список):
    LIRCD_OPTIONS="-H dev/input -d /dev/input/event2"
    
  6. проверить /etc/init.d/lircd (/etc/init.d/lirc в FC6)
  7. установить /etc/lircd.conf (взять здесь от Nickolay V. Shmyrev)
  8. тестовый запуск:
    service lirc[d] start
    
  9. запустить irw и понажимать кнопки на пульте ДУ (пришлось остановить lirc и поменять настройки кнопок с цифрами с помощью "irrecord -H dev/input -d /dev/input/event4 /etc/lircd.conf"; взять результат в /etc/lircd.conf.conf)
  10. обеспечение запуска lircd:
    chkconfig --level 345 lirc[d] on
    
  11. создать ~/.lircrc и опробовать его с помощью irexec

Установка lirc 0.6.6 в Red Hat Linux 8.0

  1. для моего пульта ДУ требуется предварительно установить, настроить и загрузить драйверы v4l и bttv
  2. скачать и развернуть архив
  3. при сборке пакета создаются модули ядра (непонятно зачем, если все непосредственное взаимодействие с аппаратурой производится драйверами btttv и i2c), поэтому ядро необходимо подготовить для сборки
    1. cd /usr/src/linux-2.4
    2. make distclean (может достаточно make mrproper?)
    3. make menuconfig (сразу выйти с сохранением)
    4. make dep
    5. make bzImage (warning: kernel is too big for standalone boot from floppy, но я и не собираюсь его устанавливать, но если ядро не собрать, то модуль потом не загружается)
    6. make modules (не компилируется drivers/addon/cipe, убрал ее и поменял drivers/addon/Makefile)
  4. ./setup.sh (создает configure.sh на всякий случай для последующего запуска, нужен пакет dialog - /usr/bin/dialog)
    1. Driver configuration -> TV card -> AverMedia TV card (TVCapture 98, TVPhone98; card 13/41)
    2. Software configuration -> Compile tools for X-Windows
    3. Save configuration & run configure
  5. make (нужен root, т.к. собирается модуль в /usr/src/linux)
  6. make install (устанавливаются модули ядра!)
  7. поменять права для /dev/lircd и /dev/lircmd, если хочется иметь доступ к lirc не только для root
  8. depmod -a # обновление БД зависимости модулей ядра

Загрузка модулей (RH8.0, AverMedia TVPhone98 w/VCR)

Для FC3 и AverMedia AVerTV Studio 307 дополнительных модулей (кроме saa7134 и ir_common) не нужно.

Добавить в /etc/modules.conf

  1. alias char-major-81 bttv # загрузка модуля для AverMedia TVPhone98
  2. alias char-major-89 i2c-dev # управление тюнером и ИК приемником через модуль bttv
  3. alias char-major-61 lirc_gpio # аппаратная часть lirc
  4. install lirc_dev insmod -f lirc_dev # т.к. собранное ядро я не стал устанавливать, то приходится бороться с разницей версий модуля и ядра
  5. install lirc_gpio insmod -f lirc_gpio # аналогично

Параметры модуля lirc_gpio

Для AverMedia TVPhone98 (хотя все настраивается автоматически)

   lirc_gpio gpio_mask=0xf88000 gpio_lock_mask=0x10000 gpio_xor_mask=0x10000 soft_gap=0 sample_rate=10

Модуль lirc_dev имеет только параметр debug.

Запуск демонов (RH8, самосборный lircd 0.6.6)

Сначала надо проверить, работает ли собранный пакет:

  1. запускаем /usr/local/sbin/lircd (это демон, журнал в /var/log/lircd)
  2. запускаем irw и жмем кнопки на пульте ДУ, на терминал должны выводиться названия клавиш

Настройка lircd производится с помощью файла /etc/lircd.conf (лучше не трогать без нужды ;).

Настройка lircmd производится с помощью файла /etc/lircmd.conf (я его удалил, чтобы lircmd не запускался совсем).

Чтобы обеспечить автоматический запуск lircd (и, если нужно, lircmd) копируем /etc/init.d/lircd из lirc-0.6.5-fr3.i386.rpm в /etc/rc.d/init.d (поправить с учетом /usr/local/sbin). Затем добавляем lircd в список сервисов:

/sbin/chkconfig --add lircd
/sbin/chkconfig --level 2345 lircd on

Запускаем lircd (и lircmd) в первый раз вручную (при следующей загрузке это произойдет автоматически):

/etc/rc.d/init.d/lircd start

Управление приложениями

Демон lircd декодирует сигналы, поступающие с ИК приемника, и передает приложениям сообщения в виде пары: имя приемника, имя клавиши. Имя клавиши задается в /etc/lircd.conf совпадающим с надписью на соответствующей кнопке ДУ. Например, для моих устройств ДУ передаются следующие имена приемников и клавиш:

Для доступа к /dev/lircd большинство приложений использует входящую в состав пакета библиотеку liblirc_client. Так как в состав библиотеки входят подпрограммы разбора файлов конфигурации, то большинство приложений используют для настройки интерфейса с пультом ДУ файлы одного формата, точнее 1 файл. По умолчанию, этот файл называется ~/.lircrc, но приложение может позволять задавать отдельный файл конфигурации.

Файл конфигурации состоит из блоков строк, заключенных между скобками begin и end. Директива include вставляет содержимое указанного файла. После запуска каждое приложение находится с точки зрения библиотеки liblirc_client в основном режиме, при обработке очередного блока приложение может перейти в указанный в нем поименованный режим. Блоки, описывающие поведение программы в поименованном режиме, заключаются в файле конфигурации в скобки

begin имя-режима
  begin
    ...
  end
  ...
end имя-режима

Внутри блока могут быть использованы следующие директивы:

В одном блоке может быть задана последовательность директив remote и button, в этом случае для передачи строки приложению требуется последовательное нажатие указанных кнопок (удобно для задания пароля для poweroff ;).

Если приложение может самостоятельно обрабатывать команды ДУ (mplayer, xine, xawtv, tvtime), то для него задаются отдельные блоки в конфигурационном файле:

begin
    prog = mplayer
    button = FULLSCREEN
    config = vo_fullscreen
end

Если приложение может управляться событиями X Windows, то интерфейс между Lirc и приложением осуществляется с помощью утилиты irxevent (в качестве параметра может задаваться имя файла конфигурации; irxevent надо запускать в начале сеанса вместе с другими lirc-приложениями):

begin
    prog = irxevent
    button = POWER
    config = Key Escape xawtv
end

В директиве config кроме имени клавиши X Windows (см. список в файле irxevent.keys) или символа (возможно, с использованием префиксов shift-, numlock-, ctrl-, alt-, meta-) можно также указывать:

Вместо имени окна (часто совпадает с именем приложения, см. также xwininfo и xev) можно указывать идентификатор окна или CurrentWindow или RootWindow. Некоторые программы (xterm, xemacs) требуется настраивать, чтобы они позволяли прием сообщений (при этом создается дырка в безопасности!):

XTerm.vt100.allowSendEvents: true

Если приложение управляется нажатием клавиш клавиатуры (консольная программа), то ею можно управлять с помощью утилиты irpty (в данном случае для каждого приложения необходим отдельный файл конфигурации, утилита создает псевдотерминал):

irpty [--no-echo] [--ignore-eof ] [--non-interactive ] [--socket=имя-файла] \
  конфигурационный-файл -- имя-программы параметры-программы

Запуск приложений по нажатию кнопок ДУ можно осуществлять с помощью утилиты irexec, для чего надо вставить в скрипт инициализации сеанса ( .bash_profile? ):

irexec --daemon [имя-файла-конфигурации]

Перед этим в ~/.lircrc надо записать:

begin
  prog = irexec
  button = VIDEO
  mode = mplayer
  config = gmplayer 1>/dev/null  2>/dev/null &
  flags = once
end

begin
  prog = irexec
  button = TV/FM
  config = xawtv -geometry 768x576 >/dev/null &
  mode = xawtv
  flags= once
end

begin xawtv
  begin
    prog = irxevent
    button = POWER
    config = Key Escape xawtv
  end
end xawtv

begin mplayer
  begin
    prog = mplayer
    button = FULLSCREEN
    config = vo_fullscreen
  end
end mplayer

irexec можно также использовать для управления приложениями, имеющими вспомогательные управляющие программы:

begin
        prog = irexec
        button = power
        config = xawtv-remote quit
        flags = mode
end

Ссылки

@ Карта сайта News Автора!

Bog BOS: Использование пульта ДУ в Linux: Lirc

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru