AprilNEA / AprilNEA/OpenLogi

[Bug]: Failing to set non-default options on Logitech M535

Open
#1,213 13 comments 0 reactions 0 assignees View on GitHub
needs: triage type: bug
Dominant language
Rust
Stars
21k
Forks
675
Avg merge
2d 5h
Merged PRs (30d)
172

Description

### Pre-flight checklist

- [x] I searched [existing issues](https://github.com/AprilNEA/OpenLogi/issues?q=is%3Aissue) and this is not a duplicate.
- [x] I am on the [latest release](https://github.com/AprilNEA/OpenLogi/releases/latest) or a recent `master` build.
- [x] I quit **Logi Options+** before running OpenLogi (the two apps fight over HID++ access and only one can own a receiver at a time).

### Which part of OpenLogi?

Both

### OpenLogi version

0.8.3

### Operating system

macOS

### OS version & architecture

macOS 26.5.2 (Tahoe), Apple Silicon

### Device model

M535 (bluetooth)

### How is the device connected?

Bluetooth (direct, no receiver)

### Affected area(s)

- [x] Device discovery / detection
- [x] Button remapping
- [ ] DPI control
- [ ] SmartShift
- [ ] Per-application profiles
- [ ] Battery status
- [x] Settings / configuration (TOML)
- [ ] Auto-update
- [ ] Menu bar / tray
- [ ] Other

### What happened?

OpenLogi correctly identifies my mouse, but is unable to set any control options. It shows up in the GUI, but settings are either unchangeable (action wheel, gesture) or don't "stick" (the buttons indicated graphically in the interface.) The mouse works, but in default mode.

Nothing was written to the toml file's [devices] section, until I turned 'control this device' off and on again, and then just a device header: `[devices."direct:046d:b016:unit:00000000"]`

The vendor and model IDs check out. I'm not sure what the unit is supposed to show.

`openlogi list` shows the correct device, but possibly missing information. `openlogi diag controls` says "Input Monitoring is NOT granted" while the GUI (and the mac) show it is. (See below.)

Image

Image

### Steps to reproduce

Install OpenLogi. Connect M535 mouse.

### Diagnostics report

```markdown
### OpenLogi Diagnostics

**App**
- OpenLogi (GUI): v0.8.3 (release)
- Agent: v0.8.3 (connected)
- IPC protocol: GUI 29 / agent 29
- Inventory: ready
- OS: macOS 26.5.2 (arm64)
- Locale: en-US (UI: follow system)
- Accessibility: granted · Input hook: installed
- Launch at login: yes · Menu bar: yes · Update check: off
- Running from: source build (dev)
- Config: schema 7 · 1 configured device(s) · thumbwheel 14

**Assets**
- Source: user cache · Index: loaded (210 models) · User cache: present
- Cache path: ~/.local/share/openlogi/assets · Bundle assets: absent

**Devices (1)**
- M336 / M337 / M535 — mouse (codename: Bluetooth Mouse M336/M337/M535)
- Connection: Bluetooth (direct) · Online: yes · Battery: 70% (discharging, good)
- Capabilities: buttons=yes, pointer=no, lighting=no
- DPI: unsupported
- Model: 0b016 (model-ids: b016/0000/0000, ext-model: 00)
- Transports: Bluetooth
- Render: m337 · direct
```

### `openlogi list` output

```text
(inventory read from the running agent)
Bluetooth Mouse M336/M337/M535 (—, vid=046d pid=b016)
└─ slot 255 ● Bluetooth Mouse M336/M337/M535 (mouse, wpid=?, battery=70% good (discharging))
model_ids=[b016,0000,0000] ext=00 serial=— unit_id=00000000 transports=bt
```

### Logs

```shell
$ OPENLOGI_LOG=debug openlogi diag controls
2026-09-01T00:03:44.632682Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0002 matched=false
2026-09-01T00:03:44.632762Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0001 matched=false
2026-09-01T00:03:44.632768Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x000c usage_id=0x0001 matched=false
2026-09-01T00:03:44.632772Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0001 matched=false
2026-09-01T00:03:44.632814Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0002 matched=true
2026-09-01T00:03:44.632820Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0006 matched=false
2026-09-01T00:03:44.632854Z DEBUG openlogi_device::inventory: HID++ candidate interfaces count=1
2026-09-01T00:03:44.664318Z WARN openlogi_device::inventory: failed to open HID++ channel — requesting repair error=Backend("Failed to open device: Input Monitoring is NOT granted to this process; grant it to OpenLogi Agent under System Settings → Privacy & Security → Input Monitoring")
2026-09-01T00:03:44.664348Z DEBUG openlogi_device::inventory: one-shot enumerate inventory incomplete or still changing — retrying attempt=1 complete=false healthy=false
2026-09-01T00:03:44.966678Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0002 matched=false
2026-09-01T00:03:44.966737Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0001 matched=false
2026-09-01T00:03:44.966751Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x000c usage_id=0x0001 matched=false
2026-09-01T00:03:44.966762Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0001 matched=false
2026-09-01T00:03:44.966845Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0002 matched=true
2026-09-01T00:03:44.966860Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0006 matched=false
2026-09-01T00:03:44.966896Z DEBUG openlogi_device::inventory: HID++ candidate interfaces count=1
2026-09-01T00:03:45.009927Z WARN openlogi_device::inventory: failed to open HID++ channel — requesting repair error=Backend("Failed to open device: Input Monitoring is NOT granted to this process; grant it to OpenLogi Agent under System Settings → Privacy & Security → Input Monitoring")
2026-09-01T00:03:45.009957Z DEBUG openlogi_device::inventory: one-shot enumerate inventory incomplete or still changing — retrying attempt=2 complete=false healthy=false
2026-09-01T00:03:45.312589Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0002 matched=false
2026-09-01T00:03:45.312650Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0001 matched=false
2026-09-01T00:03:45.312661Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x000c usage_id=0x0001 matched=false
2026-09-01T00:03:45.312671Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0001 matched=false
2026-09-01T00:03:45.312760Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0002 matched=true
2026-09-01T00:03:45.312773Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0006 matched=false
2026-09-01T00:03:45.312822Z DEBUG openlogi_device::inventory: HID++ candidate interfaces count=1
2026-09-01T00:03:45.348074Z WARN openlogi_device::inventory: failed to open HID++ channel — requesting repair error=Backend("Failed to open device: Input Monitoring is NOT granted to this process; grant it to OpenLogi Agent under System Settings → Privacy & Security → Input Monitoring")
2026-09-01T00:03:45.348117Z DEBUG openlogi_device::inventory: one-shot enumerate inventory incomplete or still changing — retrying attempt=3 complete=false healthy=false
2026-09-01T00:03:45.650601Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0002 matched=false
2026-09-01T00:03:45.650648Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0001 matched=false
2026-09-01T00:03:45.650656Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x000c usage_id=0x0001 matched=false
2026-09-01T00:03:45.650662Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0001 matched=false
2026-09-01T00:03:45.650728Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0xff00 usage_id=0x0002 matched=true
2026-09-01T00:03:45.650737Z DEBUG openlogi_hid::transport: logitech HID node name=Bluetooth Mouse M336/M337/M535 pid=b016 usage_page=0x0001 usage_id=0x0006 matched=false
2026-09-01T00:03:45.650762Z DEBUG openlogi_device::inventory: HID++ candidate interfaces count=1
2026-09-01T00:03:45.689958Z WARN openlogi_device::inventory: failed to open HID++ channel — requesting repair error=Backend("Failed to open device: Input Monitoring is NOT granted to this process; grant it to OpenLogi Agent under System Settings → Privacy & Security → Input Monitoring")
Error: no online HID++ device found — is a Logi device paired and awake?
```

### macOS permissions (if applicable)

- [x] OpenLogi has **Accessibility** permission (needed to remap buttons via the event tap).
- [x] OpenLogi has **Input Monitoring** permission (needed for Bluetooth-direct devices and capture).

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the `openlogi diag controls` output and the inventory/HID++ discovery logs, focusing on the single Bluetooth-direct interface reported for the M535. Trace how the GUI and agent handle the device and Input Monitoring status, then verify that button, wheel, and gesture settings persist in the TOML `[devices]` entry and are applied after reconnecting.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
desktop-dev, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.