AprilNEA / AprilNEA/OpenLogi

[Bug]: Scroll constantly jumps way up

Open
#692 3 comments 0 reactions 0 assignees View on GitHub
needs: triage type: bug
Dominant language
Rust
Stars
21k
Forks
675
Avg merge
1d 6h
Merged PRs (30d)
180

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?

GUI (desktop app)

### OpenLogi version

0.7.1

### Operating system

Linux

### OS version & architecture

CachyOS Rolling

### Device model

MX Master

### How is the device connected?

Other / not sure

### Affected area(s)

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

### What happened?

I had the daemon running, and things seem fine but the moment I opened the GUI app my scroll constantly jumps way up, usually to the top of whatever I'm looking at.

### Steps to reproduce

1. Open the GUI app
2. Exist on any scrollable window

### Diagnostics report

```markdown
### OpenLogi Diagnostics

**App**
- OpenLogi (GUI): v0.7.1 (release)
- Agent: v0.7.1 (connected)
- IPC protocol: GUI 17 / agent 17
- Inventory: ready
- OS: Linux (x86_64)
- Locale: en-US (UI: follow system)
- Accessibility: granted · Input hook: installed
- Launch at login: no · Menu bar: yes · Update check: on
- Running from: source build (dev)
- Config: schema 4 · 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)**
- MX Master — mouse (codename: MX Master)
- Connection: Logi Unifying receiver · Online: yes · Battery: 50% (discharging, good)
- Capabilities: buttons=yes, pointer=yes, lighting=no
- Model: 0b01e (wpid: 4071, model-ids: b01e/4071/0000, ext-model: 00)
- Transports: eQuad, BTLE
- Render: mx_master_cr · Slot 1

**Receivers (1)**
- Unifying Receiver (VID 046d / PID c52b)
```

### `openlogi list` output

```text
Unifying Receiver (B9959AB8, vid=046d pid=c52b)
└─ slot 1 ● MX Master (mouse, wpid=4071, battery=50% good (discharging))
model_ids=[b01e,4071,0000] ext=00 serial=— unit_id=e49c58db transports=equad+btle
```

### Logs

