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 post


    Zidoo 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

    Code
    bluetoothctl
    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
    exit
    Quote

    The 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.

    Verify it worked:

    Code
    ps | grep bluetoothd
    # Should show: /usr/lib/bluetooth/bluetoothd --configfile=/storage/.config/bluetooth/main.conf

    Step 3: udev Rule

    Tells libinput to ignore event10 entirely, preventing Kodi from grabbing it and leaving it free for our daemon.

    Code
    mkdir -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 trigger

    Step 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.

    Quote

    Note: 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.


    Step 5: Daemon Service


    Step 6: Boot Connect Service

    Connects the remote automatically at boot without blocking the boot sequence. The & backgrounds the bluetoothctl call so boot continues immediately.


    Step 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.


    Verification

    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

    SymptomCheckFix
    Remote not responding after bootls /dev/input/event10Wait 10–15s, or bluetoothctl connect 25:04:27:11:28:95
    Daemon not runningsystemctl status v12-remotesystemctl restart v12-remote
    BlueZ unresponsivebluetoothctl show returns nothingsystemctl restart bluetooth
    Wrong event nodecat /proc/bus/input/devices | grep -A2 "V12"Update DEVICE in v12-remote.py
    bluetoothd missing --configfileps | grep bluetoothdRe-apply Step 2

    File Summary

    FilePurpose
    /storage/.config/bluetooth/main.confBlueZ config with HID reconnect UUIDs
    /storage/.config/system.d/bluetooth.service.d/configfile.confSystemd drop-in to pass --configfile to bluetoothd
    /storage/.config/udev.rules.d/99-zidoo-v12.rulesudev rule to hide event10 from libinput
    /storage/v12-remote.pyMain daemon script
    /storage/.config/system.d/v12-remote.serviceSystemd service for the daemon
    /storage/.config/system.d/bt-connect-boot.serviceBoot-time connect service
    /storage/bt-reconnect.shWatchdog script
    /storage/.config/system.d/bt-reconnect.serviceWatchdog service unit
    /storage/.config/system.d/bt-reconnect.timerWatchdog 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

    Code
    systemctl 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.service

    Step 2: Remove Service and Timer Files

    Code
    rm /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.timer

    Step 3: Remove Scripts

    Code
    rm /storage/v12-remote.py
    rm /storage/bt-reconnect.sh

    Step 4: Remove udev Rule

    Code
    rm /storage/.config/udev.rules.d/99-zidoo-v12.rules
    udevadm control --reload-rules
    udevadm trigger

    Step 5: Remove BlueZ Override

    Code
    rm /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/null

    Restart bluetooth to pick up the removal:

    Code
    systemctl daemon-reload
    systemctl restart bluetooth

    Verify bluetoothd is back to default (no --configfile:(

    Code
    ps | grep bluetoothd
    # Should show: /usr/lib/bluetooth/bluetoothd  (no --configfile)

    Step 6: Unpair the Remote (optional)

    Code
    bluetoothctl
    remove 25:04:27:11:28:95
    exit

    Step 7: Reload systemd

    Code
    systemctl daemon-reload
    systemctl reset-failed

    That's it — the system is back to its default state with no trace of the V12 configuration.


    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/Kodi

    Prerequisites

    • 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

    Code
    bluetoothctl
    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
    exit

    Step 2: Configure BlueZ for HID Reconnection


    bash

    Code
    echo '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 bluetooth

    Step 3: udev Rule

    This tells libinput to ignore the V12 keyboard node, preventing Kodi from grabbing it exclusively and blocking our daemon.


    bash

    Code
    mkdir -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 trigger

    Step 4: The Daemon Script


    bash


    Step 5: Systemd Service


    bash


    Step 6: Verify


    bash

    Code
    systemctl status v12-remote
    journalctl -u v12-remote -f

    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.

    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

    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.com
    Content 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)

    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

    any 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 :D

    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.

    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

    Code
    Connecting to VPN profile /storage/.kodi/addons/service.vpn.manager/ExpressVPN/New Zealand (UDP).ovpn
    18:02:05.675 T:140683507648256  NOTICE: VPN Mgr : (common.py) Received connection info from ipinfo.io, IP 221.121.135.68 location Auckland, NZ, ISP AS45671 AS45671 Network Operation