Вопрос или проблема
Я пытаюсь выполнить bash-команду при нажатии кнопок на инфракрасном пульте дистанционного управления. Устройство приемника ИК-излучения — это USB-устройство, входящее в состав Anysee e30 Combo plus DVB-T тюнера, который, в остальном, работает идеально.
Вывод команды ir-keytable:
Найдено /sys/class/rc/rc0/ (/dev/input/event0) с:
Драйвер dvb_usb_anysee, таблица rc-anysee
Поддерживаемые протоколы: NEC
Включенные протоколы:
Название: Anysee
шина: 3, вендор/продукт: 1c73:861f, версия: 0x0100
Задержка повторения = 500 мс, период повторения = 125 мс
Когда я запускаю ir-keytable -t
для проверки того, что нажатия кнопок регистрируются, это работает, и я вижу коды сканирования и метки кнопок (KEY_UP и т.д.). Чтобы сделать так, чтобы при нажатии кнопки выполнялась bash-команда, я думаю, что мое единственное решение — использовать команду irexec из LIRC.
Я установил lirc и настроил его, затем запустил irw
, что является тестовой командой lirc. Никакого вывода вообще. Я проверил, что lircd работает и что irw может подключиться к демону.
Учтите, что LIRC не входит в список поддерживаемых протоколов команды ir-keytable. Означает ли это, что я не могу использовать оборудование для этой цели?
root@raspberrypi:/home/pi# modprobe ir-lirc-codec
root@raspberrypi:/home/pi# ir-keytable -c -p NEC,LIRC
Старая таблица ключей очищена
/sys/class/rc/rc0//protocols: Неверный аргумент
Не удалось изменить ИК-протоколы
Я увидел на нескольких сайтах, что люди делают это, чтобы добавить lirc как протокол. Однако меня не удивило, что это не сработало для меня, было бы странно, если бы вы могли добавить неподдерживаемый протокол, просто введя его имя в файл.
root@raspberrypi:/home/pi# echo lirc > /sys/class/rc/rc0/protocols
bash: echo: ошибка записи: Неверный аргумент
Я использую Raspberry Pi v2 как систему (Debian Wheezy)
Для включения протоколов вам нужно добавить префикс “+” к протоколу, поэтому ваша команда должна быть
echo +lirc > /sys/class/rc/rc0/protocols
Ответ или решение
Добавление LIRC в протоколы ir-keytable может быть довольно сложным процессом, особенно когда ваш аппаратный приемник уже настроен под специфические протоколы, такие как NEC. Давайте рассмотрим проблему, используя подход TEA (Теория, Пример, Применение), что поможет детально разобраться в ситуации и найти подходящее решение.
Теория
Система Linux предоставляет несколько путей для работы с инфракрасными (IR) устройствами через драйверы и утилиты. Основные инструменты здесь – это ir-keytable
и LIRC (Linux Infrared Remote Control). ir-keytable
– это инструмент, который позволяет вам изготавливать ключевые таблицы, управлять протоколами и обрабатывать скан-коды, получаемые от IR-приемников. LIRC же является более высокоуровневым решением, которое предлагает более широкие возможности, такие как управление включением скриптов при нажатии кнопок.
На данный момент, основная проблема заключается в следующем: ваш IR-приемник в списке поддерживаемых протоколов через ir-keytable имеет только NEC, а протокол LIRC отсутствует. Это создает препятствия для использования irexec (утилита LIRC для выполнения команд при нажатии кнопок).
Пример
Учитывая ваш случай, у вас установлен Raspberry Pi v2 с Debian Wheezy и подключен USB-устройство для приема IR, входящее в состав Anysee e30 Combo Plus DVB-T. После установки LIRC и его конфигурации тестовая команда irw
не возвращает ожидаемых результатов, хотя ir-keytable распознает нажимаемые кнопки через тестовую команду ir-keytable -t
.
Когда вы пытаетесь использовать модуль ir-lirc-codec
, чтобы добавить протокол LIRC в список активных через ir-keytable
, команда завершается ошибкой. Это указывает на то, что аппаратная поддержка LIRC не доступна или неправильно конфигурирована для используемого вами оборудования.
Применение
-
Обновление прошивки и ПО: Проверьте, обнов всё необходимое ПО до последних версий, включая ядро Linux, модули LIRC и другие зависимости. Иногда проблемы совместимости решаются с новой версией драйвера или утилиты.
-
Обновление системы и пакетов: Дистрибутив Debian Wheezy, на котором вы работаете, сейчас устарел. Возможно, стоит перейти на более современный дистрибутив, например, Raspberry Pi OS или более позднюю версию Raspbian.
-
Конфигурация LIRC: Убедитесь, что файл конфигурации LIRC корректно настроен. Файлы могут находиться в
/etc/lirc/lircd.conf
. Возможно, ваш драйвер необходимо настроить вручную, чтобы он корректно обрабатывал сигналы. Создайте или измените конфигурацию с помощью инструментов настройки LIRC такие какirrecord
для создания собственного файла конфигурации. -
Проверка совместимости: Поскольку ir-keytable и LIRC иногда используют разные подходы к обработке IR-сигналов, убедитесь, что ваше устройство поддерживается LIRC. Проверьте документацию по вашему устройству и поищите в открытых форумах, чтобы узнать, не сталкивались ли другие пользователи с подобной проблемой и как они её решали.
-
Работа с протоколами: Если ваш кодер протокола не поддерживает шаги выше, задумайтесь о написании собственного драйвера или виджета, который может помочь в интеграции LIRC и ir-keytable. Это требуемое усилие для тех, кто готов работать с кодом ядра и драйверами Linux.
-
Обратная связь в сети: Если ни одно из предложений не работает, задайте вопрос в активных сообществах Linux и Raspberry Pi, детально описав проблему и предыдущие шаги, которые вы предприняли. Обычно в таких сообществах можно найти экспертов, у которых уже есть подобный опыт.
-
Альтернативные решения: Рассмотрите возможность использования других IR-решений или установки отдельного IR-приемника, который официально поддерживается LIRC. Это может показаться крайним вариантом, но в некоторых случаях он оказывается наименее трудозатратным.
Итак, интеграция LIRC с ir-keytable может быть действительно сложной в условиях ограниченной поддержки драйверов и устаревшего ПО. Независимо от использованных методов, необходимо также учитывать аппаратные ограничения вашего устройства и различия в поддержке протоколов. С указанными рекомендациями и шагами по диагностике вы сможете расширить свои возможности управления через IR и добиться успешной интеграции.