LIRC (IR/InfraRed) на Orange PI PC

LIRC (англ. Linux Infrared Remote Control, «управление Linux при помощи инфракрасного пульта дистанционного управления») — программный пакет, добавляющий в операционную систему Linux возможность ввода информации при помощи инфракрасного пульта дистанционного управления (ПДУ). При помощи LIRCможно настроить практически любую кнопку любого ПДУ на выполнение любого действия компьютера.
Поддерживаются протоколы: NEC RC-5 RC-6 JVC SONY SANYO LIRC mce_kbd

тестировал на ARMBIAN 5.24 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i

root@orangepipc:~# uname -a
Linux orangepipc 3.4.113-sun8i #6 SMP PREEMPT Fri Jan 20 22:09:45 CET 2017 armv7l GNU/Linux

Проверяем загрузку модуля sunxi_cir командой lsmod | grep lirc

root@orangepipc:~# lsmod | grep lirc
ir_lirc_codec           3650  0
lirc_dev                7834  1 ir_lirc_codec
rc_core                12727  10 ir_lirc_codec,ir_rc5_decoder,ir_nec_decoder,ir_sony_decoder,sunxi_cir,ir_mce_kbd_decoder,ir_jvc_decoder,ir_rc6_decoder,ir_sanyo_decoder

В папке /etc/lirc/ обязательно должен находится файл lircd.conf, иначе модуль sunxi_cir не загрузится.

Также важным фактором, чтобы удостовериться, что все заработает, нужно проверить, появилось ли устройство ввода: Вводим команду evtest

root@orangepipc:~# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      vmouse
/dev/input/event1:      sunxi-gpiokey
/dev/input/event2:      sunxi-ths
/dev/input/event3:      sunxi-ir
/dev/input/event4:      MCE IR Keyboard/Mouse (sunxi-ir)
Select the device event number [0-4]:

udev присвоил sunxi-ir номер event’a 3

Select the device event number [0-4]: 3
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "sunxi-ir"
................................
Testing ... (interrupt to exit)

нажимаем кнопки на пульте

Testing ... (interrupt to exit)
Event: time 1485381577.674748, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c01
Event: time 1485381577.674760, -------------- EV_SYN ------------
Event: time 1485381577.788212, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c01
Event: time 1485381577.788219, -------------- EV_SYN ------------
Event: time 1485381579.106051, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c02
Event: time 1485381579.106060, -------------- EV_SYN ------------
Event: time 1485381579.219508, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c02
Event: time 1485381579.219512, -------------- EV_SYN ------------

(Остановить процесс можно [Ctrl]+[C])
Конфигурация и настройка LIRC.
используется файл /etc/lirc/lircd.conf и утилита irrecord (man irrecord).
Файл /etc/lirc/lircd.conf содержит “общепринятые” названия кнопок на пульте и их управляющие коды, получаемые непосредственно с пульта. Если кому-то повезет, то этот файл для своего устройства можно найти на оффсайте LIRC’a. remotes.list
“общепринятые” названия кнопок :

irrecord --list-namespace

Для старта процесса обучения удалим конфиг файл lircd.conf

service lirc stop
rm /etc/lirc/lircd.conf
irrecord --disable-namespace -H default -d /dev/lirc0 /etc/lirc/lircd.conf

Здесь нужно немного пояснить параметр --disable-namespace. если его не указать, то irrecord ищет общепринятые названия кнопок . Т.е. мы просто не сможем называть кнопки пульта так, как нам нравится.
irrecord предложит нам нажать на различные кнопоки и держать их примерно одну секунду
Не прекращайте нажимать кнопки, пока две линии точек (2x80), не сгенерируется.

Далее поочередно обзываем все кнопки пульта и жмакаем их. Когда закончили – просто нажали ENTER. Потом вас попросят как можно быстрее понажимать одну из введенных кнопок. irrecord создаст файл /etc/lirc/lircd.conf.

Для проверки LIRC’a служит утилитка irw – при ее запуске в терминале при нажатии на клавишу пульта отображается название клавиши и её управляющий код.

service lirc start
irw /dev/lircd
0000000000001001 00 1 /etc/lirc/lircd.conf
0000000000001001 01 1 /etc/lirc/lircd.conf
0000000000001802 00 2 /etc/lirc/lircd.conf
0000000000001802 01 2 /etc/lirc/lircd.conf
0000000000001003 00 3 /etc/lirc/lircd.conf
0000000000001003 01 3 /etc/lirc/lircd.conf
0000000000001003 02 3 /etc/lirc/lircd.conf

Далее требуется настроить команды, которые будут получать приложения, использующие управление при помощи ПДУ, при нажатии кнопок пульта. Они указываются в файле /etc/lirc/lircrc.

Создайте файл /etc/lirc/lircrc в котором описывается как и какому приложению реагировать на нажатие клавиши на пульте. Для примера поморгаем светодиодами на плате OrangePI PC:

begin
        remote = /etc/lirc/lircd.conf	
        button = 1
	repeat = 0
	delay	= 0
	prog = irexec
	config = echo heartbeat | sudo tee "/sys/class/leds/red_led/trigger"
	config = echo none | sudo tee "/sys/class/leds/red_led/trigger"
end
begin
        remote = /etc/lirc/lircd.conf	
	button = 2
	repeat = 0
	delay	= 0
	prog = irexec
	config = echo heartbeat | sudo tee "/sys/class/leds/green_led/trigger"
	config = echo none | sudo tee "/sys/class/leds/green_led/trigger"
