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

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

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


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


Плагины, которые делают подобное, встречаются для Firefox и Chrome, но хочется чтобы это работало не только в отдельных приложениях, а сразу во всех элементах системы (Использую Ubuntu с оболочкой KDE, но и в GTK-приложениях чтобы тоже работало). Либо, если это нельзя сделать через xorg, то хотя бы какую-то программу запускать которая это делает — тоже было бы годно. Для виндовсов я встречал такую программу (по правой кнопки скроллит списки, но это было лет 5 назад и название уже не вспомню никак), а в линухах что-то никак не найду как это можно сделать. Подскажите пожалуйста как это можно сделать или хотя бы в какую сторону копать?
  • Вопрос задан
  • 6238 просмотров
Решения вопроса 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
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
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, чтобы понять, как оно должно работать.
Ответ написан
Ваш ответ на вопрос

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

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