After trying many other solutions listed here, logiops has worked great so far: custom button-mapping, gesture support, smart shift, etc. Nearly every LogiOptions feature seems to be supported by it. I'm running Ubuntu 20.04.4 LTS and using an MX Master 3.
Folks may be put off by it because there's no GUI, and build and installation aren't trivial (I had a problem where cmake couldn't find libevdev). That being said, Danish Shakeel's Configure Logitech MX Master 3 on Linux blog post helped quite a bit, especially for getting started with the configuration file. The documentation for the configuration file is quite good, but it can get a little tricky and there aren't many examples out there aside from the example in the repository.
For what it's worth, here's my configuration (located at /etc/logid.cfg by default):
devices: (
{
name: "Wireless Mouse MX Master 3";
smartshift:
{
on: true;
threshold: 30;
default_threshold: 30;
};
hiresscroll:
{
hires: true;
invert: true;
target: false;
};
dpi: 1700;
buttons: (
{
cid: 0x52; // scroll wheel button
action =
{
type: "Keypress";
keys: [ "KEY_RIGHTMETA" ]; // open activities overview
}
},
{
cid: 0x53; // back button
action =
{
type: "Keypress";
keys: [ "KEY_RIGHTMETA", "KEY_PAGEDOWN" ]; // move to previous space
}
},
{
cid: 0x56; // forward button
action =
{
type: "Keypress";
keys: [ "KEY_RIGHTMETA", "KEY_PAGEUP" ]; // move to next space
}
},
{
cid: 0xc4; // mode shift button
action =
{
type: "Keypress";
keys: [ "KEY_RIGHTMETA", "KEY_A" ]; // show applications
}
}
);
}
);
For mapping keyboard shortcuts, refer to /usr/include/linux/input.h.
Solaar
. Don't bother with WINE IMHO.