Script udev para cambiar la configuración de libinput para el desplazamiento con el botón central (respondido con un archivo xorg, mejor solución)

Script udev para cambiar la configuración de libinput para el desplazamiento con el botón central (respondido con un archivo xorg, mejor solución)

ubuntu 18.04.2 en un Thinkpad T480

Quiero ejecutar un script udev cuando mi mouse esté conectado. Me alegra suponer que un usuario llamado tim tiene un Xsession ejecutándose (yo uso kde plasma).

El objetivo es configurar el desplazamiento del botón central para un mouse USB Logitech, incluida la conexión en caliente.

Mi regla está en:

/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"

La ubicación de XAUTHORITY se copia de lo que veo en un shell.

Tengo una llamada para iniciar sesión en el script y lo están llamando varias veces (¿por qué?). Entonces, la regla udev está funcionando, aunque esperaba que se llamara solo una vez.

Está teniendo algún efecto, porque rompe mi configuración de desplazamiento natural... ese mismo script activa el desplazamiento natural, pero después de la invocación de udev, la configuración de desplazamiento natural se restablece. Entonces es peor que fallar, en realidad está rompiendo mi configuración :)

Cuando el script se ejecuta manualmente, funciona bien. Sin importar cuantas veces lo invoque.

Editar

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

¿Esta configuración de permisos será un problema?

Respuesta1

Es posible hacer esto con un archivo de configuración en/usr/share/X11/xorg.conf.d/41-libinput-local.conf

Estos contenidos funcionan para un dispositivo específico:

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

Funciona cuando el dispositivo se conecta en caliente después de que comienza la sesión y sobrevive durante la suspensión/reanudación, según informó Tim (OP).

Referencias:

información relacionada