the issues stems from libinput.
I've opened a bug report here https://gitlab.freedesktop.org/libinput/libin…work_items/1284
If you wish to add to it, please feel free
Posts by lusephur
-
-
the issue I had, and/or found was libinput tablet-pad misclassification, Kodi sees the remote as a tablet-pad. And no amount of wrngling would change it. This approach worked for me.
It's been updated a bit due to libreelec turning off bluetooth every 5 hours too. I'll post the full lot in the next postZidoo V12 Remote on LibreELEC/Kodi — Full Setup Guide
Background
The Zidoo V12 is a BLE (Bluetooth Low Energy) HID remote. On LibreELEC, libinput misclassifies the V12's keyboard input node (event10) as a tablet-pad device, causing Kodi to grab it but ignore all input. The solution bypasses libinput entirely using a Python daemon that reads event10 directly and forwards keypresses to Kodi via its JSON-RPC API.
Prerequisites
- LibreELEC installed and running
- Kodi webserver enabled: Settings → Services → Control → Allow remote control via HTTP
- Port: 8080
- Authentication: disabled
- V12 remote powered on and in pairing mode
Step 1: Pair the Remote
Codebluetoothctl agent on default-agent scan on # Wait for "Remote-V12" to appear and note the MAC address pair XX:XX:XX:XX:XX:XX trust XX:XX:XX:XX:XX:XX connect XX:XX:XX:XX:XX:XX exitQuoteThe MAC address for this remote is 25:04:27:11:28:95 — if re-paired it may change. Update all references accordingly.
Step 2: Configure BlueZ for HID Reconnection
/etc is read-only squashfs on LibreELEC. We override the bluetooth service via a systemd drop-in and point it at a writable config in /storage.
Code
Display More# Copy and edit the bluetooth config mkdir -p /storage/.config/bluetooth cat /etc/bluetooth/main.conf > /storage/.config/bluetooth/main.conf sed -i 's/#ReconnectUUIDs=.*/ReconnectUUIDs=00001124-0000-1000-8000-00805f9b34fb/' /storage/.config/bluetooth/main.conf sed -i 's/#ReconnectAttempts=7/ReconnectAttempts=7/' /storage/.config/bluetooth/main.conf sed -i 's/#ReconnectIntervals=1,2,4,8,16,32,64/ReconnectIntervals=1,2,4,8,16,32,64/' /storage/.config/bluetooth/main.conf # Override the bluetooth service to use our config mkdir -p /storage/.config/system.d/bluetooth.service.d cat > /storage/.config/system.d/bluetooth.service.d/configfile.conf << 'EOF' [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd --configfile=/storage/.config/bluetooth/main.conf EOF systemctl daemon-reload systemctl restart bluetoothVerify it worked:
Codeps | grep bluetoothd # Should show: /usr/lib/bluetooth/bluetoothd --configfile=/storage/.config/bluetooth/main.confStep 3: udev Rule
Tells libinput to ignore event10 entirely, preventing Kodi from grabbing it and leaving it free for our daemon.
Codemkdir -p /storage/.config/udev.rules.d cat > /storage/.config/udev.rules.d/99-zidoo-v12.rules << 'EOF' KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="Remote-V12 Keyboard", ENV{LIBINPUT_IGNORE_DEVICE}="1", TAG+="uaccess" EOF udevadm control --reload-rules udevadm triggerStep 4: The Daemon Script
Reads /dev/input/event10 directly via Python's struct module (no external dependencies) and forwards keypresses to Kodi's JSON-RPC API.
QuoteNote: Volume down is remapped by the kernel hwdb to KEY_COMMA (code 51) — this is a V12 firmware quirk, not a bug in the script. The yellow button (KEY_YELLOW / code 400) is not present on this remote's physical layout.
Code
Display Morecat > /storage/v12-remote.py << 'SCRIPT' #!/usr/bin/env python3 import struct import urllib.request import json import os import time import select DEVICE = "/dev/input/event10" KODI_URL = "http://localhost:8080/jsonrpc" EVENT_FORMAT = "llHHi" EVENT_SIZE = struct.calcsize(EVENT_FORMAT) EV_KEY = 1 KEY_PRESS = 1 KEY_MAP = { # Navigation 103: ("Input.Up", None), 108: ("Input.Down", None), 105: ("Input.Left", None), 106: ("Input.Right", None), 28: ("Input.Select", None), 158: ("Input.Back", None), 172: ("Input.Home", None), 127: ("Input.ContextMenu", None), 50: ("Input.ContextMenu", None), # Playback 164: ("Input.ExecuteAction", "playpause"), 166: ("Input.ExecuteAction", "stop"), 168: ("Input.ExecuteAction", "rewind"), 208: ("Input.ExecuteAction", "fastforward"), 439: ("Input.ExecuteAction", "repeat"), # Volume 115: ("Input.ExecuteAction", "volumeup"), 51: ("Input.ExecuteAction", "volumedown"), # KEY_COMMA — hwdb quirk 113: ("Input.ExecuteAction", "mute"), # Info / OSD / audio 23: ("Input.ExecuteAction", "info"), 24: ("Input.ExecuteAction", "osd"), 46: ("Input.ExecuteAction", "codecinfo"), 38: ("Input.ExecuteAction", "showsubtitles"), 392: ("Input.ExecuteAction", "audionextlanguage"), # Colour buttons 398: ("Input.ExecuteAction", "red"), 399: ("Input.ExecuteAction", "green"), 401: ("Input.ExecuteAction", "blue"), # Page 104: ("Input.ExecuteAction", "pageup"), 109: ("Input.ExecuteAction", "pagedown"), # Numbers 2: ("Input.ExecuteAction", "number1"), 3: ("Input.ExecuteAction", "number2"), 4: ("Input.ExecuteAction", "number3"), 5: ("Input.ExecuteAction", "number4"), 6: ("Input.ExecuteAction", "number5"), 7: ("Input.ExecuteAction", "number6"), 8: ("Input.ExecuteAction", "number7"), 9: ("Input.ExecuteAction", "number8"), 10: ("Input.ExecuteAction", "number9"), 11: ("Input.ExecuteAction", "number0"), 14: ("Input.ExecuteAction", "backspace"), } def kodi_rpc(method, params=None): payload = {"jsonrpc": "2.0", "method": method, "id": 1} if params: payload["params"] = params data = json.dumps(payload).encode() req = urllib.request.Request( KODI_URL, data=data, headers={"Content-Type": "application/json"} ) try: urllib.request.urlopen(req, timeout=2) except Exception: pass def wait_for_device(path): while not os.path.exists(path): time.sleep(1) def is_bt_connected(): try: result = os.popen("bluetoothctl info 25:04:27:11:28:95 2>/dev/null").read() return "Connected: yes" in result except Exception: return False print(f"Waiting for {DEVICE}...") wait_for_device(DEVICE) print(f"Opening {DEVICE}") while True: try: with open(DEVICE, "rb") as f: print("Device opened, listening...") while True: ready = select.select([f], [], [], 30) if not ready[0]: if not is_bt_connected(): print("BT disconnected, waiting for reconnect...") break continue data = f.read(EVENT_SIZE) if len(data) < EVENT_SIZE: break _, _, etype, code, value = struct.unpack(EVENT_FORMAT, data) if etype == EV_KEY and value == KEY_PRESS: mapping = KEY_MAP.get(code) if mapping: method, action = mapping print(f"Key {code} -> {method} {action or ''}") if action: kodi_rpc(method, {"action": action}) else: kodi_rpc(method) except PermissionError: print("Permission denied") time.sleep(5) except Exception as e: print(f"Error: {e}, retrying...") time.sleep(2) wait_for_device(DEVICE) time.sleep(2) SCRIPT chmod +x /storage/v12-remote.pyStep 5: Daemon Service
Code
Display Morecat > /storage/.config/system.d/v12-remote.service << 'EOF' [Unit] Description=Zidoo V12 Remote Control daemon After=network.target [Service] Type=simple ExecStart=/usr/bin/python3 /storage/v12-remote.py Restart=always RestartSec=5 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable v12-remote systemctl start v12-remoteStep 6: Boot Connect Service
Connects the remote automatically at boot without blocking the boot sequence. The & backgrounds the bluetoothctl call so boot continues immediately.
Code
Display Morecat > /storage/.config/system.d/bt-connect-boot.service << 'EOF' [Unit] Description=Connect V12 remote at boot After=network.target [Service] Type=oneshot ExecStartPre=/bin/sleep 10 ExecStart=/bin/bash -c 'bluetoothctl connect 25:04:27:11:28:95 &' RemainAfterExit=no [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable bt-connect-boot.serviceStep 7: Bluetooth Watchdog
Detects and recovers from BlueZ lockups and dropped connections. Runs every 2 minutes. Only intervenes if event10 is missing or the daemon has died.
Code
Display Morecat > /storage/bt-reconnect.sh << 'EOF' #!/bin/bash REMOTE_MAC="25:04:27:11:28:95" # If event10 exists and v12-remote is running, everything is fine if [ -e /dev/input/event10 ] && systemctl is-active --quiet v12-remote; then exit 0 fi echo "Remote input lost, attempting recovery..." # Restart bluetooth if bluetoothctl is unresponsive if ! bluetoothctl show > /dev/null 2>&1; then echo "BlueZ unresponsive, restarting..." systemctl restart bluetooth sleep 5 fi # Try to reconnect bluetoothctl connect $REMOTE_MAC sleep 5 # Restart the daemon systemctl restart v12-remote EOF chmod +x /storage/bt-reconnect.sh cat > /storage/.config/system.d/bt-reconnect.service << 'EOF' [Unit] Description=Bluetooth reconnect watchdog [Service] Type=oneshot ExecStart=/bin/bash /storage/bt-reconnect.sh StandardOutput=journal StandardError=journal EOF cat > /storage/.config/system.d/bt-reconnect.timer << 'EOF' [Unit] Description=Bluetooth reconnect watchdog timer [Timer] OnBootSec=60 OnUnitActiveSec=2min [Install] WantedBy=timers.target EOF systemctl daemon-reload systemctl enable bt-reconnect.timer systemctl start bt-reconnect.timerVerification
Code# Check all services are running systemctl status v12-remote systemctl status bt-reconnect.timer systemctl status bt-connect-boot.service # Watch the daemon live journalctl -u v12-remote -f # Check watchdog history journalctl -u bt-reconnect.service --since "1 hour ago"Troubleshooting
Symptom Check Fix Remote not responding after boot ls /dev/input/event10 Wait 10–15s, or bluetoothctl connect 25:04:27:11:28:95 Daemon not running systemctl status v12-remote systemctl restart v12-remote BlueZ unresponsive bluetoothctl show returns nothing systemctl restart bluetooth Wrong event node cat /proc/bus/input/devices | grep -A2 "V12" Update DEVICE in v12-remote.py bluetoothd missing --configfile ps | grep bluetoothd Re-apply Step 2 File Summary
File Purpose /storage/.config/bluetooth/main.conf BlueZ config with HID reconnect UUIDs /storage/.config/system.d/bluetooth.service.d/configfile.conf Systemd drop-in to pass --configfile to bluetoothd /storage/.config/udev.rules.d/99-zidoo-v12.rules udev rule to hide event10 from libinput /storage/v12-remote.py Main daemon script /storage/.config/system.d/v12-remote.service Systemd service for the daemon /storage/.config/system.d/bt-connect-boot.service Boot-time connect service /storage/bt-reconnect.sh Watchdog script /storage/.config/system.d/bt-reconnect.service Watchdog service unit /storage/.config/system.d/bt-reconnect.timer Watchdog timer (every 2 min) Notes
- All config lives in /storage and survives LibreELEC updates and reboots
- /etc is read-only squashfs — never edit it directly
- event10 = Remote-V12 Keyboard, event11 = Remote-V12 Mouse
- BlueZ logs HOG profile errors on V12 reconnect — these are harmless and normal for this device
- The V12 MAC address is 25:04:27:11:28:95 — update all references if re-paired
- LibreELEC nightly builds may clear /storage/.cache/services/bluez.conf on boot — this is why the systemd drop-in override is used instead
Removal Guide
To completely remove all V12 remote configuration and return the system to its default state.
Step 1: Stop and Disable Services
Codesystemctl stop v12-remote systemctl disable v12-remote systemctl stop bt-reconnect.timer systemctl disable bt-reconnect.timer systemctl stop bt-connect-boot.service systemctl disable bt-connect-boot.serviceStep 2: Remove Service and Timer Files
Coderm /storage/.config/system.d/v12-remote.service rm /storage/.config/system.d/bt-connect-boot.service rm /storage/.config/system.d/bt-reconnect.service rm /storage/.config/system.d/bt-reconnect.timer rm -rf /storage/.config/system.d/multi-user.target.wants/bt-connect-boot.service rm -rf /storage/.config/system.d/multi-user.target.wants/v12-remote.service rm -rf /storage/.config/system.d/timers.target.wants/bt-reconnect.timerStep 3: Remove Scripts
Step 4: Remove udev Rule
Coderm /storage/.config/udev.rules.d/99-zidoo-v12.rules udevadm control --reload-rules udevadm triggerStep 5: Remove BlueZ Override
Coderm /storage/.config/system.d/bluetooth.service.d/configfile.conf rmdir /storage/.config/system.d/bluetooth.service.d 2>/dev/null rm /storage/.config/bluetooth/main.conf rmdir /storage/.config/bluetooth 2>/dev/nullRestart bluetooth to pick up the removal:
Verify bluetoothd is back to default (no --configfile

Step 6: Unpair the Remote (optional)
Step 7: Reload systemd
That's it — the system is back to its default state with no trace of the V12 configuration.
Display MoreHere I got AI to write it.
Tested working on debian with Zidoo V12.
Run as root with the Zidoo V12 Keyboard device as arg 1: sudo ./uinput-forwarder /dev/input/eventX
I had to chmod /dev/uinput
sudo chmod +0666 /dev/uinput
since libre is running as root already drop the sudo for libre
C
Display More// uinput-forwarder.c #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <linux/input.h> #include <linux/uinput.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <time.h> static void print_event(const struct input_event *ev) { char timebuf[64]; struct tm tm; time_t sec = ev->time.tv_sec; localtime_r(&sec, &tm); strftime(timebuf, sizeof(timebuf), "%F %T", &tm); if (ev->type == EV_KEY) { printf("%s.%06ld: EV_KEY code=%u value=%d\n", timebuf, ev->time.tv_usec, ev->code, ev->value); } else if (ev->type == EV_SYN) { printf("%s.%06ld: EV_SYN code=%u value=%d\n", timebuf, ev->time.tv_usec, ev->code, ev->value); } else { printf("%s.%06ld: type=%u code=%u value=%d\n", timebuf, ev->time.tv_usec, ev->type, ev->code, ev->value); } fflush(stdout); } int main(int argc, char **argv) { const char *src = (argc > 1) ? argv[1] : "/dev/input/event0"; int ifd = -1, ufd = -1; struct input_event ev; ssize_t rd; ifd = open(src, O_RDONLY); if (ifd < 0) { perror("open source device"); return 1; } ufd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); if (ufd < 0) { perror("open /dev/uinput"); close(ifd); return 1; } if (ioctl(ufd, UI_SET_EVBIT, EV_KEY) < 0) { perror("UI_SET_EVBIT EV_KEY"); goto cleanup; } if (ioctl(ufd, UI_SET_EVBIT, EV_SYN) < 0) { perror("UI_SET_EVBIT EV_SYN"); goto cleanup; } // Enable common keyboard key codes (0..KEY_MAX) for (int k = 0; k <= KEY_MAX; ++k) { if (ioctl(ufd, UI_SET_KEYBIT, k) < 0) { // ignore individual failures } } struct uinput_user_dev uidev; memset(&uidev, 0, sizeof(uidev)); snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "forwarded-kbd-%s", strrchr(src, '/') ? strrchr(src, '/')+1 : src); uidev.id.bustype = BUS_USB; uidev.id.vendor = 0x1234; uidev.id.product = 0x5678; uidev.id.version = 1; if (write(ufd, &uidev, sizeof(uidev)) < 0) { perror("write uidev"); goto cleanup; } if (ioctl(ufd, UI_DEV_CREATE) < 0) { perror("UI_DEV_CREATE"); goto cleanup; } while (1) { rd = read(ifd, &ev, sizeof(ev)); if (rd == (ssize_t)-1) { if (errno == EINTR) continue; perror("read input"); break; } else if (rd != sizeof(ev)) { fprintf(stderr, "Short read\n"); break; } print_event(&ev); if (ev.type == EV_KEY || ev.type == EV_SYN) { ssize_t wr = write(ufd, &ev, sizeof(ev)); if (wr != sizeof(ev)) { perror("write uinput"); break; } } } ioctl(ufd, UI_DEV_DESTROY); cleanup: if (ufd >= 0) close(ufd); if (ifd >= 0) close(ifd); return 0; }LibreELEC solution requires the libinput misclassification fix first regardless of whether you use uinput, JSON-RPC or LIRC
Libreelec deoesn't have in itself a c++ compiler, as far as I'm aware. But Debian does. But the issue still seems to stem from the misclassing of the remote as a touchpad -
Nah, there's an issue with something. The following solution works far better, copied from my notes. Leaving it here for anyone else facing this problem, and getting strange advice like "look here...." and nothing further.
Zidoo V12 Remote on LibreELEC/KodiPrerequisites
- LibreELEC installed and running
- Kodi webserver enabled: Settings → Services → Control → Allow remote control via HTTP (port 8080, no authentication)
- V12 remote powered on and in pairing mode
Step 1: Pair the Remote
bash
Codebluetoothctl agent on default-agent scan on # Wait for "Remote-V12" to appear, note the MAC address pair XX:XX:XX:XX:XX:XX trust XX:XX:XX:XX:XX:XX connect XX:XX:XX:XX:XX:XX exitStep 2: Configure BlueZ for HID Reconnection
bash
Codeecho 'BLUEZ_ARGS=--configfile=/storage/.config/bluetooth/main.conf' > /storage/.cache/services/bluez.conf mkdir -p /storage/.config/bluetooth cat /etc/bluetooth/main.conf > /storage/.config/bluetooth/main.conf sed -i 's/#ReconnectUUIDs=.*/ReconnectUUIDs=00001124-0000-1000-8000-00805f9b34fb/' /storage/.config/bluetooth/main.conf sed -i 's/#ReconnectAttempts=7/ReconnectAttempts=7/' /storage/.config/bluetooth/main.conf sed -i 's/#ReconnectIntervals=1,2,4,8,16,32,64/ReconnectIntervals=1,2,4,8,16,32,64/' /storage/.config/bluetooth/main.conf systemctl restart bluetoothStep 3: udev Rule
This tells libinput to ignore the V12 keyboard node, preventing Kodi from grabbing it exclusively and blocking our daemon.
bash
Codemkdir -p /storage/.config/udev.rules.d cat > /storage/.config/udev.rules.d/99-zidoo-v12.rules << 'EOF' KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="Remote-V12 Keyboard", ENV{LIBINPUT_IGNORE_DEVICE}="1", TAG+="uaccess" EOF udevadm control --reload-rules udevadm triggerStep 4: The Daemon Script
bash
Code
Display Morecat > /storage/v12-remote.py << 'SCRIPT' #!/usr/bin/env python3 import struct import urllib.request import json import os import time DEVICE = "/dev/input/event10" KODI_URL = "http://localhost:8080/jsonrpc" EVENT_FORMAT = "llHHi" EVENT_SIZE = struct.calcsize(EVENT_FORMAT) EV_KEY = 1 KEY_PRESS = 1 KEY_MAP = { # Navigation 103: ("Input.Up", None), 108: ("Input.Down", None), 105: ("Input.Left", None), 106: ("Input.Right", None), 28: ("Input.Select", None), 158: ("Input.Back", None), 172: ("Input.Home", None), 127: ("Input.ContextMenu", None), 50: ("Input.ContextMenu", None), # Playback 164: ("Input.ExecuteAction", "playpause"), 166: ("Input.ExecuteAction", "stop"), 168: ("Input.ExecuteAction", "rewind"), 208: ("Input.ExecuteAction", "fastforward"), 439: ("Input.ExecuteAction", "repeat"), # Volume 115: ("Input.ExecuteAction", "volumeup"), 51: ("Input.ExecuteAction", "volumedown"), 113: ("Input.ExecuteAction", "mute"), # Info / OSD / audio 23: ("Input.ExecuteAction", "info"), 24: ("Input.ExecuteAction", "osd"), 46: ("Input.ExecuteAction", "codecinfo"), 38: ("Input.ExecuteAction", "showsubtitles"), 392: ("Input.ExecuteAction", "audionextlanguage"), # Colour buttons 398: ("Input.ExecuteAction", "red"), 399: ("Input.ExecuteAction", "green"), 401: ("Input.ExecuteAction", "blue"), # Page 104: ("Input.ExecuteAction", "pageup"), 109: ("Input.ExecuteAction", "pagedown"), # Numbers 2: ("Input.ExecuteAction", "number1"), 3: ("Input.ExecuteAction", "number2"), 4: ("Input.ExecuteAction", "number3"), 5: ("Input.ExecuteAction", "number4"), 6: ("Input.ExecuteAction", "number5"), 7: ("Input.ExecuteAction", "number6"), 8: ("Input.ExecuteAction", "number7"), 9: ("Input.ExecuteAction", "number8"), 10: ("Input.ExecuteAction", "number9"), 11: ("Input.ExecuteAction", "number0"), 14: ("Input.ExecuteAction", "backspace"), } def kodi_rpc(method, params=None): payload = {"jsonrpc": "2.0", "method": method, "id": 1} if params: payload["params"] = params data = json.dumps(payload).encode() req = urllib.request.Request( KODI_URL, data=data, headers={"Content-Type": "application/json"} ) try: urllib.request.urlopen(req, timeout=2) except Exception: pass def wait_for_device(path): while not os.path.exists(path): time.sleep(1) print(f"Waiting for {DEVICE}...") wait_for_device(DEVICE) print(f"Opening {DEVICE}") while True: try: with open(DEVICE, "rb") as f: print("Device opened, listening...") while True: data = f.read(EVENT_SIZE) if len(data) < EVENT_SIZE: break _, _, etype, code, value = struct.unpack(EVENT_FORMAT, data) if etype == EV_KEY and value == KEY_PRESS: mapping = KEY_MAP.get(code) if mapping: method, action = mapping print(f"Key {code} -> {method} {action or ''}") if action: kodi_rpc(method, {"action": action}) else: kodi_rpc(method) except PermissionError: print("Permission denied") time.sleep(5) except Exception as e: print(f"Error: {e}, retrying...") time.sleep(2) wait_for_device(DEVICE) SCRIPT chmod +x /storage/v12-remote.pyStep 5: Systemd Service
bash
Code
Display Morecat > /storage/.config/system.d/v12-remote.service << 'EOF' [Unit] Description=Zidoo V12 Remote Control daemon After=kodi.service Wants=kodi.service [Service] Type=simple ExecStart=/usr/bin/python3 /storage/v12-remote.py Restart=always RestartSec=5 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable v12-remote systemctl start v12-remoteStep 6: Verify
bash
Press buttons and confirm key events appear in the journal and Kodi responds.
Notes
- All config lives in /storage and survives LibreELEC updates and reboots
- The daemon handles device disappearing/reappearing automatically (BT disconnects etc.)
- DEVICE = "/dev/input/event10" — this node number is consistent on this hardware but verify with cat /proc/bus/input/devices | grep -A2 "V12" if it ever changes
- The yellow button (KEY_YELLOW / code 400) was not present on this remote's physical layout
- Volume down is remapped by the kernel hwdb to KEY_COMMA (code 51) — this is a V12 firmware quirk, not a bug in the script
-
Yep.
Still no response from the remote. Or rather, while the device itself can see input, kodi is not responding in the slightest.
Any chance of some elaboration on what was done to make things work at your end?
And while this response may seem help "You can look for valid identifiers in /usr/lib/udev/hwdb.d/60-keyboard.hwdb"
I've no idea what I'm looking for. -
Still no idea on what could be causing this.
Jönke, could you elaborate further on what exactly you've done to make your remote work? -
Would you have any idea on what else should be supplied? (logs, btmon etc - although as pointed out the remote connects, but no input is accepted by kodi)
debug log
https://paste.libreelec.tv/choice-orca.log
Noticed this
Bash
Display MoreNov 28 14:40:47.120799 LibreELEC kernel: hid-generic 0005:5A44:5A44.0004: input,hidraw3: BLUETOOTH HID v0.00 Keyboard [Remote-V12] on 7c:5c:f8:f2:37:4d Nov 28 14:40:47.123996 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'one': Invalid argument Nov 28 14:40:47.124030 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'two': Invalid argument Nov 28 14:40:47.124039 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'three': Invalid argument Nov 28 14:40:47.124046 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'four': Invalid argument Nov 28 14:40:47.124054 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'five': Invalid argument Nov 28 14:40:47.124061 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'six': Invalid argument Nov 28 14:40:47.124068 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'seven': Invalid argument Nov 28 14:40:47.124076 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'eight': Invalid argument Nov 28 14:40:47.124083 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'nine': Invalid argument Nov 28 14:40:47.124090 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'zero': Invalid argument Nov 28 14:40:47.124141 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'repeat': Invalid argument Nov 28 14:40:47.124149 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'volume_mute': Invalid argument Nov 28 14:40:47.124157 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'period': Invalid argument Nov 28 14:40:47.124168 LibreELEC (udev-worker)[1457]: event10: Failed to parse key identifier 'leftquote': Invalid argument Nov 28 14:40:47.129394 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'one': Invalid argument Nov 28 14:40:47.129417 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'two': Invalid argument Nov 28 14:40:47.129426 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'three': Invalid argument Nov 28 14:40:47.130524 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'four': Invalid argument Nov 28 14:40:47.130554 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'five': Invalid argument Nov 28 14:40:47.130564 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'six': Invalid argument Nov 28 14:40:47.130571 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'seven': Invalid argument Nov 28 14:40:47.130580 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'eight': Invalid argument Nov 28 14:40:47.130588 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'nine': Invalid argument Nov 28 14:40:47.130596 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'zero': Invalid argument Nov 28 14:40:47.130629 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'repeat': Invalid argument Nov 28 14:40:47.130639 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'volume_mute': Invalid argument Nov 28 14:40:47.130647 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'period': Invalid argument Nov 28 14:40:47.130657 LibreELEC (udev-worker)[1506]: event11: Failed to parse key identifier 'leftquote': Invalid argument -
and the bizarre thing is, when I run evtest, and accidently press the power button on the remote, libreelec powers off.
So, the device is clearly seeing the remote, but Kodi is refusing to play along.
Could the bluez stack used be causing issues
Oh, I'm running nightlies on my device too -
managed to run bluetoothctl and evtest on libreeelc, results are posted here
External Content pastebin.comContent embedded from external sources will not be displayed without your consent.Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.So, while the remote does connect, and my chromebox/pc does indeed see the inputs, there seems to be no input received by kodi.
-
Alas, tried both and still no response.
Devie is a chromebox running libreelec, it sees the remote, and connects. But it doesn't want to interact
bluetoothctl - info
info 25:04:27:11:28:95
Device 25:04:27:11:28:95 (public)
Name: Remote-V12
Alias: Remote-V12
Appearance: 0x0180 (384)
Paired: yes
Bonded: yes
Trusted: yes
Blocked: no
Connected: yes
WakeAllowed: yes
LegacyPairing: no
CablePairing: no
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb)
UUID: Human Interface Device (00001812-0000-1000-8000-00805f9b34fb)
UUID: Public Key Open Credent.. (0000fff0-0000-1000-8000-00805f9b34fb)
UUID: Vendor specific (a8253f01-0c51-4000-b84f-1500068fb5a3)
Modalias: usb:v5A44p5A44d0000
ManufacturerData.Key: 0x03e0 (992)
AdvertisingFlags:
06 .
Battery Percentage: 0x64 (100)
hci0 type 7 discovering off
hci0 type 7 discovering on
[CHG] Device 35:A0:F5:CC:36:10 RSSI: 0xffffffb3 (-77)
[CHG] Device 03:3E:33:CF:9F:9E RSSI: 0xffffffb3 (-77) -
Yeah, I've gotten that file from coreelec a while back.
I've placed it in .storage/hwdb.d
but alas, no response. -
Trying to set up and use the zidoo v-12 remote. It connects via bluetooth, but the device does not seem to respond to inputs
Code
Display Morecat /proc/bus/input/devices I: Bus=0019 Vendor=0000 Product=0001 Version=0000 N: Name="Power Button" P: Phys=LNXPWRBN/button/input0 S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input0 U: Uniq= H: Handlers=kbd event0 B: PROP=0 B: EV=3 B: KEY=8000 10000000000000 0 I: Bus=0019 Vendor=0000 Product=0006 Version=0000 N: Name="Video Bus" P: Phys=LNXVIDEO/video/input0 S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input1 U: Uniq= H: Handlers=kbd event1 B: PROP=0 B: EV=3 B: KEY=3e000b00000000 0 0 0 I: Bus=0003 Vendor=1997 Product=2433 Version=0101 N: Name=" AirMouse" P: Phys=usb-0000:00:14.0-2/input0 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:1997:2433.0001/input/input2 U: Uniq= H: Handlers=sysrq kbd leds event2 B: PROP=0 B: EV=120013 B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe B: MSC=10 B: LED=1f I: Bus=0003 Vendor=1997 Product=2433 Version=0101 N: Name=" AirMouse" P: Phys=usb-0000:00:14.0-2/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:1997:2433.0002/input/input3 U: Uniq= H: Handlers=mouse0 event3 B: PROP=0 B: EV=17 B: KEY=1f0000 0 0 0 0 B: REL=903 B: MSC=10 I: Bus=0003 Vendor=1997 Product=2433 Version=0101 N: Name=" AirMouse System Control" P: Phys=usb-0000:00:14.0-2/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:1997:2433.0002/input/input4 U: Uniq= H: Handlers=kbd event4 B: PROP=0 B: EV=13 B: KEY=c000 10000000000000 0 B: MSC=10 I: Bus=0003 Vendor=1997 Product=2433 Version=0101 N: Name=" AirMouse Consumer Control" P: Phys=usb-0000:00:14.0-2/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:1997:2433.0002/input/input5 U: Uniq= H: Handlers=kbd event5 B: PROP=0 B: EV=1f B: KEY=33eff 0 0 483ffff17aff32d bfd4444600000000 1 130c730b17c000 267bfad9415fed 9e168000004400 10000002 B: REL=1040 B: ABS=100000000 B: MSC=10 I: Bus=0003 Vendor=4842 Product=0001 Version=0201 N: Name="HAOBO Technology USB Composite Device Keyboard" P: Phys=usb-0000:00:14.0-3/input2 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.2/0003:4842:0001.0003/input/input6 U: Uniq=8545124150344E37 H: Handlers=sysrq kbd leds event6 B: PROP=0 B: EV=12001f B: KEY=33eff 0 0 483ffff17aff32d bfd4444400000000 1 130ff38b17c007 ffff7bfad9415fff febeffdfffefffff ffffffffffffff fe B: REL=1040 B: ABS=100000000 B: MSC=10 B: LED=1f I: Bus=0003 Vendor=4842 Product=0001 Version=0201 N: Name="HAOBO Technology USB Composite Device" P: Phys=usb-0000:00:14.0-3/input3 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.3/0003:4842:0001.0004/input/input7 U: Uniq=8545124150344E37 H: Handlers=mouse1 event7 B: PROP=0 B: EV=17 B: KEY=70000 0 0 0 0 B: REL=903 B: MSC=10 I: Bus=0000 Vendor=0000 Product=0000 Version=0000 N: Name="HDA Intel HDMI HDMI/DP,pcm=3" P: Phys=ALSA S: Sysfs=/devices/pci0000:00/0000:00:03.0/sound/card0/input8 U: Uniq= H: Handlers=event8 B: PROP=0 B: EV=21 B: SW=140 I: Bus=0000 Vendor=0000 Product=0000 Version=0000 N: Name="HDA Intel HDMI HDMI/DP,pcm=7" P: Phys=ALSA S: Sysfs=/devices/pci0000:00/0000:00:03.0/sound/card0/input9 U: Uniq= H: Handlers=event9 B: PROP=0 B: EV=21 B: SW=140 I: Bus=0000 Vendor=0000 Product=0000 Version=0000 N: Name="HDA Intel HDMI HDMI/DP,pcm=8" P: Phys=ALSA S: Sysfs=/devices/pci0000:00/0000:00:03.0/sound/card0/input10 U: Uniq= H: Handlers=event10 B: PROP=0 B: EV=21 B: SW=140 I: Bus=0001 Vendor=10ec Product=0283 Version=0001 N: Name="HDA Digital PCBeep" P: Phys=card1/codec#0/beep0 S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card1/input11 U: Uniq= H: Handlers=kbd event11 B: PROP=0 B: EV=40001 B: SND=6 I: Bus=0000 Vendor=0000 Product=0000 Version=0000 N: Name="HDA Intel PCH Mic" P: Phys=ALSA S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card1/input12 U: Uniq= H: Handlers=event12 B: PROP=0 B: EV=21 B: SW=10 I: Bus=0000 Vendor=0000 Product=0000 Version=0000 N: Name="HDA Intel PCH Headphone" P: Phys=ALSA S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card1/input13 U: Uniq= H: Handlers=event13 B: PROP=0 B: EV=21 B: SW=4 I: Bus=0005 Vendor=5a44 Product=5a44 Version=0000 N: Name="Remote-V12 Keyboard" P: Phys=7c:5c:f8:f2:37:4d S: Sysfs=/devices/virtual/misc/uhid/0005:5A44:5A44.0008/input/input18 U: Uniq=25:04:27:11:28:95 H: Handlers=sysrq kbd leds event14 B: PROP=0 B: EV=12001f B: KEY=33eff 0 0 483ffff17aff32d bfd4444600000000 3ff 130ff38b17c007 ffff7bfad9415fff febeffdfffefffff ffffffffffff fffe B: REL=1040 B: ABS=100000000 B: MSC=10 B: LED=1f I: Bus=0005 Vendor=5a44 Product=5a44 Version=0000 N: Name="Remote-V12 Mouse" P: Phys=7c:5c:f8:f2:37:4d S: Sysfs=/devices/virtual/misc/uhid/0005:5A44:5A44.0008/input/input19 U: Uniq=25:04:27:11:28:95 H: Handlers=mouse2 event15 B: PROP=0 B: EV=17 B: KEY=1f0000 0 0 0 0 B: REL=903 B: MSC=10any advice on what should be created re: udev rules etc would be most welcome.
-
I have been using this great addon with Leia builds (Coreelec 8.95.0) and it is working fine.
Coreelec doesn't make a intel version of their firmware, so I'll give the latest libreelec beta/alpha a try out.
Did you need to do anything special to get this addon to work?
(As in,did you update Coreelec to 8.95.0 with openvpn already installed or did you update and install afterwards?Scratch those questions.
Libreelec alpha works fine.
I do admit it was a year since I last updated to kodi leia and the openvpn addon did not work then. It does now. Sorry for any inconvenience or annoyance caused.
You're doing fine work Zomboided, keep it up
-
Aye, there seems to be a dearth of information concerning to new changes. And yes it looks like an awful lot of addons will indeed be broken when kodi 18 RC or PR gets released.
From what I've been able to gather the change occurred last year in the alphas, and there has been no change since.
Hopefully they will publish the relevant documentation in usual spaces.
Cheers for getting back to me.
Edit;
Guidelines are published here, best of luck. -
Understandable.
Although, I wasn't referring to the standard/default skins settings, I was referring to how the changes in leia's addons' settings are laid out. (See [settings] change XML format of setting values by Montellese · Pull Request #12277 · xbmc/xbmc · GitHub )
As it stands, your vpn's settings page will not open in kodi beta 18, hasn't been able to for months. It was brought up before, and you stated you did not deal with alpha builds, and for good reason.
Just curious if that policy changes now that that particular change in kodi has been more or less finalised. -
Now that Kodi Leia has entered beta, will this addon be updated to work with the new settings layout?
-
zoogvpn (uk server 4) and VPN unlimited both work with VPNmanager and iplayer is accessible. (zoog requires manual set up.)
Windscribe have a dedicated server for uk and us netflix. But it seems to be only available for their android app, not seen it pop up on ios or in the download files. -
Yeah, I see it now.
There are no errors in the changelog. It looks like the issue lies with ExpressVpn and the UK server you're using.
Does ExpressVpn have only one UK server? (Other providers have 3 or four servers, some even have dedicated servers for bbc iplayer and netflix.) -
Are you sure you are connecting to a London server?
In the log you supply you are connecting to New Zealand, using a New Zealand ovpn file