[5.2.0.16] HID-over-GATT devices connect but no input device is created - bluetoothd cannot open /dev/uhid

REPRODUCIBILITY: 100%
OS VERSION: 5.2.0.16
HARDWARE: Jolla Phone (2026) (jp2601)
UI LANGUAGE: English (US)
REGRESSION: has not been working ever since I got the device

DESCRIPTION:

Bluetooth LE HID peripherals (HID-over-GATT / HoG) pair, bond, connect and report battery
level correctly, but no evdev node is ever created for them, so they produce no input at
all. Bluetooth is otherwise fully functional: A2DP over BR/EDR works, and non-HID GATT
devices work. The failure is specific to the HoG path.

PRECONDITIONS:

Any Bluetooth LE keyboard or mouse exposing the HID service (UUID 0x1812). Developer mode is needed only to observe the cause, not to trigger the bug.

STEPS TO REPRODUCE:

  1. Pair a Bluetooth LE keyboard or mouse from Settings > Bluetooth.
  2. Confirm it connects: bluetoothctl info <MAC> reports Connected: yes, LE.Connected:yes, and a valid battery percentage.
  3. Type on the keyboard / move the mouse.
  4. Compare ls -l /dev/input/ before and after connecting.

EXPECTED RESULT:

A new /dev/input/eventN node appears on connection and the device generates input.

ACTUAL RESULT:

No new node appears. No input is received. bluetoothd logs “input-hog profile accept failed” for the device.

MODIFICATIONS:

  • Developer mode enabled
  • libpebble3d installed. It ships /etc/systemd/system/bluetooth.service.d/50-libpebble3d.conf, which sets Environment=TRACING=-E (exposing bluetoothd’s experimental D-Bus APIs), but the bug reproduces identically with this drop-in removed and bluetoothd running without -E, so it is not a factor.
  • /etc/systemd/system/bluetooth.service.d/99-uhid-fix.conf added as a workaround while
    investigating (see below). The bug reproduces with this file absent.
  • Chum, Storeman, but just for user facing applications

ADDITIONAL INFORMATION:

Devices tested:

Device Transport Result
Clicks Power Keyboard (Appearance 0x03c1, icon input-keyboard) HoG connects, bonds, battery OK, no input
BLE mouse (Appearance 0x03c2, icon input-mouse) HoG connects, bonds, battery OK, no input
Sony WF-1000XM5 BR/EDR (A2DP) works
Pebble smartwatch BLE / GATT, non-HID works

bluez version: bluez5-5.87+git1-1.16.1.jolla.aarch64

Running the identical binary with identical arguments manually from a root shell makes the keyboard work immediately.

Temporarily relaxing the node permissions also resolves it:

chmod 0666 /dev/uhid && systemctl restart bluetooth

After reconnecting, a new /dev/input/eventN appears and both devices work normally.

Workaround (confirmed working):
A minimal drop-in granting the intended group access without weakening the rest of the
unit’s hardening:

/etc/systemd/system/bluetooth.service.d/99-uhid-fix.conf

[Service]
SupplementaryGroups=uhid
2 Likes

@Keto suggests adding this line in this post just the other day, so Jolla are aware, but a later post in the thread suggests they aren’t quite sure about how to go about a permanent fix

oh cool I didnt see that, also seems like the exact same fix I did haha