Tweaking Remote Control (In-Kernel LIRC)
Я недавно перестроил свой MythTV box, используя Mythbuntu 12.04, чтобы использовать преимущества более нового оборудования (Ivy Bridge).
На моей предыдущей сборке я использовал lirc
управлять пультом, т. е. сопоставлением кодов клавиш -> нажатий клавиш -> ключей приложений; это было непростое путешествие, чтобы выучить все это, и я в конце концов почувствовал, как все это работает.
Что я имею:
- У меня есть дешевый пульт Chinavasion и USB-ключ, о котором я нашел несколько статей; в основном это связано с работой с XBMC (интересно, но я не думаю, что это применимо напрямую), а также с получением пульта Harmony для работы (это Chinavasion CVSB-983 - очень полезный, поскольку мне это нужно для работы моего Harmony 900),
- Mythbuntu 12.04 64-bit
- MythTV 0.25 (вероятно, не имеет значения)
Как это сейчас
Когда я подключаю это, это "просто работает". Это замечательно, за исключением того, что Ubuntu использует его изначально и предотвращает попадание некоторых нажатий кнопок в Myth. Например, я могу послать кнопку с пульта дистанционного управления, которая соответствует Ctrl-Alt-A (которую я предполагаю, что Ubuntu не заинтересован), а затем перехватить ее в Mythfrontend, но кнопка Play на пульте дистанционного управления перехватывается Ubuntu (которая отображает большой круг с линией, так как нет загруженного медиа-плеера).
Я понимаю, что это потому, что lirc теперь объединен с ядром, и мне это нравится.
Что я сделал до сих пор:
Нашел устройство используя lsusb
:
$ lsusb
Bus 001 Device 004: ID 073a:2230 Chaplet Systems, Inc. infrared dongle for remote
Найден номер устройства события:
$ cat /proc/bus/input/devices
I: Bus=0003 Vendor=073a Product=2230 Version=0110
N: Name="HID 073a:2230"
P: Phys=usb-0000:00:1a.0-1.2/input0
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input5
U: Uniq=
H: Handlers=sysrq kbd mouse1 event5 js0
B: PROP=0
B: EV=10001f
B: KEY=4c37fff072ff32d bf54445600000000 ffffffffff 30c100b17c007 ffa67bfad951dfff febeffdfffefffff fffffffffffffffe
B: REL=343
B: ABS=100030000
B: MSC=10
Протестировал вход с evtest
(Я нажал Play):
$ sudo evtest /dev/input/event5
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x73a product 0x2230 version 0x110
Input device name: "HID 073a:2230"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
<------------snipped lots of 'Event code' lines------------>
Testing ... (interrupt to exit)
Event: time 1336435683.230656, -------------- SYN_REPORT ------------
Event: time 1336435683.246648, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00cd
Event: time 1336435683.246652, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1336435683.246655, -------------- SYN_REPORT ------------
проверенный showkey
снова для клавиши Play:
$ sudo showkey -s
kb mode was RAW
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]
press any key (program terminates 10s after last keypress)...
0xe0 0x22 0xe0 0xa2
Что я хочу:
- Я хотел бы просканировать входящие нажатия кнопок, если описанный выше метод неверен.
- Я хотел бы либо переназначить каждое нажатие кнопки на что-то, что Ubuntu/Unity будет игнорировать, либо даже лучше передать нажатие клавиши непосредственно Мифу (я подозреваю, что это позже возможно только с lirc, но я могу ошибаться).
- Я действительно хотел бы сделать это с драйверами в ядре, то есть без явной загрузки lirc; если так будет развиваться мир, я бы лучше нашел способ сопоставить текущее поведение с тем, что я хочу, вместо навязывания "старой" схемы загрузки lirc вне ядра. Изучение чего-то нового также стоит!
Моя догадка:
Я предполагаю, что это потребует использования setkeycodes
, но не смогли найти достаточно информации для настройки этого.
Любая помощь с благодарностью!
2 ответа
Я только что прошел подобный путь, открывая новый встроенный в ядро lirc, для меня момент ах-ха был, когда я понял, что пульт дистанционного управления теперь просто еще одна клавиатура.
В качестве альтернативы showkey / evtest вы можете запустить sudo ir-keytable -t для обнаружения удаленных нажатий кнопок. Хотя я не думаю, что он предлагает слишком много новой информации.
Чтобы настроить отображение кодов удаленного сканирования на ключи, вам нужно создать свой собственный файл конфигурации, основанный на одном из / lib / udev / rc_keymaps /.
Используя вывод evtest, вы можете использовать поля KEY_X и value, чтобы помочь определить, какой файл rc_keymaps используется. Скопируйте этот соответствующий файл и отредактируйте, чтобы переназначить ключи по своему желанию. Вы можете загрузить измененную конфигурацию с помощью sudo ir-keytable -c -w newfile. Теперь вы можете протестировать новую конфигурацию с помощью evtest.
Если вы не можете получить достаточную гибкость от изменения раскладок клавиш, вы все равно можете использовать демон userpace lirc. Вы можете настроить lircd для извлечения из драйвера в ядре, а затем настроить lircd как обычно.
Эти две ссылки, http://forum.xbmc.org/showthread.php?tid=104541 и http://ubuntuforums.org/showthread.php?t=1754719, содержат много информации о том, как настроить и отладить любую установку.,
Кнопка Play на пульте дистанционного управления используется media-keys
плагин для gnome-settings-daemon. Чтобы отключить его и разрешить MythTV получать событие, выполните:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys active false
Также вы захотите отключить / удалить xfce4-Volumed для предотвращения его перехвата XF86AudioLowerVolume
, XF86AudioRaiseVolume
а также XF86AudioMute
,
Возможно, вы захотите переназначить также некоторые ключи оконного менеджера (например, в моем случае Ctrl+Alt+D используется для запуска Live TV, а xfwm4 использует его для действия show_desktop). Это можно сделать в "Настройки> Диспетчер окон", вкладка "Клавиатура".
Кроме того, вы можете включить элемент управления "Мышь" для отправки событий клавиатуры, используя скрипт mythtv-mouse2kbd.py, который я описал в своем блоге.