AprilNEA / AprilNEA/OpenLogi

[Bug]: GestureButton cannot be assigned to CycleDpiPresets on MX Master 4

Open
#519 1 comment 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.6.23

### Operating system

Linux

### OS version & architecture

Linux Mint 22.3 (Ubuntu-based)

### Device model

MX Master 4

### How is the device connected?

Logi Bolt receiver

### Affected area(s)

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

### What happened?

I'm trying to use the large thumb GestureButton as a DPI toggle instead of the dedicated DPI button.

The documentation indicates that GestureButton is a valid binding target and CycleDpiPresets is a valid action.

However, assigning CycleDpiPresets to the GestureButton has no effect.

The dedicated DpiToggle button works correctly with the same action.

### Steps to reproduce

1. Connect a Logitech MX Master 4.
2. Install OpenLogi 0.6.23.
3. Configure two DPI presets.
4. Disable gestures:

gesture_owner = "Off"

5. Assign:

GestureButton = "CycleDpiPresets"

6. Save the configuration and restart the OpenLogi agent.

7. Press the GestureButton.

Expected behavior
Pressing the large thumb GestureButton should cycle through the configured DPI presets, just like the dedicated DpiToggle button.

Actual behaviour:
Nothing happens.
The DPI does not change.
The same action works correctly when assigned to DpiToggle.

Config:
schema_version = 3

[devices."receiver:98261b7cb5bd8f6b:slot:2"]
gesture_owner = "Off"
dpi_presets = [
1000,
200,
]
dpi = 200

[devices.2b042.bindings]
DpiToggle = "None"
GestureButton = "CycleDpiPresets"

Additional info:
Additional tests performed:

- DpiToggle = "CycleDpiPresets" works correctly.
- GestureButton = "CycleDpiPresets" has no effect.
- gesture_owner = "Back" together with Back = "CycleDpiPresets" also has no effect.
- The GUI currently does not offer assigning the DPI toggle action to the GestureButton.

Question:

Is this currently unsupported, or is this a bug?

If unsupported, would it be possible to allow the GestureButton to trigger CycleDpiPresets (or another DPI action)? This would provide functionality similar to the precision/sniper button available on Logitech G-series mice and would be very useful for productivity applications such as Lightroom, Photoshop and PowerPoint.

Open related request:
> **Would it be possible to support "hold for low DPI, release for normal DPI" on the GestureButton?**
> This would emulate the precision/sniper button found on Logitech G-series mice and would be very useful for productivity tasks such as photo editing and precise object placement.

### Diagnostics report

```markdown

```

### `openlogi list` output

```text
openlogi list
2026-08-04T19:48:30.555478Z WARN openlogi_hid::inventory::probe: paired-device count mismatch — some slots may be unreadable expected=1 found=3
2026-08-04T19:48:30.555697Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:48:30.555818Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:48:35.863553Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:48:35.863722Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:48:41.167771Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:48:41.167880Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
Logi Bolt Receiver (98261B7CB5BD8F6B, vid=046d pid=c548)
└─ slot 2 ● MX Master 4 (mouse, wpid=b042, battery=100% full (discharging))
model_ids=[b042,0000,0000] ext=00 serial=2551ZAS7KK08 unit_id=7fcc487f transports=btle
```

### Logs

