Script udev para alterar as configurações de libinput para rolagem do botão do meio (respondido com arquivo xorg, melhor solução)

Script udev para alterar as configurações de libinput para rolagem do botão do meio (respondido com arquivo xorg, melhor solução)

Ubuntu 18.04.2 em um Thinkpad T480

Quero executar um script udev quando meu mouse estiver conectado. Fico feliz em assumir que um usuário chamado tim tem um Xsession em execução (eu uso o kde plasma).

O objetivo é configurar a rolagem do botão do meio para um mouse USB da Logitech, incluindo a conexão a quente.

Minha regra está em:

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

A localização de XAUTHORITY é copiada do que vejo em um shell.

Eu tenho uma chamada para o logger no script, e ele está sendo chamado várias vezes (por quê?) Portanto, a regra do udev está funcionando, embora eu esperasse que ela fosse chamada apenas uma vez.

Está tendo algum efeito, porque quebra minhas configurações de rolagem natural ... esse mesmo script ativa a rolagem natural, mas após a invocação do udev, as configurações de rolagem natural são redefinidas. Então é pior do que falhar, na verdade está quebrando minhas configurações :)

Quando o script é executado manualmente, funciona bem. Independentemente de quantas vezes eu o invoco.

Editar

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

essa configuração de permissão será um problema?

Responder1

É possível fazer isso com um arquivo de configuração em/usr/share/X11/xorg.conf.d/41-libinput-local.conf

Estes conteúdos funcionam para um 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 quando o dispositivo é conectado a quente após o início da sessão e sobrevive durante a suspensão/retomada, conforme relatado por Tim (OP).

Referências:

informação relacionada