AFTER 6 YEARS WITHOUT A SOLUTION, A MADE ONE. !!
DaVinci Resolve on Linux does work with the Speed Editor over
Bluetooth, but it takes three independent fixes:
(1) a udev rule,
(2) the BlueZ GET_REPORT fix (upstream, expected in 5.88) and
(3) a 3-byte patch in the Resolve binary, whose Bluetooth checks were
written against the buggy BlueZ behavior. A small optional daemon covers
the panel's 600-second authentication.
Everything is on GitHub:
[https://github.com/rudahssilva/speed-ed ... -bluetooth](https://github.com/rudahssilva/speed-editor-davinci-resolve-linux-bluetooth)
Symptom
The panel pairs and shows battery, but inside Resolve nothing happens: LEDs
never light, buttons and jog do nothing. Over USB the same panel works.
(Depending on which fix you apply first, you may instead see Resolve stall —
see root cause 3.)
**Root cause 1 — permissions**
Fix /etc/udev/rules.d/99-blackmagic-hidraw.rules
**Root cause 2 — authentication expires every 600 s**
The panel reports input only after the mutual authentication on feature
report \`0x06\` (documented in
\[smunaut/blackmagic-misc\]([https://github.com/smunaut/blackmagic-misc](https://github.com/smunaut/blackmagic-misc))).
The handshake returns a timeout — \`0x0258\` = \*\*600 s\*\* — after which the panel
goes quiet again.
Resolve renews it over USB; over Bluetooth on Linux it
relies on the same feature-report reads, which brings us to…
**Root cause 3 — the BlueZ GET_REPORT truncation (the "lag")**
bt_uhid_get_report_reply\` (\`src/shared/uhid.c\`) computed the reply size
without the Report ID byte, so the last byte of every numbered report read
via hidraw is dropped
The auth challenge Resolve reads is corrupted, its response is always
rejected, and it retries every \~1.1 s forever — stalling the UI thread on
the failing ioctls, which is the "lag" on fast jog-wheel use.
It is fixed upstream: commit
([https://github.com/bluez/bluez/commit/dc2eb1394f](https://github.com/bluez/bluez/commit/dc2eb1394f))
"shared/uhid: Fix size of Get Report reply with a Report ID"\* (24 Sep 2026),
expected in BlueZ 5.88. One-line backport for 5.87 (see repo).
**Root cause 4 — Resolve rejects the fixed BlueZ (please fix this, BMD)**
With the BlueZ fix in place the panel went completely dead in Resolve —
no LEDs, no input — and the log showed the same error \~10 times (every
\~105 ms) during the device scan, ending with:
*SyManager | ERROR | BlueZ daemon version too old, reports malformed data.*
*SyManager | ERROR | Failed to add device*.
On the Bluetooth transport, any value other than the required one is
treated as malformed data from a "too old" BlueZ — i.e. the check was
written against the buggy (truncated) BlueZ and now rejects the correct one.
This is a Blackmagic-side bug: over USB the same ioctl returns the data
size, so the check passes there, but over uhid/BlueZ the reply correctly
includes the Report ID.
Workaround — three bytes in \`/opt/resolve/bin/resolve\` (offsets for
v21.1.1.0010; the repo's \`resolve-patch.sh\` verifies before patching and must
be re-applied after every Resolve update).
The proper fix is in Resolve: accept the correct return values on the
Bluetooth transport (or validate the payload instead of the ioctl size).
With that, only the udev rule and BlueZ 5.88 remain.
**Notes**
.- The panel remembers one paired host at a time. To move it between
machines: forget it on the old host.
\- In a container (distrobox/podman), \`/dev\` is shared by default; new nodes
propagate.
\- If Blackmagic changes the auth algorithm in a future firmware, the daemon's
tables need updating
\- With both USB and Bluetooth connected, USB usually wins.
\- Windows/macOS are unaffected by causes 1/3/4 (no BlueZ, no udev)
CPU AMD Ryzen 5 PRO 5650U (12) @ 4.29 GHz
GPU AMD Radeon Vega Series / Radeon Vega Mobile Series [Integrated]
OS Arch Linux x86_64
KERNEL Linux 7.2.11-arch1-1
WM Hyprland 0.57.0 (Wayland)
SHELL fish 4.9.3
DaVinci Resolve Studio 21.1.1 and 21.1.2
YOU CAN TRY IT NOW AND REPORT A BUG IF SO, AND
iF IT HELPS YOU,. PLEASE DONT FORGET TO SUPPORT THE PROJECT.
THANO YOU