Regra do Udev para desativar automaticamente o touchpad quando um mouse USB é conectado

3

Sou muito novo em udev e queria escrever uma regra que, ao conectar um mouse USB, desativa meu touchpad.

Isso é o que eu criei (principalmente de ouvido):

ACTION=="add", SUBSYSTEM=="input", ENV{ID_MODEL}=="USB_Mouse", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/nikitautiu/.Xauthority", ENV{REMOVE_CMD}="/usr/bin/synclient TouchpadOff=0", RUN+="/usr/bin/synclient TouchpadOff=1"

No entanto, não desencadeia o efeito desejado. O comando parece estar bem, embora a regra não acione ao conectar meu mouse USB.

    
por nikitautiu 11.09.2012 / 21:02

2 respostas

5

Eu não entendo porque sua regra é tão complexa? Especialmente esta seção

ENV{ID_MODEL}=="USB_Mouse",\
ENV{DISPLAY}=":0",\
ENV{XAUTHORITY}="/home/nikitautiu/.Xauthority",\   
ENV{REMOVE_CMD}="/usr/bin/synclient TouchpadOff=0"

Na primeira linha, você corresponde a variável de ambiente ID_MODEL , que só é vista por udev em relação a USB_Mouse . Nas três linhas seguintes, você atribui valores a variáveis de ambiente. Novamente visto apenas por udev e o comando executado synclient se a regra for aplicada.

Tenho certeza de que essa regra nunca é aplicada (você pode verificar isso analisando o arquivo de log de udev ), pois é provável que não haja nenhuma variável ID_MODEL com conteúdo USB_Mouse acessível, a menos que você defina ID_MODEL no ambiente udev anteriormente.

Sugiro que você compare a ação, o ID do fornecedor e o ID do produto do mouse, o que será suficiente na maioria dos casos. Então sua regra parece com

ACTION=="add", ATTRS{idVendor}=="<idVendor>", ATTRS{idProduct}=="<idProduct>", RUN+="/usr/bin/synclient TouchpadOff=1"

Você pode obter <idVendor> e <idProduct> analisando a saída de

lsusb -v

Não lembro se os valores hexadecimados são permitidos na forma clássica 0xffff . Eu sempre levo apenas a parte atrás de 0x em minhas regras.

    
por 12.09.2012 / 00:47
2

Como a resposta aceita não funciona no meu sistema, aqui está uma regra udev que funciona com gnome/gdm v. 3.16.2 e udev/systemd v. 226 :

ACTION=="add", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceClass}=="03", \
ATTRS{bInterfaceSubClass}=="01", ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority", \
ENV{DISPLAY}=":0", ENV{REMOVE_CMD}="/usr/bin/xinput --enable 'SynPS/2 Synaptics TouchPad'", \
RUN+="/usr/bin/xinput --disable 'SynPS/2 Synaptics TouchPad'"

ENV{REMOVE_CMD} é o comando usado quando o dispositivo é removido.
SynPS/2 Synaptics TouchPad é o nome do dispositivo do touchpad conforme informado por xinput .
O UID usado em ENV{XAUTHORITY} (por exemplo, 1000 em minha regra) precisa corresponder ao seu usuário ID .
Observe que as barras invertidas no final das linhas são necessárias, caso contrário, as regras udev não podem se estender por várias linhas. Se preferir em uma linha:

 ACTION=="add", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceSubClass}=="01", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority", ENV{REMOVE_CMD}="/usr/bin/xinput --enable 'SynPS/2 Synaptics TouchPad'", RUN+="/usr/bin/xinput --disable 'SynPS/2 Synaptics TouchPad'"
    
por 24.09.2015 / 23:28

Tags