end

После редактирования файла lircrc не забывайте команду: service lirc restart
файлы /etc/lirc
LIRC
Lirc и lircrc, примеры обработки событий пульта.

Share
Send
15 comments
vash_sa

У меня возник вопрос. А как в Armbian_desktop настроить управление с пульта перемещение по пунктам меню?
Вход в меню, выход? Где об этом почитать?
Спасибо за ваш блог, очень много интересного!

vash_sa

Так и не могу найти нужные команды. У меня есть usb-клавиатура. На ней можно управлять так же как я хочу управлять с помощью пульта. Где-то должен быть конфигурационный файл для клавиатуры. Но вот вопрос, как его найти? Название клавиш можно посмотреть с помощью evtest. Но загвоздка в том, какие команды привязаны к этим клавишам? Не подскажите где найти этот конфигурационный файл в Armbian?

ua3nbw

Я менял однажды коды клавиатуры , использовал loadkeys
тут можно посмотреть про loadkeys http://linux-road.blogspot.ru/2009/03/scancode-keycode-keysym.html и про клавиатуры: http://gimmor.blogspot.ru/2010/12/multimedia-keys-on-keyboard.html

Соответствие названий кодам хранятся в файле тут /usr/share/X11/xkb/keycodes/evdev
ещё интересный файл /usr/include/linux/input.h

vash_sa

Запутался совсем. Вроде этот кусок
begin
remote = sr-55_remote
prog = irexec
button = KEY_RADIO
repeat = 0
delay = 0
config = sudo /usr/bin/vlc
end
должен запускать vlc.
Но не получается. Помогите разобраться как прописать в lircrc команду на запуск хотя бы vlc.

vash_sa

http://webhamster.ru/mytetrashare/index/mtb0/1446249276cue9825p1u
Нашел это. Но почему-то Апельсин не воспринимает всего здесь написанного.
Работают только ваши команды. Конечно светиками побаловаться хорошо, но хотелось бы большего.

vash_sa

Если я в UXterm запускаю команду irexec при нажатии на кнопку vlc запускается. в терминале пишутся heartbeat и none от вашего примера. А если эту команду irexec написать в Xterm, то пишет ошибку при запуске vlc – не может соединиться с Х-сервером. Что нужно дополнительно сделать, чтобы lircrc управлял графическими приложениями?

ua3nbw

По запуску vlc c lirc, тут посмотрите: https://wiki.videolan.org/VLC_HowTo/Use_with_lirc/

xterm является стандартным эмулятором терминала для среды X Window System
Для X Window System, ищите программы с графическим интерфейсом.

vash_sa

Интересно, что из UXterm графические приложения запускаются, а из Xterm – нет. Почему так?

ua3nbw

uxterm, это xterm с юникодом.

vash_sa

Это я уже прочитал. Мне нужно разобраться. Почему без дополнительных телодвижений по кнопке пульта не запускается приложение? Везде пишут, что должно, а здесь ни в какую. По вашему примеру тоже при нажатии кнопки в консоль должно писать heartbeat или none, но этого же нет. Оно появляется, если открыть Xterm и запустить irexec. По идее irexec работать должен как демон. Где та часть модуля, которая демонизирует irexec?

ua3nbw

запуск демона /etc/init.d/lirc
строка 123 “start-stop-daemon.......................”

если демон запущен , вывод команда: ps -ax | grep irexec

12636 ? Ss 0:00 /usr/bin/irexec -d /etc/lirc/lircrc
17228 pts/1 S+ 0:00 grep irexec

vash_sa

root@orangepipcplus:~# ps -ax | grep irexec
3444 ? Ss 0:00 /usr/bin/irexec -d /etc/lirc/lircrc
4562 pts/0 S+ 0:00 grep irexec
Судя по выводу, демон запущен.
Тогда почему система не реагирует на команды записанные в lircrc. Например,
begin
prog = vlc
button = power
config = key-quit
repeat=1
end
http://doc.ubuntu-fr.org/tutoriel/lircrc
Ведь везде пишут, что у них все работает. А здесь – нет.
https://forum.armbian.com/index.php/topic/1953-guide-configuring-orange-pi-pc-to-receive-irinfrared/
http://linuxoid.in/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_LIRC_%D0%B2_Debian
http://linuxshare.ru/docs/software/video/mplayer/control.html
Что не так vlc запущен, код проходит, пульт команду передает, а vlc на команду не реагирует.
Что может блокировать выполнение команды с пульта?
У Вас что-нибудь получалось, кроме того примера?

ua3nbw

Я, с vlc, не работал. Запускал Squeezelite (squeezebox emulator for linux), пультом прекрасно рулится.
пример команды volup:


(lirc): up arrow on Touch Remote

begin
remote = Slim_Devices_Squeezebox3
button = KEY_UP
repeat = 0
prog = squeezelite
config = volup
end


С vlc не так всё просто. vlc от рута не запускается, от этого и надо исходить.

Запустите вначале MPlayer , чтоб работал с пульта.

vash_sa

С mplayer все получилось. Но хочется запускать GUI приложения, например, Kodi, имитировать клавиатуру http://www.lirc.org/html/irxevent.html , но это все блокируется и не понятно почему команды IRXEVENT или xdotool не проходят. Как это преодолеть?

Popular