Коротко - все работает. И работает правильно.
Прочитайте ниже вот.
Пульт видится системой как обычное устройство ввода /dev/input/eventX (где X номер устройства). Как своеобразная клавиатура. У других аналогичных тюнеров также.
В Линуксе есть hardware-коды клавиш, и системные коды клавиатурных событий (константы).
Так вот hardware-коды клавиш преобразуются в системные константы на основе неких таблиц (расскладок). Для клавиатур все это уже давно отлаженно, прозрачно, и подгружается динамически.
Значения констант-событий могут быть 4-х байтные. А вот многими программами воспринимаются только 1 байт!.
Для пультов тоже есть такие таблицы, но они внесены жестко в модули ядра. Для каждого типа тюнеров отдельно.
Для Beholder тоже такая таблица (в патче видно). И там анаогично другим тюнерам задано преобразование.
Многие кнопки (цифры например) на пульте преобразуются в 1-байтовые констаты-события, а некоторые (СH-каналы например) в многобайтные.
В этом как раз и проблемка.
И конечно программы (tvtime,lirc,X-ы) не понимает такие значения-события.
Выхода решения два:
1) применять пакет lirc с настройкой на драйвер dev/input и соответсвуюшим lircd-конфигом. Как настроить lirc читайте сами (или ниже, я дописал для новичков), тем более это легко и везде описано.
Готовый файл
lircd.conf
2) с помощью программы input--kbd (из пакета input-utils) на старте динамически изменять "расскладку" пульта, так чтобы не было многобайтных клавиатурных событий от пульта.
примерно вот так
input-kbd -f /etc/input-kbd/beholder `cat /proc/bus/input/devices | grep -2 "i2c-.*/.*/ir0" | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'` >/dev/null 2>&1
расположить можно в /etc/rc.d/rc.local или где еще в зависимости от дистрибутива.
Файлы
-
файл beholder для input-kbd
-
пакет input-utils
Возможно надо так же четко указать чтобы программы не захватывали устройство пульта как еще одну клавиатуру. в Ubunru 9.04 (и не только был такой недочет, но временный). Об этом я тоже писал на форуме
http://www.beholder.ru/bb/viewtopic.php?p=48076#48076
Надо создать файл
/mnt/files/linux/etc/hal/fdi/lirc.fdi и в нем вот такое:
Код:
<xml>
<deviceinfo>
<device>
<match>
<merge>true</merge>
</match>
</device>
</deviceinfo>
И перегрузитесь (так проще).
Настройка lircd - предположим у вас сделано вот так (для Ubuntu/Debian):
файл
/etc/lirc/hardware.conf и в нем строки
REMOTE="BeholdTV"
REMOTE_MODULES=""
REMOTE_DRIVER="dev/input"
REMOTE_DEVICE=""
REMOTE_LIRCD_CONF="
generic/devinput.conf"
REMOTE_LIRCD_ARGS="
-d name="*BeholdTV*""
START_LIRCD="true"
LOAD_MODULES="false"
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""
LIRCMD_CONF=""
файл
/etc/lircd.conf и
/etc/lirc/lircd.conf и в них только вот эта значимая строка
include "/usr/share/lirc/remotes/generic/devinput.conf"
Поясню выделенное красным. Так как в таблице кодов в моделе-драйвере используются только коды-константы ядра линукса, то они же определенны все в файле
/usr/share/lirc/remotes/generic/devinput.conf который и нужно указать.
Если все же по какой-то причине (не знаю какой) вы решите иметь свой
/etc/lirc/lircd.conf то надо пользоваться утилитой irrecord вызывая ее вот так
irrecord -H dev/input -d name="*BeholdTV*" /etc/lirc/lircd.conf
Следуем указаниям на экране и нажимаем на кнопки, заполняя названия их,
Конечно сам демон-служба lirc должен быть остановлен в это время.
sudo /etc/init.d/lirc stop
Этот способ я лично не рекомендую с современными тюнерами где коды кнопок в таблице все равно имеют значение из ядра линукс, вообщем с устройствами типа dev/input
Чтобы оттестировать нужно запустить lircd в режиме терминала. Для этого нужно (первая команда спросит ваш пароль):
sudo -i
lircd --driver=devinput -d name="*BeholdTV*" --nodaemon
и смотрите на вывод строк в терминале. И запустите рядом в соседнем терминале сразу irw и нажимайте кнопки.