Заводим пульт Gotview в XBMC

Опубликовано

Итак, имеем мультимедийный пульт Gotview с функцией выключения компьютера, подключается к USB-разъему и в разрыв провода от кнопочки Power на корпусе. На пульте 41 клавиша, из которых одна - хардварный power и одна - toggle - переключение пульта из режима клавиатуры в режим мышки и обратно, т.е. использовать в итоге можно 39.

В принципе пультик системой определяется и работает, но в XBMC удается использовать только 7 кнопок, что естественно нас не устраивает, надо использовать все.
Ну что же, попытаемся его завести.

Для начала посмотрим кто это

htpc@htpc:~$ lsusb
....
Bus 004 Device 002: ID 0419:0001 Samsung Info. Systems America, Inc. IrDA Remote Controller / Creative Cordless Mouse
....

И еще вот так

htpc@htpc:~$ cat /proc/bus/input/devices
.....
I: Bus=0003 Vendor=0419 Product=0001 Version=0100
N: Name="HOLTEK USB Keyboard"
P: Phys=usb-0000:00:12.1-3/input0
S: Sysfs=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.0/input/input4
U: Uniq=
H: Handlers=sysrq kbd event4
B: PROP=0
B: EV=120013
B: KEY=e080ffdf01cfffff fffffffffffffffe
B: MSC=10
B: LED=1f

I: Bus=0003 Vendor=0419 Product=0001 Version=0110
N: Name="HOLTEK USB Keyboard"
P: Phys=usb-0000:00:12.1-3/input1
S: Sysfs=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.1/input/input5
U: Uniq=
H: Handlers=kbd mouse1 event5
B: PROP=0
B: EV=17
B: KEY=40000000000000 0 70000 0 5878d811cc00 1e000000000000 0
B: REL=103
B: MSC=10
.....

И еще вот так чтобы совсем уже все узнать

htpc@htpc:~$ udevadm info -q all -n /dev/input/event4
P: /devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.0/input/input4/event4
N: input/event4
S: input/by-id/usb-HOLTEK_USB_Keyboard-event-kbd
S: input/by-path/pci-0000:00:12.1-usb-0:3:1.0-event-kbd
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.0/input/input4/event4
E: MAJOR=13
E: MINOR=68
E: DEVNAME=/dev/input/event4
E: SUBSYSTEM=input
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_VENDOR=HOLTEK
E: ID_VENDOR_ENC=HOLTEK
E: ID_VENDOR_ID=0419
E: ID_MODEL=USB_Keyboard
E: ID_MODEL_ENC=USB\x20Keyboard
E: ID_MODEL_ID=0001
E: ID_REVISION=0000
E: ID_SERIAL=HOLTEK_USB_Keyboard
E: ID_TYPE=hid
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030101:030102:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usbhid
E: ID_PATH=pci-0000:00:12.1-usb-0:3:1.0
E: ID_PATH_TAG=pci-0000_00_12_1-usb-0_3_1_0
E: XKBMODEL=pc105
E: XKBLAYOUT=us,ru<
E: XKBVARIANT=,
E: XKBOPTIONS=grp:alt_shift_toggle,grp_led:scroll
E: DEVLINKS=/dev/input/by-id/usb-HOLTEK_USB_Keyboard-event-kbd /dev/input/by-path/pci-0000:00:12.1-usb-0:3:1.0-event-kbd

