7.6 KiB
| title | layout |
|---|---|
| Configuring an MX Master | page |
Configuring an MX Master 3 / 3S
People often arrive at Solaar from Logitech Options+ or LogiOps expecting to find the same gestures and button remappings, and get stuck because Solaar does not present them as a single list of behaviours. The work is split across two layers, and a setup only works when both are right — which is the usual reason a rule "does nothing".
This page walks through a complete MX Master 3 / 3S configuration. Everything on it was checked against an MX Master 3S on a Logi Bolt receiver; other MX mice work the same way, though the exact set of buttons differs.
The two layers
Settings live on the device and are applied by Solaar whenever the device connects. Scroll behaviour, DPI and SmartShift are settings, and nothing else is needed to use them.
Rules live in ~/.config/solaar/rules.yaml and react to notifications sent by
the device. A button only sends notifications once its Key/Button Diversion is
changed from Regular, so a rule that matches a button you have not diverted can
never fire.
| What you want | Diversion needed | Rule needed |
|---|---|---|
| DPI, SmartShift, scroll direction | no | no |
| A button that types a key combination | Diverted |
yes |
| Mouse gestures (hold a button, move) | Mouse Gestures |
yes |
| Thumb wheel doing something other than horizontal scroll | Thumb Wheel Diversion on |
yes |
What your mouse reports
Start from what the device actually says rather than from a list of button names copied from somewhere else:
solaar show
The Reprogrammable keys section lists every button with the exact name to use in
rules. Only buttons whose report includes divertable can be diverted. On an
MX Master 3S:
0: Left Button , default: Left Click
1: Right Button , default: Right Click
2: Middle Button , default: Mouse Middle Button
3: Back Button , default: Mouse Back Button
4: Forward Button , default: Mouse Forward Button
5: Mouse Gesture Button , default: Gesture Button Navigation
6: Smart Shift , default: Smart Shift
7: Virtual Gesture Button , default: Virtual Gesture Button
Mouse Gesture Button is the large thumb button, and Smart Shift is the button
behind the scroll wheel.
Settings that need no rules
These are set in the main window and are all Solaar needs to know about:
| Setting | Notes |
|---|---|
Sensitivity (DPI) |
Pointer speed, in steps the device reports. |
Scroll Wheel Ratcheted |
Ratcheted for a clicky wheel, Free Spinning for a free wheel. |
Scroll Wheel Ratchet Speed |
How fast the wheel must spin before it disengages the ratchet — the equivalent of a SmartShift threshold. |
Scroll Wheel Direction, Thumb Wheel Direction |
Invert a wheel. |
Scroll Wheel Resolution |
High-resolution scrolling. |
Remapping a button
Two steps, both required.
1. Divert the button. In the main window, set Key/Button Diversion for the
button to Diverted. From the command line:
solaar config "MX Master 3S" divert-keys "Mouse Gesture Button" Diverted
2. Add a rule that matches the button and does something. Rules can be written
in the rule editor (main window, Rule Editor) or directly in
~/.config/solaar/rules.yaml.
Thumb button opens the GNOME overview
---
- Key: [Mouse Gesture Button, pressed]
- KeyPress: [Super_L]
...
Back and Forward navigate in the browser
The two side buttons already send back/forward events by default. Divert them only if you want something else — here, the keyboard shortcuts that also work in applications that ignore the dedicated buttons:
---
- Key: [Back Button, pressed]
- KeyPress: [Alt_L, Left]
...
---
- Key: [Forward Button, pressed]
- KeyPress: [Alt_L, Right]
...
KeyPress takes X11 key symbol names, not evdev key codes: Super_L, not
KEY_LEFTMETA.
Mouse gestures
Set Key/Button Diversion for the thumb button to Mouse Gestures rather than
Diverted. Holding that button, moving the mouse, and releasing it then produces a
single notification describing the movement, which MouseGesture conditions match.
Switching workspaces by holding the thumb button and flicking left or right:
---
- MouseGesture: [Mouse Left]
- KeyPress: [Super_L, Page_Up]
...
---
- MouseGesture: [Mouse Right]
- KeyPress: [Super_L, Page_Down]
...
A gesture can chain several movements, so [Mouse Up, Mouse Up] is a different
gesture from [Mouse Up]. Pressing and releasing the button without moving
produces a No-op gesture, which can be given its own rule — useful for keeping an
action on a button that is otherwise used for gestures.
Thumb wheel
Turn on Thumb Wheel Diversion, then match the wheel with thumb_wheel_up and
thumb_wheel_down. Switching browser tabs:
---
- Feature: THUMB WHEEL
- Rule: [Test: [thumb_wheel_up, 5], KeyPress: [Control_L, Shift_L, Tab]]
- Rule: [Test: [thumb_wheel_down, 5], KeyPress: [Control_L, Tab]]
...
The integer argument matters. The thumb wheel reports many small increments, so a
bare thumb_wheel_up test fires far too often for a discrete action like changing
tabs. With a parameter the test is only true once the accumulated displacement
passes that value, and the displacement is then reduced by it — raise the number
for slower switching, lower it for faster.
A complete example
%YAML 1.3
---
- Key: [Mouse Gesture Button, pressed]
- KeyPress: [Super_L]
...
---
- Key: [Back Button, pressed]
- KeyPress: [Alt_L, Left]
...
---
- Key: [Forward Button, pressed]
- KeyPress: [Alt_L, Right]
...
---
- Feature: THUMB WHEEL
- Rule: [Test: [thumb_wheel_up, 5], KeyPress: [Control_L, Shift_L, Tab]]
- Rule: [Test: [thumb_wheel_down, 5], KeyPress: [Control_L, Tab]]
...
with Key/Button Diversion set to Diverted for Mouse Gesture Button,
Back Button and Forward Button, and Thumb Wheel Diversion turned on.
Coming from LogiOps
logid.cfg |
Solaar |
|---|---|
dpi: 1500 |
Sensitivity (DPI) setting |
smartshift: { on: true; threshold: 15 } |
Scroll Wheel Ratcheted and Scroll Wheel Ratchet Speed |
hiresscroll: { hires: ... } |
Scroll Wheel Resolution setting |
buttons: ({ cid: 0xc3; action = Keypress ... }) |
divert Mouse Gesture Button, then a Key rule with KeyPress |
cid: 0x53 / cid: 0x56 |
Back Button / Forward Button |
gestures on a button |
Key/Button Diversion set to Mouse Gestures, then MouseGesture rules |
evdev names (KEY_LEFTMETA) |
X11 key symbols (Super_L) |
Control IDs do not appear in Solaar's interface; use the button names from
solaar show instead.
Do not run LogiOps and Solaar against the same device at the same time. Both reprogram the same controls, and whichever writes last wins, which looks like settings randomly reverting.
Session notes
KeyPress, MouseScroll and MouseClick actions are performed through a uinput
virtual device, so they work under both X11 and Wayland. This needs Solaar's udev
rule to be installed; see the installation page.
Two kinds of condition are more limited under Wayland, because no Wayland protocol exposes what they need:
Modifiersconditions cannot read the keyboard modifier state.ProcessandMouseProcessconditions need the Solaar GNOME extension, and work only under GNOME.
Solaar reports both limitations at startup when it detects a Wayland session.
For the full set of conditions and actions see the rules page.