```shell
OPENLOGI_LOG=debug openlogi
2026-08-04T19:52:46.033676Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:46.033710Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:46.033721Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:46.033729Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:52:46.033738Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:46.033747Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0005 matched=false
2026-08-04T19:52:46.033755Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0022 matched=false
2026-08-04T19:52:46.033763Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:46.033772Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:46.033780Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:46.033789Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:46.033798Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:46.033807Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:46.033816Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:46.033826Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:52:46.033835Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0013 matched=false
2026-08-04T19:52:46.033844Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:46.033853Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:46.033862Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:46.033871Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:46.033881Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:46.033890Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:46.033899Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:52:46.033917Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:46.033926Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:46.033936Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:46.033945Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:52:46.033953Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xffbc usage_id=0x0088 matched=false
2026-08-04T19:52:46.033962Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:46.033971Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:46.034213Z DEBUG openlogi_hid::inventory: HID++ candidate interfaces count=3
2026-08-04T19:52:46.034535Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech USB Receiver vid=046d
2026-08-04T19:52:46.034638Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech G604 vid=046d
2026-08-04T19:52:46.034741Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech USB Receiver vid=046d
2026-08-04T19:52:46.037419Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=UnsupportedProtocolVersion
2026-08-04T19:52:46.037430Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=c539 has_model=false
2026-08-04T19:52:46.045494Z DEBUG openlogi_hid::inventory::probe: receiver reports pairing count pairing_count=Some(1)
2026-08-04T19:52:47.554484Z DEBUG openlogi_hid::inventory::probe: drained device-arrival events events=1
2026-08-04T19:52:47.557162Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=1 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:47.568039Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=2 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:47.582258Z DEBUG openlogi_hid::inventory::probe: paired slot slot=3 online=true wpid=None bolt_kind=Mouse has_event=false codename=None
2026-08-04T19:52:47.584227Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=4 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:47.587259Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=5 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:47.590020Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=6 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:47.595586Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=3 error=DeviceNotFound
2026-08-04T19:52:51.035607Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=Channel(Timeout)
2026-08-04T19:52:51.035647Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=4085 has_model=false
2026-08-04T19:52:51.035690Z DEBUG openlogi_hid::inventory: one-shot enumerate inventory incomplete or still changing — retrying attempt=1 all_complete=false all_healthy=false
2026-08-04T19:52:51.337561Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:51.337584Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:51.337593Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:51.337599Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:52:51.337626Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:51.337631Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0005 matched=false
2026-08-04T19:52:51.337635Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0022 matched=false
2026-08-04T19:52:51.337639Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:51.337643Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:51.337646Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:51.337650Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:51.337655Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:51.337659Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:51.337666Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:51.337673Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:52:51.337680Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0013 matched=false
2026-08-04T19:52:51.337685Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:51.337692Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:51.337696Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:51.337702Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:51.337709Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:51.337715Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:51.337721Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:52:51.337729Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:51.337735Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:51.337742Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:51.337748Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:52:51.337756Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xffbc usage_id=0x0088 matched=false
2026-08-04T19:52:51.337762Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:51.337768Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:51.337888Z DEBUG openlogi_hid::inventory: HID++ candidate interfaces count=3
2026-08-04T19:52:51.339678Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=UnsupportedProtocolVersion
2026-08-04T19:52:51.339696Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=c539 has_model=false
2026-08-04T19:52:51.347576Z DEBUG openlogi_hid::inventory::probe: receiver reports pairing count pairing_count=Some(1)
2026-08-04T19:52:54.108420Z DEBUG openlogi_hid::inventory::probe: drained device-arrival events events=2
2026-08-04T19:52:54.111609Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=1 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:54.113842Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=2 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:54.132688Z DEBUG openlogi_hid::inventory::probe: paired slot slot=3 online=true wpid=None bolt_kind=Mouse has_event=false codename=None
2026-08-04T19:52:54.136560Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=4 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:54.138330Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=5 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:54.142124Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=6 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:54.146726Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=3 error=DeviceNotFound
2026-08-04T19:52:56.338717Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=Channel(Timeout)
2026-08-04T19:52:56.338754Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=4085 has_model=false
2026-08-04T19:52:56.338977Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:52:56.339071Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:52:56.339090Z DEBUG openlogi_hid::inventory: one-shot enumerate inventory incomplete or still changing — retrying attempt=2 all_complete=false all_healthy=false
2026-08-04T19:52:56.641806Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:56.641821Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:56.641825Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:56.641829Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:52:56.641833Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:56.641836Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0005 matched=false
2026-08-04T19:52:56.641840Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0022 matched=false
2026-08-04T19:52:56.641856Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:56.641861Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:56.641866Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:56.641871Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:52:56.641884Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:56.641888Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:56.641892Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:56.641907Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:52:56.641911Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0013 matched=false
2026-08-04T19:52:56.641915Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:52:56.641919Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:56.641923Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:56.641928Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:56.641941Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:56.641945Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:56.641960Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:52:56.641964Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:52:56.641968Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:52:56.641973Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:52:56.641978Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:52:56.641982Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xffbc usage_id=0x0088 matched=false
2026-08-04T19:52:56.641986Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:52:56.641990Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:52:56.642106Z DEBUG openlogi_hid::inventory: HID++ candidate interfaces count=3
2026-08-04T19:52:56.642198Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech USB Receiver vid=046d
2026-08-04T19:52:56.642257Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech G604 vid=046d
2026-08-04T19:52:56.645185Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=UnsupportedProtocolVersion
2026-08-04T19:52:56.645194Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=c539 has_model=false
2026-08-04T19:52:56.650639Z DEBUG openlogi_hid::inventory::probe: receiver reports pairing count pairing_count=Some(1)
2026-08-04T19:52:58.159386Z DEBUG openlogi_hid::inventory::probe: drained device-arrival events events=1
2026-08-04T19:52:58.162709Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=1 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:58.176745Z DEBUG openlogi_hid::inventory::probe: paired slot slot=2 online=true wpid=Some(45122) bolt_kind=Mouse has_event=true codename=Some("MX Master 4")
2026-08-04T19:52:58.179749Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=3 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:58.181701Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=4 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:58.184710Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=5 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:52:58.187757Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=6 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:53:01.643055Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=Channel(Timeout)
2026-08-04T19:53:01.643078Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=4085 has_model=false
2026-08-04T19:53:01.643207Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:53:01.643303Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:53:01.643321Z DEBUG openlogi_hid::inventory: one-shot enumerate inventory incomplete or still changing — retrying attempt=3 all_complete=false all_healthy=false
2026-08-04T19:53:01.949237Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:53:01.949311Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:53:01.949329Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:53:01.949352Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:53:01.949370Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:53:01.949387Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0005 matched=false
2026-08-04T19:53:01.949404Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000d usage_id=0x0022 matched=false
2026-08-04T19:53:01.949421Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:53:01.949438Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:53:01.949456Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:53:01.949474Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0022 matched=false
2026-08-04T19:53:01.949492Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:53:01.949513Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:53:01.949531Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:53:01.949548Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:53:01.949565Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0x0001 usage_id=0x0013 matched=false
2026-08-04T19:53:01.949582Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-04T19:53:01.949599Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:53:01.949618Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:53:01.949636Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:53:01.949651Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:53:01.949684Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:53:01.949692Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech G604 pid=4085 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-04T19:53:01.949702Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-04T19:53:01.949711Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-04T19:53:01.949719Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-04T19:53:01.949727Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-04T19:53:01.949736Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c539 usage_page=0xffbc usage_id=0x0088 matched=false
2026-08-04T19:53:01.949745Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-04T19:53:01.949763Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c548 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-04T19:53:01.950033Z DEBUG openlogi_hid::inventory: HID++ candidate interfaces count=3
2026-08-04T19:53:01.950219Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech USB Receiver vid=046d
2026-08-04T19:53:01.950342Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech G604 vid=046d
2026-08-04T19:53:01.952219Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=UnsupportedProtocolVersion
2026-08-04T19:53:01.952247Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=c539 has_model=false
2026-08-04T19:53:01.959744Z DEBUG openlogi_hid::inventory::probe: receiver reports pairing count pairing_count=Some(1)
2026-08-04T19:53:03.469444Z DEBUG openlogi_hid::inventory::probe: drained device-arrival events events=1
2026-08-04T19:53:03.472801Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=1 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:53:03.487795Z DEBUG openlogi_hid::inventory::probe: paired slot slot=2 online=true wpid=Some(45122) bolt_kind=Mouse has_event=true codename=Some("MX Master 4")
2026-08-04T19:53:03.489752Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=3 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:53:03.490701Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=4 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:53:03.492781Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=5 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:53:03.495758Z DEBUG openlogi_hid::inventory::probe: slot empty or unreadable slot=6 error=Protocol(RegisterAccess(UnknownDevice))
2026-08-04T19:53:06.951245Z DEBUG openlogi_hid::inventory::features: Device::new failed slot=255 error=Channel(Timeout)
2026-08-04T19:53:06.951271Z DEBUG openlogi_hid::inventory::probe: slot 0xff exposes no battery or config feature — likely a receiver secondary interface; skipping vid=046d pid=4085 has_model=false
2026-08-04T19:53:06.951492Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
2026-08-04T19:53:06.951637Z WARN openlogi_hid::inventory: node probe keeps failing — dropping its channel to reopen next tick
Logi Bolt Receiver (98261B7CB5BD8F6B, vid=046d pid=c548)
└─ slot 2 ● MX Master 4 (mouse, wpid=b042, battery=100% full (discharging))
model_ids=[b042,0000,0000] ext=00 serial=2551ZAS7KK08 unit_id=7fcc487f transports=btle
```

### macOS permissions (if applicable)

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

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing how GestureButton, Back, and DpiToggle bindings are handled when they target CycleDpiPresets, using the configuration and logs in this report as the reproduction case. Compare the working DpiToggle path with the inactive GestureButton path, then verify that the configured gesture binding cycles the DPI presets while gestures are disabled.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.