[Bug]: Mouse does not follow keyboard on Easy-Switch host change
- 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.1
### Operating system
macOS
### OS version & architecture
macOS 26, Apple Silicon (M2 Max)
### Device model
MX Keys S + MX Master 3S, testé via Logi Bolt receiver ET en Bluetooth direct
### How is the device connected?
Logi Bolt receiver
### Affected area(s)
- [ ] Device discovery / detection
- [ ] Button remapping
- [ ] DPI control
- [ ] SmartShift
- [ ] Per-application profiles
- [ ] Battery status
- [ ] Settings / configuration (TOML)
- [ ] Auto-update
- [ ] Menu bar / tray
- [x] Other
### What happened?
Per the docs/FAQ, "OpenLogi drives Easy-Switch host switching over HID++ (0x1814/0x1815), and paired mice follow the keyboard when it switches hosts." In my setup (MX Keys S + MX Master 3S), pressing the keyboard's Easy-Switch key always switches the keyboard correctly, but the mouse never follows — tested exhaustively:
- macOS ↔ Ubuntu 26.04, both directions
- Both devices Bluetooth-direct, and re-paired via a Logi Bolt receiver (ruling out transport as the cause)
- Easy-Switch channel numbers confirmed matching between keyboard and mouse (1=macOS, 2=Ubuntu)
- All required Input Monitoring permissions granted on macOS, individually, to OpenLogi, OpenLogi Agent, and the terminal app used for diagnostics
- Ran the agent with RUST_LOG=debug during a full switch round-trip: no log line whatsoever references ChangeHost, 0x1814, HostsInfo, or any attempt to command the mouse — only routine gesture-session bookkeeping
Given the "OS version" dropdown here notes Linux support is still a stub, I suspect this is expected on the Ubuntu side, but I'd expect the macOS agent (which is the "supported" platform) to at least attempt the mouse-follow logic when switching away from macOS. It does not, per the debug log above.
Expected: mouse follows keyboard to the new host.
Actual: only the keyboard switches; the mouse must be switched separately via its own physical Easy-Switch button.
Full write-up with permission-troubleshooting notes and Bolt-pairing workaround details: [link to your bug-report-openlogi-mouse-follow.md file if you host it, or paste inline]
Given the debug logs show zero attempt at ChangeHost/HostsInfo during the actual switch event (see Logs section below), my conclusion is that the mouse-follow logic described in the FAQ likely isn't implemented in the agent yet — this may be better tracked as a feature request than a bug, but I'm filing as a bug since the docs currently describe it as existing behavior.
### Steps to reproduce
1. Pair MX Keys S and MX Master 3S to two hosts (macOS + Ubuntu 26.04) on matching Easy-Switch channels (e.g. channel 1 = macOS, channel 2 = Ubuntu).
2. Ensure openlogi-agent is running on both machines (confirmed via `pgrep -af openlogi-agent` on Linux and via the granted-permissions state on macOS).
3. With keyboard and mouse both connected to macOS (channel 1), press the keyboard's Easy-Switch key 2 to switch to Ubuntu.
4. Observe: keyboard switches to Ubuntu (disappears from the macOS OpenLogi inventory). Mouse remains connected to macOS.
5. Repeat in reverse (Ubuntu → macOS): same result, only the keyboard switches.
6. Repeated the whole test after removing the Bluetooth-direct pairing and re-pairing both devices to a Logi Bolt receiver instead (via Solaar, since OpenLogi's own "Add Device" flow failed with `pairing error 0x01` for the mouse) — identical result.
7. Ran `RUST_LOG=debug /usr/bin/openlogi-agent` on Ubuntu during a full round-trip switch: no log line references ChangeHost, 0x1814, or HostsInfo at any point.
### Diagnostics report
```markdown
### OpenLogi Diagnostics
**App**
- OpenLogi (GUI): v0.8.1 (release)
- Agent: v0.8.1 (connected)
- IPC protocol: GUI 28 / agent 28
- Inventory: ready
- OS: macOS 26.6.2 (arm64)
- Locale: fr-FR (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 6 · 2 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 (2)**
- MX Master 3S — mouse
- Connection: unknown · Online: no · Battery: n/a
- Capabilities: buttons=yes, pointer=yes, lighting=no
- Model: 0b034
- Render: mx_master_3s · Slot 0
- MX Keys S — keyboard
- Connection: unknown · Online: no · Battery: n/a
- Capabilities: buttons=yes, pointer=no, lighting=no
- Model: 1b378
- Render: mx_keys_s · Slot 0
```
### `openlogi list` output
```text
MX Master 3S (—, vid=046d pid=b034)
└─ slot 255 ● MX Master 3S (mouse, wpid=?, battery=85% full (discharging))
model_ids=[b034,0000,0000] ext=00 serial=2337LZ51NFH8 unit_id=421caab9 transports=btle
MX KEYS S (—, vid=046d pid=b378)
└─ slot 255 ● MX Keys S (keyboard, wpid=?, battery=100% full (full))
model_ids=[b378,0000,0000] ext=01 serial=2419CE0B6758 unit_id=bd169ec7 transports=btle
```
### Logs
```shell
2026-08-29T15:07:35.710713Z DEBUG openlogi_hid::transport: HID channel disconnected name=MX KEYS S
2026-08-29T15:07:35.711162Z DEBUG openlogi_agent_core::watchers::inventory: hotplug event — enumerating early event=Disconnected
2026-08-29T15:07:36.113054Z DEBUG openlogi_device::inventory: HID++ candidate interfaces count=1
2026-08-29T15:07:36.916211Z DEBUG openlogi_device::session::gesture: control capture stopped index=255
[... ~7.5s of routine re-enumeration of the mouse only (count=1), no other activity ...]
2026-08-29T15:07:43.266648Z DEBUG openlogi_agent_core::watchers::inventory: hotplug event — enumerating early event=Connected
2026-08-29T15:07:43.669907Z DEBUG openlogi_device::inventory: HID++ candidate interfaces count=2
2026-08-29T15:07:45.910129Z DEBUG openlogi_agent_core::orchestrator: device(s) require capture re-arm generation=2
```
### 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-agent host-switch path and the HID++ ChangeHost/HostsInfo handling described in the report. Reproduce the keyboard switch with RUST_LOG=debug on macOS and Ubuntu, then trace why no mouse command is attempted. Done means the paired mouse follows the keyboard in both directions without breaking Bluetooth or Logi Bolt connections.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, rust, ubuntu
- Domain
- desktop-dev, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100