Skip to content

[Bug]: Linux (Ubuntu 24.04)/X11: OpenLogi virtual mouse ignores GNOME natural scrolling setting #1358

Description

@Luciano-Pinto

Pre-flight checklist

  • I searched existing issues and this is not a duplicate.
  • I am on the latest release or a recent master build.
  • 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

Linux

OS version & architecture

Ubuntu (24.04.5 LTS) kernel 6.8.0-90-generic

Device model

MX Ergo S (bluetooth)

How is the device connected?

Bluetooth (direct, no 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
  • Other

What happened?

Title: Linux/X11: OpenLogi virtual mouse ignores GNOME natural scrolling setting

Environment

Ubuntu, GNOME on X11

Logitech MX Ergo S

OpenLogi

Natural scrolling enabled in GNOME

Problem

After OpenLogi creates its virtual mouse devices, scrolling becomes traditional even though natural scrolling is enabled in GNOME. This could only be fixed by CLI direct intervention, as described below

And a correlated situation is, when configuring the scrolling inversion via CLI, the inversion also applies to the tilting action of the wheel. In other words, when the inversion is active via CLI, the wheel tilting to left makes the content of focused application scroll to the right, and vice-versa. The prefered output would be to isolate the vertical scrolling from horizontal scrolling so that we could configure them separately.

Steps to reproduce

The physical MX Ergo S correctly reports:

libinput Natural Scrolling Enabled: 1

but OpenLogi's virtual mouse devices report:

libinput Natural Scrolling Enabled: 0

Example:

MX Ergo S Mouse id=11
OpenLogi virtual mouse id=14
OpenLogi virtual mouse id=15

Physical device:

$ xinput list-props 11
libinput Natural Scrolling Enabled (...): 1

OpenLogi virtual devices:

$ xinput list-props 14
libinput Natural Scrolling Enabled (...): 0

$ xinput list-props 15
libinput Natural Scrolling Enabled (...): 0

The MX Ergo S does not expose native HID++ scroll inversion support in OpenLogi, so there is no scroll-direction option available in the OpenLogi UI.

Workaround

Setting natural scrolling directly on the OpenLogi virtual devices via CLI fixes the issue immediately:

Bash
$ xinput set-prop 14 "libinput Natural Scrolling Enabled" 1
xinput set-prop 15 "libinput Natural Scrolling Enabled" 1

A persistent X11 workaround is:

$ sudo mkdir -p /etc/X11/xorg.conf.d
sudo nano /etc/X11/xorg.conf.d/90-openlogi-natural-scroll.conf

and in the file insert:

Section "InputClass"
Identifier "OpenLogi natural scrolling"
MatchProduct "OpenLogi virtual mouse"
MatchIsPointer "on"
Driver "libinput"
Option "NaturalScrolling" "true"
EndSection

Expected behavior

OpenLogi virtual mouse devices should inherit or preserve the desktop environment's natural-scrolling setting, or OpenLogi should provide a software scroll-inversion fallback for devices that do not support native HID++ inversion.

Actual behavior

OpenLogi virtual mouse devices start with natural scrolling disabled, overriding the effective behavior of the physical mouse.

Below is a printscreen of the OpenLogi interface showing the impossibility of setting scroll inversion on the GUI.

Image

Diagnostics report

### OpenLogi Diagnostics

**App**
- OpenLogi (GUI): v0.8.3 (release)
- Agent: v0.8.3 (connected)
- IPC protocol: GUI 29 / agent 29
- Inventory: ready
- OS: Linux (x86_64)
- Locale: pt-BR (UI: follow system)
- Accessibility: granted · Input hook: installed
- Launch at login: yes · Menu bar: yes · Update check: on
- 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 (2)**
- MX Ergo S — trackball (codename: MX Ergo S)
  - Connection: Bluetooth (direct) · Online: yes · Battery: 45% (discharging, good)
  - Capabilities: buttons=yes, pointer=yes, lighting=no
  - DPI: 600 dpi (range 100–4000, 79 steps)
  - Model: 0b03e (model-ids: b03e/0000/0000, ext-model: 00)
  - Transports: BTLE
  - Render: mx_ergo_s · direct
- C922 Pro Stream Webcam — camera
  - Connection: unknown · Online: yes · Battery: n/a
  - Capabilities: not probed
  - Model: 085c
  - Render: ⚠️ none (silhouette) · Slot 0

openlogi list output

$ openlogi list                                                                                     ✔  12:19:56 
(inventory read from the running agent)
MX Ergo S (—, vid=046d pid=b03e)
  └─ slot 255 ● MX Ergo S (trackball, wpid=?, battery=45% good (discharging))
          model_ids=[b03e,0000,0000] ext=00 serial=2621ZA621128 unit_id=26e472dc transports=btle

Cameras (1 Logitech UVC)
  └─ ● C922 Pro Stream Webcam (camera, vid=046d pid=085c, up to 2304x1536@60, id=/dev/v4l/by-id/usb-046d_C922_Pro_Stream_Webcam_C8C03CCF-video-index0)

Logs

$ OPENLOGI_LOG=debug openlogi list                                                                  ✔  12:19:59 
2026-09-11T15:20:58.680528Z DEBUG RPC{rpc.deadline=2026-09-11T15:21:08.680484284Z otel.kind="client" otel.name=Agent.protocol_version rpc.trace_id=00}: tarpc::client: SendRequest
2026-09-11T15:20:58.680617Z DEBUG RPC{rpc.deadline=2026-09-11T15:21:08.680484284Z otel.kind="client" otel.name=Agent.protocol_version rpc.trace_id=00}: tarpc::client: ReceiveResponse
2026-09-11T15:20:58.680642Z DEBUG RPC{rpc.deadline=2026-09-11T15:21:08.680636420Z otel.kind="client" otel.name=Agent.declare_client rpc.trace_id=00}: tarpc::client: SendRequest
2026-09-11T15:20:58.680690Z DEBUG RPC{rpc.deadline=2026-09-11T15:21:08.680636420Z otel.kind="client" otel.name=Agent.declare_client rpc.trace_id=00}: tarpc::client: ReceiveResponse
2026-09-11T15:20:58.680704Z DEBUG RPC{rpc.deadline=2026-09-11T15:21:08.680700099Z otel.kind="client" otel.name=Agent.snapshot rpc.trace_id=00}: tarpc::client: SendRequest
2026-09-11T15:20:58.680763Z DEBUG RPC{rpc.deadline=2026-09-11T15:21:08.680700099Z otel.kind="client" otel.name=Agent.snapshot rpc.trace_id=00}: tarpc::client: ReceiveResponse
(inventory read from the running agent)
MX Ergo S (—, vid=046d pid=b03e)
  └─ slot 255 ● MX Ergo S (trackball, wpid=?, battery=45% good (discharging))
          model_ids=[b03e,0000,0000] ext=00 serial=2621ZA621128 unit_id=26e472dc transports=btle

Cameras (1 Logitech UVC)
  └─ ● C922 Pro Stream Webcam (camera, vid=046d pid=085c, up to 2304x1536@60, id=/dev/v4l/by-id/usb-046d_C922_Pro_Stream_Webcam_C8C03CCF-video-index0)

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).

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

    needs: triageNeeds maintainer triagetype: bugSomething is broken or behaves incorrectly

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions