Скрипт udev для изменения настроек libinput для прокрутки средней кнопкой (ответ с файлом xorg, лучшее решение)

Скрипт udev для изменения настроек libinput для прокрутки средней кнопкой (ответ с файлом xorg, лучшее решение)

Ubuntu 18.04.2 на Thinkpad T480

Я хочу запустить скрипт udev, когда подключена моя мышь. Я с радостью предположу, что у пользователя с именем tim запущен Xsession (я использую kde plasma).

Цель — настроить прокрутку средней кнопкой для USB-мыши Logitech, включая горячее подключение.

Мое правило:

/etc/udev/rules.d/41-usb-mouse-add.rules


ACTION=="add" \
, ATTRS{idProduct}=="c539" \
, ATTRS{idVendor}=="046d" \
, ENV{DISPLAY}=":0" \
, ENV{XAUTHORITY}="/tmp/xauth-1000-_0" \
, RUN+="/home/tim/scripts/tweak_libinput.sh"

Расположение XAUTHORITY скопировано из того, что я вижу в оболочке.

У меня в скрипте есть вызов logger, и он вызывается несколько раз (почему?). Значит, правило udev работает, хотя я ожидал, что оно будет вызвано только один раз.

Это имеет некоторый эффект, потому что это нарушает мои естественные настройки прокрутки... тот же скрипт включает естественную прокрутку, но после вызова udev естественные настройки прокрутки сбрасываются. Так что это хуже, чем провал, это фактически нарушает мои настройки :)

При ручном запуске скрипта он работает нормально. Независимо от того, сколько раз я его вызываю.

Редактировать

ls -l /tmp/xauth-1000-_0 
-rw------- 1 tim tim 53 Jun 11 20:07 /tmp/xauth-1000-_0

будет ли эта настройка разрешений проблемой?

решение1

Это можно сделать с помощью файла конфигурации/usr/share/X11/xorg.conf.d/41-libinput-local.conf

Этот контент подходит для определенного устройства:

Section "InputClass"
        Identifier "Logitech USB Receiver Mouse"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
        Option "ScrollButton" "2"
        Option "ScrollMethod" "button"
        Option "NaturalScrolling" "true"
EndSection

Как сообщил Тим (OP), эта функция работает при горячем подключении устройства после начала сеанса и продолжает работать во время приостановки/возобновления работы.

Использованная литература:

Связанный контент