htpc@htpc:~$ udevadm info -q all -n /dev/input/event5
P: /devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.1/input/input5/event5
N: input/event5
S: input/by-id/usb-HOLTEK_USB_Keyboard-event-mouse
S: input/by-id/usb-HOLTEK_USB_Keyboard-if01-event-mouse
S: input/by-path/pci-0000:00:12.1-usb-0:3:1.1-event-mouse
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.1/input/input5/event5
E: MAJOR=13
E: MINOR=69
E: DEVNAME=/dev/input/event5
E: SUBSYSTEM=input
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_INPUT_KEY=1
E: ID_VENDOR=HOLTEK
E: ID_VENDOR_ENC=HOLTEK
E: ID_VENDOR_ID=0419
E: ID_MODEL=USB_Keyboard
E: ID_MODEL_ENC=USB\x20Keyboard
E: ID_MODEL_ID=0001
E: ID_REVISION=0000
E: ID_SERIAL=HOLTEK_USB_Keyboard
E: ID_TYPE=hid
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030101:030102:
E: ID_USB_INTERFACE_NUM=01
E: ID_USB_DRIVER=usbhid
E: ID_PATH=pci-0000:00:12.1-usb-0:3:1.1
E: ID_PATH_TAG=pci-0000_00_12_1-usb-0_3_1_1
E: XKBMODEL=pc105
E: XKBLAYOUT=us,ru
E: XKBVARIANT=,
E: XKBOPTIONS=grp:alt_shift_toggle,grp_led:scroll
E: DEVLINKS=/dev/input/by-id/usb-HOLTEK_USB_Keyboard-event-mouse /dev/input/by-id/usb-HOLTEK_USB_Keyboard-if01-event-mouse /dev/input/by-path/pci-0000:00:12.1-usb-0:3:1.1-event-mouse

Узнали мы вполне достаточно кстати, этого нам хватит для начала, чтобы рассказать демону udev всегда давать нашему пульту одинаковое название. Для этого нужно создать правило, нам понадобятся значения Vendor, Product, MINOR и MAJOR, которые мы можем почерпнуть из вывода команд выше, в итоге получаем вот такие правила

SUBSYSTEM=="input",ATTRS{idVendor}=="0419",ATTRS{idProduct}=="0001",ATTR{dev}=="13:68",SYMLINK="input/irremote0"
SUBSYSTEM=="input",ATTRS{idVendor}=="0419",ATTRS{idProduct}=="0001",ATTR{dev}=="13:69",SYMLINK="input/irremote1"

Записываем их в /etc/udev/rules.d/10-irremote.rules, после чего рестартуем udev

service udev restart

и дергаем триггер чтобы заново распознать девайсы

udevadm trigger

А можно и просто компьютер перезагрузить. После этого проверяем, а не появились ли у нас новые девайсы для ввода

ls -la /dev/input

должно стать на две симлинки больше, примерно так

htpc@htpc:~$ ls -la /dev/input/
итого 0
drwxr-xr-x  4 root root    320 2012-01-25 20:26 .
drwxr-xr-x 15 root root   4420 2012-01-25 20:26 ..
drwxr-xr-x  2 root root    240 2012-01-25 20:26 by-id
drwxr-xr-x  2 root root    180 2012-01-25 20:26 by-path
crw-r-----  1 root root 13, 64 2012-01-25 20:26 event0
crw-r-----  1 root root 13, 65 2012-01-25 20:26 event1
crw-r-----  1 root root 13, 66 2012-01-25 20:26 event2
crw-r-----  1 root root 13, 67 2012-01-25 20:26 event3
crw-r-----  1 root root 13, 68 2012-01-25 20:26 event4
crw-r-----  1 root root 13, 69 2012-01-25 20:26 event5
crw-r--r--  1 root root 13, 70 2012-01-25 20:26 event6
lrwxrwxrwx  1 root root      6 2012-01-25 20:26 irremote0 -> event4
lrwxrwxrwx  1 root root      6 2012-01-25 20:26 irremote1 -> event5
crw-r-----  1 root root 13, 63 2012-01-25 20:26 mice
crw-r-----  1 root root 13, 32 2012-01-25 20:26 mouse0
crw-r-----  1 root root 13, 33 2012-01-25 20:26 mouse1

Теперь устанавливаем и настраиваем LIRC

sudo apt-get install lirc inputlirc

Конфигуратор LIRC задаст два вопросы, на оба надо ответить "None", после этого нам потребуется заполнить пару конфигов, сначала hardware.conf

htpc@htpc:~$ vi /etc/lirc/hardware.conf

он должен иметь вот такой вид

REMOTE="None"
REMOTE_MODULES=""
REMOTE_DRIVER=""
REMOTE_DEVICE="phys=""
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS=""
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""
START_LIRCD="false"
LOAD_MODULES="true"
LIRCMD_CONF=""
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""

теперь следующий конфиг - inputlirc

vi /etc/defaults/inputlirc

здесь должно быть так

