Murz
@Murz
Разработка сайтов на Drupal, поисковая оптимизация

Как настроить прокрутку элемента по зажатию средней кнопки мышки в Linux Xorg?

Хочется сделать так, чтобы при зажатой средней (или правой) кнопке мышки таскание мышки вверх-вниз прокручивало текущий элемент интерфейса вверх-вниз, т.е. делало скроллинг также как будто я тяну за полоску скролла справа. Именно так работает работает прокрутке на ноутбуке через тачпад двумя пальцами вверх вниз, но на полноценном компьютере тачпада нет, а прокрутку очень хочется ;)


Насколько я разобрался, нужно копать где-то в огороде xorg xinput. По-идее такой функционал уже есть в системе, т.к. при использовании тачпада когда делаешь скролл вниз двумя пальцами — работает именно так как надо. Вопрос в том как привязать включение этого режима к зажатию средней кнопки мышки. При этом хотелось бы оставить работоспособным обычный клик мышкой как нажатие третьей кнопки мышки. Может быть xinput тут не причем и нужно копать в display manger (использую kdm), но там тоже не нашёл похожего ничего.


Плагины, которые делают подобное, встречаются для Firefox и Chrome, но хочется чтобы это работало не только в отдельных приложениях, а сразу во всех элементах системы (Использую Ubuntu с оболочкой KDE, но и в GTK-приложениях чтобы тоже работало). Либо, если это нельзя сделать через xorg, то хотя бы какую-то программу запускать которая это делает — тоже было бы годно. Для виндовсов я встречал такую программу (по правой кнопки скроллит списки, но это было лет 5 назад и название уже не вспомню никак), а в линухах что-то никак не найду как это можно сделать. Подскажите пожалуйста как это можно сделать или хотя бы в какую сторону копать?
  • Вопрос задан
  • 8447 просмотров
Решения вопроса 1
iquantii
@iquantii
Так делаю я.
#!/bin/bash
nova_mouse_id=$(xinput list | grep pointer | grep NOVA | grep -o [0-9][0-9])
xinput set-prop $nova_mouse_id 'Evdev Wheel Emulation' 1
xinput set-prop $nova_mouse_id 'Evdev Wheel Emulation Axes' 6 7 4 5
xinput set-prop $nova_mouse_id 'Evdev Wheel Emulation Button' 3

  1. Находим нужный id:
    xinput list
  2. Включаем эмуляцию:
    xinput set-prop $mouse_id 'Evdev Wheel Emulation' 1
  3. Настраиваем все четыре оси:
    xinput set-prop $mouse_id 'Evdev Wheel Emulation Axes' 6 7 4 5
  4. Назначаем правую кнопку мыши (средняя кнопка — цифра 2):
    xinput set-prop $mouse_id 'Evdev Wheel Emulation Button' 3
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Murz
@Murz Автор вопроса
Разработка сайтов на Drupal, поисковая оптимизация
Для свежих Ubuntu 18.04 старое решение перестало работать, поэтому пришлось изобретать новое - в папке /etc/X11/Xsession.d создать файл вида 99mouse-middle-scroll с примерно таким содержимым:
IDS=`xinput list | grep 'slave  pointer' | grep -v Virtual | grep -o -P 'id=(\d+)' | grep -o -P '\d+'`

for ID in $IDS
do
  xinput set-prop $ID "libinput Scroll Method Enabled" 0, 0, 1
done
Ответ написан
@Eddy_Em
Как вариант: при помощи xlib «отбирать» мышку, анализировать события и отправлять уже измененные события клиенту. Можно глянуть исходники xdotool, чтобы понять, как оно должно работать.
Ответ написан
Комментировать
robux
@robux
В Ubuntu можно поставить утилиту:
apt install mouseemu

Добавить в настройки /etc/default/mouseemu строку:
SCROLL="-scroll 125"   #или 126 для правой Super_R/Mod_R/Window_R
Перезапустить прогу (под root):
/etc/init.d/mouseemu restart

Если качали с github и сами компиляли, то ручной перезапуск:
killall mouseemu
./mouseemu -scroll 125
И теперь при зажатии левой "Window" на клавиатуре и шевелении мышкой, будет скролить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы