Pre-flight checklist
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)
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.
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)
Pre-flight checklist
masterbuild.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)
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.
Diagnostics report
openlogi listoutputLogs
$ 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)