EVENTS="/dev/input/irremote0 /dev/input/irremote1"
OPTIONS="-g -m 0 -c"

следующий - /etc/lircd/lircd.conf - надо сделать полностью пустым.

Теперь рестартуем inpitlirc и можем проверять результаты первой части работы с помощью irw

service inputlirc restart

Если все сделано верно, то вывод irw будет примерно таким

htpc@htpc:~$ irw
f 0 KEY_TAB /dev/input/irremote0
6c 0 KEY_DOWN /dev/input/irremote0
67 0 KEY_UP /dev/input/irremote0
1c 0 KEY_ENTER /dev/input/irremote0
69 0 KEY_LEFT /dev/input/irremote0
1c 0 KEY_ENTER /dev/input/irremote0
72 0 KEY_VOLUMEDOWN /dev/input/irremote1
73 0 KEY_VOLUMEUP /dev/input/irremote1

Если вывод такой, можно считать подготовительный этап завершенным и переходить к настройке XBMC. Она сводится к составлению конфигурационного файла - Lircmap.xml, в котором команды XBMC приводятся в соответствие кодам клавиш пульта. В моем случае этот файл выглядит вот так


        
                KEY_VOLUMEUP
                KEY_VOLUMEDOWN
                KEY_MUTE
                KEY_BACK
        
        
                CTRL_SHIFT_ALT_KEY_2
                CTRL_SHIFT_ALT_KEY_H
                ALT_KEY_F4
                CTRL_SHIFT_ALT_KEY_3
                CTRL_SHIFT_ALT_KEY_4
                CTRL_SHIFT_ALT_KEY_5               
CTRL_SHIFT_ALT_KEY_1




                KEY_LEFT
                KEY_RIGHT
                KEY_UP
                KEY_DOWN               
                KEY_TAB
                CTRL_KEY_B
                CTRL_KEY_P
                CTRL_KEY_F
                CTRL_SHIFT_KEY_B
                CTRL_KEY_S
                CTRL_SHIFT_KEY_F
                CTRL_SHIFT_ALT_KEY_HOME
                KEY_PAGEUP
                KEY_PAGEDOWN
                CTRL_KEY_R
                KEY_1
                KEY_2
                KEY_3
                KEY_4
                KEY_5
                KEY_6
                KEY_7
                KEY_8
                KEY_9
                CTRL_SHIFT_ALT_KEY_F
                KEY_0
                CTRL_SHIFT_ALT_KEY_B
        

Полученный файл надо поместить в ~/.xbmc/userdata/ после чего запустить XBMC и пользоваться.

Теперь кратко о том как пользоваться. Кнопочки tv/vdr, music, pictures, videos вызывают соответствующие разделы XBMC. Кнопочка close очищает поля форм. Кнопочка dvd/menu вызывает контекстное меню. Стрелочки, естественно, отвечают за перемещение по меню, кнопка Back возвращает назад, кнопка Ok осуществляет выбор элементов. Кнопка Tab переключает в полноэкранный режим и обратно. Кнопка c домиком в полноэкранном режиме вызывает элементы управления, а в обычном переводит пользователя на главный экран XBMC. Play, Stop, Rec и перемотки, а так же vol+/-, mute, ch+/- делают именно то, что на них написано. Кнопочка shuffle отправляет выделенный элемент списка в текущий плейлист, а кнопка repeat переключает звуковые дорожки у фильмов и телеканалов.

Вообще это не единственный способ настройки. Изначально пульт посылает комбинации клавиш, да это видно и по кодам выдаваемым irw, вполне можно было внести изменения в keyboard.xml, но по-моему это было бы сложнее.

Обновление:

В указанной схеме во время использования выявился ряд недостатков. Так при подключении дополнительных девайсов (геймпадов, дэнспадов), нумерация стала съезжать и в результате не создавались нужные ссылочки irremote*. В итоге я привел конфиг Inputlirc вот к такому виду

EVENTS="/dev/input/by-id/usb-HOLTEK_USB_Keyboard-event-kbd /dev/input/by-id/usb-HOLTEK_USB_Keyboard-if01-event-mouse"
OPTIONS="-g -m 0 -c"

По моим наблюдениям эти линки не меняются, как бы то ни было проблема нерабочего пульта решилась.