Настройка чувствительности скроллинга мышью в Linux


Первым делом, получаем список доступных в системе устройств ввода:

$ xinput list
⎡ Virtual core pointer                         id=2   [master pointer (3)]
⎜  ↳ Virtual core XTEST pointer               id=4   [slave pointer (2)]
⎜  ↳ Logitech USB Optical Mouse               id=9   [slave pointer (2)]
⎣ Virtual core keyboard                        id=3   [master keyboard (2)]
   ↳ Virtual core XTEST keyboard              id=5   [slave keyboard (3)]
   ↳ Power Button                             id=6   [slave keyboard (3)]
   ↳ Power Button                             id=7   [slave keyboard (3)]
   ↳ Logitech USB Keyboard                    id=10  [slave keyboard (3)]
   ↳ Logitech USB Keyboard                    id=11  [slave keyboard (3)]
   ↳ Eee PC WMI hotkeys                       id=12  [slave keyboard (3)]
   ↳ C-Media Electronics Inc.      Microsoft LifeChat LX-3000 id=8   [slave keyboard (3)]

Нас интересуем мышь и ее идентификатор девять (Logitech USB Optical Mouse id=9). Далее, мы можем запросить список всех доступных для нашего устройства ввода параметров (при помощи все той же команды xinput):

$ xinput list-props 9
Device 'Logitech USB Optical Mouse':
       Device Enabled (154):  1
       Coordinate Transformation Matrix (156): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
       Device Accel Profile (285):    0
       Device Accel Constant Deceleration (286):      1.000000
       Device Accel Adaptive Deceleration (287):      1.000000
       Device Accel Velocity Scaling (288):   10.000000
       Device Product ID (275):       1133, 49271
       Device Node (276):     "/dev/input/event3"
       Evdev Axis Inversion (289):    0, 0
       Evdev Axes Swap (291): 0
       Axis Labels (292):     "Rel X" (164), "Rel Y" (165), "Rel Vert Wheel" (284)
       Button Labels (293):   "Button Left" (157), "Button Middle" (158), "Button Right" (159), "Button Wheel Up" (160), "Button Wheel Down" (161), "Button Horiz Wheel Left" (162), "Button Horiz Wheel Right" (163), "Button Side" (279), "Button Extra" (280), "Button Forward" (281), "Button Back" (282), "Button Task" (283), "Button Unknown" (278), "Button Unknown" (278), "Button Unknown" (278), "Button Unknown" (278)
       Evdev Scrolling Distance (294): 1, 1, 1
       Evdev Middle Button Emulation (295):   0
       Evdev Middle Button Timeout (296):     50
       Evdev Middle Button Button (297):      2
       Evdev Third Button Emulation (298):    0
       Evdev Third Button Emulation Timeout (299):    1000
       Evdev Third Button Emulation Button (300):     3
       Evdev Third Button Emulation Threshold (301):  20
       Evdev Wheel Emulation (302):   0
       Evdev Wheel Emulation Axes (303):      0, 0, 4, 5
       Evdev Wheel Emulation Inertia (304):   10
       Evdev Wheel Emulation Timeout (305):   200
       Evdev Wheel Emulation Button (306):    4
       Evdev Drag Lock Buttons (307): 0

Как вы видите параметров с которыми можно поиграть достаточно много, но меня конкретно интересовало все связанное с колесом прокрутки. Названия параметров достаточно информативные и за скроллинг отвечает (Evdev Scrolling Distance), а более подробно про все параметры можно почитать тут https://www.mankier.com/4/evdev. Итак, если вам лень читать инструкцию, то эти три параметра это:

Option "VertScrollDelta" "integer"
The amount of motion considered one unit of scrolling vertically. Default: "1". Property: "Evdev Scrolling Distance".
Option "HorizScrollDelta" "integer"
The amount of motion considered one unit of scrolling horizontally. Default: "1". Property: "Evdev Scrolling Distance".
Option "DialDelta" "integer"
The amount of motion considered one unit of turning the dial. Default: "1". Property: "Evdev Scrolling Distance".

Честно говоря совершено не информативно и совершенно непонятно где применяется горизонтальный скроллинг. Экспериментальным путем я выяснил, что чувствительностью скроллинга можно управлять увеличивая или уменьшая первый параметр:

$ xinput set-prop 9 'Evdev Scrolling Distance' 4 1 1

Чем он выше, тем больше "срабатываний датчика прокрутки" потребуется на одно перемещение и следовательно, установив его например равным четырем вы добьетесь в четыре раза более медленной прокрутки страницы по сравнению со значением по умолчанию.