```shell
2026-08-19T23:28:12.897136Z DEBUG openlogi_core::single_instance: single-instance lock acquired path=/home/andersmmg/.config/openlogi/agent.lock
2026-08-19T23:28:12.897596Z INFO openlogi_agent::overlay: Actions Ring overlay started path=/usr/bin/openlogi-overlay
2026-08-19T23:28:12.899129Z DEBUG openlogi_agent::launch_agent: systemd user unit already absent
2026-08-19T23:28:12.899699Z INFO openlogi_agent: openlogi-agent started
2026-08-19T23:28:12.899751Z INFO openlogi_agent: accessibility granted — installing OS mouse hook
2026-08-19T23:28:12.899752Z DEBUG openlogi_hook::linux: frontmost: session kind = Wayland
2026-08-19T23:28:12.900006Z DEBUG openlogi_hook::linux: not hooking /dev/input/event23 (ydotoold virtual device): not a Logitech device
2026-08-19T23:28:12.900259Z INFO openlogi_agent::server: IPC server listening
2026-08-19T23:28:12.900711Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c52b usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-19T23:28:12.900753Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c52b usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-19T23:28:12.900817Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech USB Receiver pid=c52b usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-19T23:28:12.900845Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0x0001 usage_id=0x0006 matched=false
2026-08-19T23:28:12.900861Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0x0001 usage_id=0x0002 matched=false
2026-08-19T23:28:12.900876Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0x0001 usage_id=0x0001 matched=false
2026-08-19T23:28:12.900890Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0x000c usage_id=0x0001 matched=false
2026-08-19T23:28:12.900908Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0x0001 usage_id=0x0080 matched=false
2026-08-19T23:28:12.900922Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0xff00 usage_id=0x0001 matched=false
2026-08-19T23:28:12.900931Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0xff00 usage_id=0x0002 matched=true
2026-08-19T23:28:12.900942Z DEBUG openlogi_hid::transport: logitech HID node name=Logitech MX Master pid=4071 usage_page=0xff00 usage_id=0x0004 matched=false
2026-08-19T23:28:12.901118Z DEBUG openlogi_hook::linux: frontmost: using 'wlr-foreign-toplevel' backend
2026-08-19T23:28:12.901133Z DEBUG openlogi_core::single_instance: single-instance lock acquired path=/home/andersmmg/.config/openlogi/overlay.lock
2026-08-19T23:28:12.902195Z DEBUG openlogi_hid::inventory: HID++ candidate interfaces count=1
2026-08-19T23:28:12.902357Z DEBUG RPC{rpc.deadline=2026-08-19T23:28:22.902155249Z otel.kind="client" otel.name=Agent.protocol_version rpc.trace_id=00}: tarpc::client: SendRequest
2026-08-19T23:28:12.902380Z DEBUG openlogi_hid::transport: opened HID++ channel name=Logitech USB Receiver vid=046d
2026-08-19T23:28:12.902538Z DEBUG RPC{rpc.trace_id=00 rpc.deadline=2026-08-19T23:28:22.902275371Z otel.kind="server"}: tarpc::server: ReceiveRequest
2026-08-19T23:28:12.902573Z DEBUG RPC{rpc.trace_id=00 rpc.deadline=2026-08-19T23:28:22.902275371Z otel.kind="server"}: tarpc::server: BeginRequest
2026-08-19T23:28:12.902639Z DEBUG RPC{rpc.trace_id=00 rpc.deadline=2026-08-19T23:28:22.902275371Z otel.kind="server" otel.name="Agent.protocol_version"}: tarpc::server: CompleteRequest
2026-08-19T23:28:12.902654Z DEBUG RPC{rpc.trace_id=00 rpc.deadline=2026-08-19T23:28:22.902275371Z otel.kind="server" otel.name="Agent.protocol_version"}: tarpc::server: BufferResponse
2026-08-19T23:28:12.902681Z DEBUG RPC{rpc.trace_id=00 rpc.deadline=2026-08-19T23:28:22.902275371Z otel.kind="server" otel.name="Agent.protocol_version"}: tarpc::server: SendResponse
2026-08-19T23:28:12.902766Z DEBUG RPC{rpc.deadline=2026-08-19T23:28:22.902155249Z otel.kind="client" otel.name=Agent.protocol_version rpc.trace_id=00}: tarpc::client: ReceiveResponse
2026-08-19T23:28:12.902842Z DEBUG RPC{rpc.deadline=2026-08-19T23:28:37.902816515Z otel.kind="client" otel.name=Agent.next_action_ring rpc.trace_id=00}: tarpc::client: SendRequest
2026-08-19T23:28:12.902888Z DEBUG RPC{rpc.trace_id=00 rpc.deadline=2026-08-19T23:28:37.902855063Z otel.kind="server"}: tarpc::server: ReceiveRequest
2026-08-19T23:28:12.902900Z DEBUG RPC{rpc.trace_id=00 rpc.deadline=2026-08-19T23:28:37.902855063Z otel.kind="server"}: tarpc::server: BeginRequest
2026-08-19T23:28:12.903753Z DEBUG cosmic_text::font::system: Locale: en-US
2026-08-19T23:28:12.906768Z DEBUG openlogi_hid::inventory::probe: receiver reports pairing count pairing_count=Some(1)
2026-08-19T23:28:12.925195Z DEBUG openlogi_agent_core::watchers::foreground_app: frontmost app changed current=Some("kitty") last=None
2026-08-19T23:28:12.937970Z DEBUG cosmic_text::font::system: Parsed 1019 font faces in 34ms.
2026-08-19T23:28:12.939349Z INFO gpui_linux::linux::platform: Compositor GPU hint: vendor=0x8086, device=0xa7a8 (from dev 226:128)
2026-08-19T23:28:12.965394Z DEBUG openlogi_hook::linux: not hooking /dev/input/event16 (keyd virtual pointer): not a Logitech device
2026-08-19T23:28:12.965477Z DEBUG openlogi_hook::linux: not hooking /dev/input/event14 (ELAN0788:00 04F3:321A Touchpad): not a Logitech device
2026-08-19T23:28:12.965511Z DEBUG openlogi_hook::linux: not hooking /dev/input/event13 (ELAN0788:00 04F3:321A Mouse): not a Logitech device
2026-08-19T23:28:13.009058Z INFO openlogi_agent_core::hook_runtime: OS input hook installed
2026-08-19T23:28:13.009160Z DEBUG openlogi_hook::linux: hook started on /dev/input/event4
```

### 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

Reproduce on Linux Wayland with an MX Master, the daemon running, and the GUI opening while a scrollable window is focused. Start by tracing the Linux input path in openlogi_hook::linux and the hook startup in openlogi_agent_core::hook_runtime, using the supplied logs as context. Done means opening the GUI no longer causes repeated upward scroll jumps.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.