Skip to content

[Device]: MX Anywhere 2S gesture button (CID 0x0052, task 0x00a9) is never captured — preserved MiddleClick map is dead and the factory Mission Control leaks #1471

Description

@f-o-s-s-b-i-t-e

Pre-flight checklist

Which part of OpenLogi?

Agent (capture plan). The GUI shows the binding exactly as configured.

OpenLogi version

0.8.5

Operating system

macOS 15.7.9 (x86_64)

Device model

MX Anywhere 2S

How is the device connected?

Bluetooth (direct, no receiver) — 046d:b01aunit:e6c912de

Affected area(s)

  • Button remapping

What happened?

On the MX Anywhere 2S the physical button behind the wheel is the middle button, and HID++ reports it with the gesture-button task instead of an ordinary middle click. The control row from the agent's own capture log:

cid=0x0052 task=0x00a9 flags=0x0131 button=Middle Click

(0x00a9 = Gesture Button Navigation; flags = mouse + reprogrammable + divertable + raw-xy.)

v0.8.5 preserves my existing Middle Click gesture map and the GUI shows all five directions, but at runtime:

  • a quick press does not run Click — the mouse's factory gesture action (Mission Control) fires instead;
  • holding the button and moving in any direction never runs the bound direction.

The agent never arms the control: every capture session logs

control capture active index=255 gesture_sources=0 gesture_buttons=0 dpi_buttons=0 buttons=3 thumbwheel=false

and there are no gesture click / gesture committed lines in the log at all.

Steps to reproduce

  1. MX Anywhere 2S over Bluetooth-direct (no receiver), macOS.
  2. Config with a preserved Middle Click gesture map:
    [devices."unit:e6c912de".bindings.MiddleClick]
    Up    = "MissionControl"
    Down  = "ShowDesktop"
    Left  = "PrevTab"
    Right = "NextTab"
    Click = "CloseTab"
  3. Launch OpenLogi; the GUI shows Middle Click → 5 directions.
  4. Press the physical gesture/middle button → Mission Control (factory behavior).
  5. Hold it and move up/down/left/right → nothing.

Expected: click → Close Tab, hold+Up → Mission Control, hold+Down → Show Desktop, hold+Left/Right → previous/next tab, with the factory action gone.

Why (reading v0.8.5)

  • capture_plan.rs::hidpp_side_gesture_maps_for keeps only Back/Forward, so a gesture-mode Middle Click stays in the OS-hook map and is never requested as a HID++ raw-XY source.
  • divert_buttons excludes it too (.filter(|(_, button)| !oshook.contains_key(button))), so 0x0052 is never diverted at all.
  • On Bluetooth-direct, auxiliary-button CGEvents arrive with no sender identity, so the macOS hook correctly fails closed (button_source_may_remap) and passes the press through — this is the same reason fix(macos): capture side-button gestures over HID++ #722 moved Back/Forward onto the device's own HID++ channel.
  • The control therefore keeps executing its firmware task (Gesture Button Navigation), which is where the Mission Control comes from.

The button advertises the same capabilities as the Back/Forward controls that #722 already handles over HID++ (divertable + raw-xy), so the same path is available to it.

openlogi list output

(inventory read from the running agent)
MX Anywhere 2S (—, vid=046d pid=b01a)
  └─ slot 255 ● Wireless Mobile Mouse MX Anywhere 2S (mouse, wpid=?, battery=50% good (discharging))
          model_ids=[b01a,406a,0000] ext=00 serial=— unit_id=e6c912de transports=equad+btle

Logs

INFO openlogi_device::session::gesture: control capture active index=255 gesture_sources=0 gesture_buttons=0 dpi_buttons=0 buttons=3 thumbwheel=false wake_rearm=true

macOS permissions (if applicable)

  • OpenLogi has Accessibility permission
  • OpenLogi has Input Monitoring permission

Notes

I have a candidate fix that requests 0x0052 as a device-owned raw-XY gesture source on macOS and arms it only when the device's own control table declares a gesture-button task (0x00a9/0x00ad), so ordinary middle buttons (task 0x003a, e.g. MX Master 3S) keep their current behavior. I'll open a PR referencing this issue.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions