Спустя примерно 8 лет после покупки у китайцев наконец-то приспособил этот копеечный пульт для управления прыщами.
https://tinystash.undef.im/il/nr1Hk3aAV83djxkfWWu1QPQcR1Gk2TXV2BskfaRM1YLZshXcbq1PH523yVjkA6jres46q9sUqa9ZnS4ommFdmZkjk68tyXeffxZFj5WRwkUi9.jpg
Внешне может отличаться (например, копировать MCE Remote), суть одна: представляются USB HID-устройствами (мышь и клавиатура), шлют пачку комбинаций кнопок (чтобы наверняка) на нажатие одной, что делает их практически неюзабельными. Сегодня мы попробуем это исправить, превратив клавиатуру в lirc-устройство.
1. Подключаем приёмник. Смотрим cat /proc/bus/input/devices. Ищем там своё устройство. В моём случае их два (клавиатура и мышь):
I: Bus=0003 Vendor=1d57 Product=ad02 Version=0110
N: Name="HID 1d57:ad02"
P: Phys=usb-0000:00:14.0-2/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/0003:1D57:AD02.0001/input/input2
...
H: Handlers=sysrq kbd event2 leds
...
I: Bus=0003 Vendor=1d57 Product=ad02 Version=0110
N: Name="HID 1d57:ad02"
P: Phys=usb-0000:00:14.0-2/input1
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.1/0003:1D57:AD02.0002/input/input3
...
H: Handlers=mouse0 event3
...
Выбираем то, что про клавиатуру (см. Handlers). Нам понадобится значение Sysfs (/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/0003:1D57:AD02.0001/input/input2).
Можно сразу запомнить VID/PID (Vendor=1d57 Product=ad02).
2. Теперь делаем (в -p подставить значение из предыдущего шага):
udevadm info -a -p /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/0003:1D57:AD02.0001/input/input2
Видим те же VID/PID:
ATTRS{idProduct}=="ad02"
ATTRS{idVendor}=="1d57"
Там же находим ATTRS{bInterfaceProtocol}=="01" (у второго устройства, которое прикидывается мышью, будет 02, так и будем их отличать).
3. Пишем udev-правило (подставив свои значения, конечно):
# /etc/udev/rules.d/99-irremote.rules
SUBSYSTEMS=="usb", ENV{.protocol}="$attr{bInterfaceProtocol}"
KERNEL=="event*", ATTRS{idVendor}=="1d57", ATTRS{idProduct}=="ad02", ENV{.protocol}=="01", SYMLINK="input/irremote"
4. udevadm control --reload, перевтыкаем устройство, смотрим /dev/input, должен появится симлинк /dev/input/irremote -> eventX.
5. Выключаем lirc.
6. Ставим вместо него https://github.com/gsliepen/inputlirc
7. Конфигурируем. См. https://manpages.debian.org/unstable/inputlirc/inputlircd.8.en.html#OPTIONS
Например, в дебиане правим /etc/default/inputlirc:
OPTIONS="-g -c -m 0"
EVENTS="/dev/input/irremote"
8. `systemctl restart inputlirc`. Теперь можно коннектиться к lirc-сокету (по умолчанию `/run/lirc/lircd` или `/var/run/lirc/lircd` в зависимости от системы) и получать команды.
9. Для эмуляции нажатия различных кнопок per application берём https://github.com/un-def/lip Кусок моего конфига:
[Default]
KEY_PLAYPAUSE: key XF86AudioPlay
KEY_VOLUMEUP: key XF86AudioRaiseVolume
KEY_VOLUMEDOWN: key XF86AudioLowerVolume
KEY_MUTE: key XF86AudioMute
KEY_PREVIOUS: key XF86AudioPrev
KEY_NEXT: key XF86AudioNext
KEY_UP: key Up
KEY_DOWN: key Down
KEY_LEFT: key Left
KEY_RIGHT: key Right
KEY_ENTER: key Return
KEY_ESC: key Escape
KEY_TAB: key Tab
KEY_FULLSCREEN: key f
KEY_CLOSE: key Alt+F4
KEY_PAGEUP: run i3-msg workspace next
KEY_PAGEDOWN: run i3-msg workspace prev
[mpv]
window_class: ^mpv$
KEY_PLAYPAUSE: key space
KEY_VOLUMEUP: key 0
KEY_VOLUMEDOWN: key 9
KEY_REW: key Left
KEY_FWD: key Right
KEY_F1: key numbersign ; audio
KEY_F2: key j ; subtitle
KEY_F4: key o ; info
[Spotify]
window_class: ^Spotify$
KEY_PLAYPAUSE: key space
KEY_PREVIOUS: key Ctrl+Left
KEY_NEXT: key Ctrl+Right
KEY_REW: key Shift+Left
KEY_FWD: key Shift+Right
```
#ir #remote #irremote #poorsmanremote #linux