Как приручить USB ИК-приёмник от Мастеркит

Приобрёл на днях USB ИК-приёмник от Мастеркит с пультом. Покупал, чтобы прикрутить к Linux и использовать лёжа на диване вместо радиомышки. Надпись на коробке гордо гласила: «устройство определяется как стандартная USB HID-совместимая клавиатура» - думал, то что надо, проблем в Linux точно не будет! Но тут меня ждал сюрприз…

Вот как выглядит приёмник (у меня тот, что на заднем фоне):

Страница разработчика устройства: http://usbsergdev.narod.ru/MP708N/MP708N.html

Обсуждение на форуме Мастеркит.

Действительно, при подключении приёмник обнаруживается как HID-совместимое устройство MP708N на основе ATMEL ATtiny 45:

# dmesg | tail
usb 4-4: new low speed USB device using ohci_hcd and address 7
input: www.masterkit.ru MP708N as /devices/pci0000:00/0000:00:06.0/usb4/4-4/4-4:1.0/input/input7
generic-usb 0003:4242:E131.0006: input,hidraw4: USB HID v1.01 Keyboard [www.masterkit.ru MP708N] on usb-0000:00:06.0-4/input0

Но при нажатии «стандартных» кнопок увеличения и уменьшения громкости меня постигло разочарование: вместо изменения громкости, устройство имитировало нажатия «Ctrl-Alt-Shift-K» и «Ctrl-Alt-Shift-L». Жаль, что понятие «стандартная клавиатура» у разработчиков устройства сильно искажено… А как хотелось «просто воткнуть и пользоваться»!

Ладно, научим это недоразумение прикидываться «стандартным» пультом. Для начала установим замечательный набор для работы с пультами LIRC:

sudo apt-get install lirc

Указываем, какое устройство будем использовать и как. При запуске LIRC может найти инфракрасный приёмник в списке устройств по уникальному слову. Например, название приёмника от Мастеркит содержит строку masterkit.ru. Посмотреть название устройства можно в dmesg сразу после подключения приёмника. Будем использовать символы подстановки для поиска:

/etc/lirc/hardware.conf
REMOTE="None"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
DEVICE='name=*masterkit.ru*'
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS=""
START_LIRCD="true"

Настраиваем кнопки. Естественно, тут дело вкуса, но главное использовать стандартные названия кнопок, чтобы можно было «из коробки» управлять программами, не настраивая каждую на нестандартные значения. Примеры названий кнопок можно подсмотреть, например, в /usr/share/doc/lirc. Обзываем пульт каким-либо именем, пусть будет masterkit:

/etc/lirc/lircd.conf
# LIRC configuration file for Masterkit MP708N receiver.
# http://www.masterkit.ru
#
# brand: Masterkit
# model: MP708N
#
 
begin remote
        name masterkit
        bits 32
        begin codes
                POWER                   0x1001e
                MUTE                    0x10030
                MENU                    0x1002e
                PLAY                    0x10002
                STOP                    0x10003
                BACK                    0x10020
                TITLE                   0x10004
                INFO                    0x10005
                DISPLAY                 0x10012
                DOWN                    0x10006
                UP                      0x10007
                RIGHT                   0x10021
                TIME                    0x10022
                REVERSE                 0x10023
                FORWARD                 0x10017
                SELECT                  0x10024
                VOLUMEMINUS             0x10025
                VOLUMEPLUS              0x10026
                SUBTITLE                0x10032 
                PAGEMINUS               0x10031
                PAGEPLUS                0x10018
        end codes
end remote

Так как у меня основное средство просмотра видео - это XBMC, то настраиваем кнопки для него в файле Lircmap.xml. Имя устройства должно совпадать с именем в файле lircd.conf:

~/.xbmc/userdata/Lircmap.xml
<lircmap>
        <remote device="masterkit">
                <power>POWER</power>
                <mute>MUTE</mute>
                <menu>MENU</menu>
                <play>PLAY</play>
                <stop>STOP</stop>
                <back>BACK</back>
                <title>TITLE</title>
                <info>INFO</info>
                <display>DISPLAY</display>
                <down>DOWN</down>
                <up>UP</up>
                <right>RIGHT</right>
                <myvideo>TIME</myvideo>
                <reverse>REVERSE</reverse>
                <forward>FORWARD</forward>
                <select>SELECT</select>
                <volumeminus>VOLUMEMINUS</volumeminus>
                <volumeplus>VOLUMEPLUS</volumeplus>
                <subtitle>SUBTITLE</subtitle>
                <pageminus>PAGEMINUS</pageminus>
                <pageplus>PAGEPLUS</pageplus>
        </remote>
</lircmap>

Перезагружаем LIRC, и наслаждаемся!

P.S. В ходе использования обнаружилось, что у пульта ИК-диод с очень малым углом обзора - чтобы уверенно принимался сигнал, пульт приходится направлять ровно в приёмник. Возможно придётся менять ИК-диод…