Various Logitech mice implement something called hi-res scrolling. This means instead of having the content move for 3 lines for each scroll movement, you can scroll per-pixel. This gives a precise and smooth experience while scrolling.

Enabling the feature

First off, we need to enable this feature. Solaar is able to do so when using the Logitech USB receiver. Install it as follows:

1
2
3
4
5
git clone https://github.com/pwr-Solaar/Solaar.git
cd Solaar
sudo bash -c 'umask 022 ; pip3 install .'
sudo cp rules.d/42-logitech-unify-permissions.rules /etc/udev/rules.d/
cp share/autostart/solaar.desktop ~/.config/autostart/

If pip isn’t installed, install it using sudo apt install -y python3-pip

This will install Solaar, give regular users write access to Logitech HID devices, and ensure Solaar autostarts on login so the feature is enabled at boot.

Run solaar and enable Wheel Resolution.

Scroll resolution

Now scrolling will be awfully fast, so we need to tell each scroll event matches 1 pixel instead of the default 15. Horizontal scrolling still uses an ordinary wheel click, so we need to make sure that wheel behaves as always.

Create a new udev hwdb file: sudo nano /etc/udev/hwdb.d/71-logitech-mouse.hwdb, and enter the following information:

# USB
mouse:*:name:Logitech MX Master 3:
    MOUSE_WHEEL_CLICK_ANGLE=1
    MOUSE_WHEEL_CLICK_COUNT=360
    MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL=26
    MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL=14

# Bluetooth
mouse:*:name:MX Master 3 Mouse:
    MOUSE_WHEEL_CLICK_ANGLE=1
    MOUSE_WHEEL_CLICK_COUNT=360
    MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL=26
    MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL=14

This will match my MX Master 3 mouse using its name for each protocol. Specifying the protocol using mouse:{usb,bluetooth} doesn’t work for me for unknown reasons. You can find the name by connecting the mouse using each protocol and looking it up in xinput. The bluetooth block is for informative purposes. Hi-res scrolling has not been enabled on this protocol yet.

Now reload these settings using the following commands to give them a try.

1
2
sudo systemd-hwdb update
sudo udevadm trigger /dev/input/event*

If the settings seem to have no effect, make sure the name in 71-logitech-mouse.hwdb is correct.

Enjoy your new smooth scrolling!

Virtual Machines

Scrolling in a Windows 10 guest in Virtualbox behaves strangely now. Not sure how to fix that yet.