I ran some tests with 7.95.2 but unfortunatley couldn't reproduce the issue locally. But I have a few more things for you to try to narrow down the issue.
First of all, the --release=XXX settings of lircd and lircd-uinput have to match, otherwise we get repeating keys. lircd defaults to no release lirc event, lircd-uinput defaults to _UP.
The --release option of eventlircd can be dropped though, kodi doesn't seem to know what to do with that.
For testing, install the system tools addon (in the LibreELEC programs addon catetory), that'll give you evtest (you can also use ir-keytable to monitor input events but you need to know which input event device to monitor - evtest will display a nice list on startup you can select from).
Then, stop kodi, eventlircd, lircd and lircd-uinput: and verify they are really gone (stopping lircd via systemctl doesn't seem to work, therefore killall was needed):
LibreELEC:~ # systemctl stop kodi
LibreELEC:~ # systemctl stop eventlircd
LibreELEC:~ # systemctl stop lircd-uinput@lirc0
LibreELEC:~ # systemctl stop lircd@lirc0
LibreELEC:~ # killall lircd
LibreELEC:~ # ps | grep lirc
590 root 0:00 grep lirc
Now start lircd manually. I did this via the following command line (you need to use /etc/lirc/lircd.conf.rpi as a configuration file):
LibreELEC:~ # /usr/sbin/lircd --loglevel=debug --release=_UP --nodaemon --driver=default --device=/dev/lirc0 --output=/run/lirc/lircd-lirc0 --pidfile=/run/lirc/lircd-lirc0.pid /storage/.config/lircd.conf
Warning: cannot open /etc/lirc/lirc_options.conf
lircd-0.9.4c[592]: Debug: lircd: Opening log, level: Debug
lircd-0.9.4c[592]: Warning: Running as root
lircd-0.9.4c[592]: Info: Using remote: hauppaugeHias.
lircd-0.9.4c[592]: Notice: lircd(default) ready, using /run/lirc/lircd-lirc0
In another terminal verify that lircd is running correctly. Start irw, press a few keys and then stop irw with ctrl-c
LibreELEC:~ # irw /run/lirc/lircd-lirc0
0000000000001797 00 KEY_RIGHT hauppaugeHias
0000000000001797 00 KEY_RIGHT_UP hauppaugeHias
0000000000001797 00 KEY_RIGHT hauppaugeHias
0000000000001797 00 KEY_RIGHT_UP hauppaugeHias
0000000000001797 00 KEY_RIGHT hauppaugeHias
0000000000001797 01 KEY_RIGHT hauppaugeHias
0000000000001797 02 KEY_RIGHT hauppaugeHias
0000000000001797 03 KEY_RIGHT hauppaugeHias
0000000000001797 04 KEY_RIGHT hauppaugeHias
0000000000001797 00 KEY_RIGHT_UP hauppaugeHias
Display More
The count (second value) should go up if you hold down the key and it's repeating. When releasing the key you should see a "virtual" release key with the KEYNAME_UP event (_UP as configured with --release=_UP)
If that's working fine, stop irw and run lircd-uinput. Again press some keys:
LibreELEC:~ # /usr/sbin/lircd-uinput --loglevel=debug --release=_UP /run/lirc/lircd-lirc0
Warning: cannot open /etc/lirc/lirc_options.conf
lircd-0.9.4c[614]: Debug: lircd-uinput: Opening log, level: Debug
lircd-0.9.4c[614]: Info: Reading data from /run/lirc/lircd-lirc0, writing to /dev/uinput
lircd-0.9.4c[614]: Info: Using "_UP" as release suffix
lircd-0.9.4c[614]: Debug: Sending KEY_RIGHT as 106:1
lircd-0.9.4c[614]: Debug: Sending KEY_RIGHT as 106:1
lircd-0.9.4c[614]: Debug: Sending KEY_RIGHT as 106:1
lircd-0.9.4c[614]: Debug: Sending KEY_RIGHT as 106:1
lircd-0.9.4c[614]: Debug: Sending KEY_RIGHT as 106:1
lircd-0.9.4c[614]: Debug: Sending KEY_RIGHT_UP as 106:0
Display More
Here note that event code at the end: 106:1 means keycode 106, pressed, 106:0 means released.
If the --release setting doesn't match the one from lircd lircd-uinput won't generate a input release event, resulting in endlessly repeating keys.
You can verify that using evtest. With lircd and lircd-uinput both set to _UP you should get this:
LibreELEC:~ # evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Logitech K400
/dev/input/event1: lircd-uinput
Select the device event number [0-1]: 1
... <long info about supported events/keys snipped>
Event: time 1486155190.776951, type 20 (EV_REP), code 0 (REP_DELAY), value 1000
Event: time 1486155190.776951, type 1 (EV_KEY), code 106 (KEY_RIGHT), value 1
Event: time 1486155190.776951, -------------- SYN_REPORT ------------
Event: time 1486155191.788824, type 1 (EV_KEY), code 106 (KEY_RIGHT), value 2
Event: time 1486155191.788824, -------------- SYN_REPORT ------------
Event: time 1486155191.825485, type 1 (EV_KEY), code 106 (KEY_RIGHT), value 2
Event: time 1486155191.825485, -------------- SYN_REPORT ------------
Event: time 1486155191.862150, type 1 (EV_KEY), code 106 (KEY_RIGHT), value 2
Event: time 1486155191.862150, -------------- SYN_REPORT ------------
Event: time 1486155191.898815, type 1 (EV_KEY), code 106 (KEY_RIGHT), value 2
Event: time 1486155191.898815, -------------- SYN_REPORT ------------
Event: time 1486155191.935483, type 1 (EV_KEY), code 106 (KEY_RIGHT), value 2
Event: time 1486155191.935483, -------------- SYN_REPORT ------------
Event: time 1486155191.953290, type 1 (EV_KEY), code 106 (KEY_RIGHT), value 0
Event: time 1486155191.953290, -------------- SYN_REPORT ------------
Display More
value 1 (at the very end) means initial keypress, 2 is repeating keypress, 0 is release.
In the snipped part evtest reports all the key/eventcodes it'll handle, but doesn't show a symbolic name for keycode 614 decimal / 0x266 hex etc - evtest seems to be too old to know about these.
Doing the same test with ir-keytable instead of evtest results in this output:
LibreELEC:~ # ir-keytable -d /dev/input/event1 -t
Testing events. Please, press CTRL-C to abort.
1486155236.010594: event type EV_KEY(0x01) key_down: KEY_RIGHT(0x0001)
1486155236.010594: event type EV_SYN(0x00).
1486155237.015482: event type EV_KEY(0x01) key_down: KEY_RIGHT(0x0001)
1486155237.015482: event type EV_SYN(0x00).
1486155237.052144: event type EV_KEY(0x01) key_down: KEY_RIGHT(0x0001)
1486155237.052144: event type EV_SYN(0x00).
1486155237.074032: event type EV_KEY(0x01) key_up: KEY_RIGHT(0x0001)
1486155237.074032: event type EV_SYN(0x00).
It's basically the same output like with evtest, but the press/hold/release value isn't reported.
Once we've verified that lircd-uinput is working correctly we can bring eventlircd into play. Let's do that without the --release option first:
LibreELEC:~ # /usr/sbin/eventlircd -f -vvv --evmap=/etc/eventlircd.d --socket=/run/lirc/lircd
eventlircd[648]: input device /dev/input/event1: events of unsupported event type EV_REP will be discarded
eventlircd[648]: input device /dev/input/event1: grabbed
eventlircd[648]: input device /dev/input/event1: created output event device
Now let's verify with irw that eventlircd correctly translates the input events into lirc events:
LibreELEC:~ # irw /run/lirc/lircd
6a 0 KEY_RIGHT devinput
6a 1 KEY_RIGHT devinput
6a 2 KEY_RIGHT devinput
6a 3 KEY_RIGHT devinput
6a 4 KEY_RIGHT devinput
6a 5 KEY_RIGHT devinput
6a 6 KEY_RIGHT devinput
6a 7 KEY_RIGHT devinput
6a 8 KEY_RIGHT devinput
6a 0 KEY_RIGHT devinput
6a 1 KEY_RIGHT devinput
6a 2 KEY_RIGHT devinput
6a 3 KEY_RIGHT devinput
6a 4 KEY_RIGHT devinput
6a 5 KEY_RIGHT devinput
6a 6 KEY_RIGHT devinput
6a 7 KEY_RIGHT devinput
6a 8 KEY_RIGHT devinput
Display More
Here I pressed right two times for a longer period. During repeats the second value counts up, after release the next keypress with start with count 0 (here it counted from 0-8 two times).
If you start eventlircd with the --release option you should also get the "virtual" lirc up events (here I used _UP_FROM_EVENTLIRCD just to make it clear where they are coming from):
LibreELEC:~ # /usr/sbin/eventlircd -f -vvv --evmap=/etc/eventlircd.d --socket=/run/lirc/lircd --release=_UP_FROM_EVENTLIRCD
eventlircd[657]: input device /dev/input/event1: events of unsupported event type EV_REP will be discarded
eventlircd[657]: input device /dev/input/event1: grabbed
eventlircd[657]: input device /dev/input/event1: created output event device
LibreELEC:~ # irw /run/lirc/lircd
6a 0 KEY_RIGHT devinput
6a 1 KEY_RIGHT devinput
6a 2 KEY_RIGHT devinput
6a 0 KEY_RIGHT_UP_FROM_EVENTLIRCD devinput
Please repeat these steps and compare the output with mine. Then repeat the test with lircd and lircd-uinput both started with --release=_FAKEUP (or something like that that's not _UP). Please post all the outputs so I can also have a closer look at them.
so long,
Hias