regra udev para ativar a retroiluminação do teclado

2

Eu tenho um teclado para jogos genéricos muito simples com luz de fundo. A maneira comum de ativar a luz de fundo é com xset led 3 . Posso confirmar que isso funciona de fato. Como tenho dois computadores que alterno de um comutador periférico, isso se torna problemático porque, quando eu alterno de um contexto para outro, estou desconectando e conectando o USB novamente.

Eu escrevi um arquivo /etc/udev/rules.d/keyboard.rules com a seguinte regra:

ATTRS{idVendor}=="258a", ATTRS{idProduct}=="0001", RUN+="/bin/bash -c \"DISPLAY=:1;xset led 3;\""

Se eu executar o /bin/bash -c \"DISPLAY=:1;xset led 3;\" por si só, ele funciona bem, no entanto, ele não parece funcionar como regra. Só às vezes liga, e quando isso acontece pisca e depois imediatamente se apaga. Eu verifiquei várias vezes e sei que meu idVender e idProduct estão corretos:

Bus 003 Device 079: ID 258a:0001

O que mais eu poderia estar sentindo falta?

    
por Paul Nelson Baker 16.11.2015 / 16:16

1 resposta

2

Acredito que o problema é que sua regra é acionada várias vezes (você pode verificar se esse é o caso de udevadm monitor ). Cada comando xset inverte o estado dos leds, fazendo com que eles pisquem rapidamente e saiam novamente. Você deve tornar sua regra mais específica, por exemplo:

ACTION=="add", ENV{DEVTYPE}=="usb_interface", ATTRS{idVendor}=="258a", ATTRS{idProduct}=="0001", RUN+="/bin/bash -c \"DISPLAY=:1 xset led 3;\""

Se isso não ajudar, talvez você precise investigar mais e talvez especifique os atributos bInterfaceClass e bInterfaceSubClass em sua regra.

EDITAR:

Outra teoria que eu tenho sobre o seu hardware é que a regra udev é executada muito cedo, quando o teclado ainda não está pronto para aceitar os comandos do led. Experimente "/bin/bash -c \"sleep 5;DISPLAY=:1 xset led 3;\"" e relate o que acontece. Além disso, mais algumas observações

  1. Espero que você tenha certeza de que seu DISPLAY é realmente :1 , não :0 .

  2. Observe como eu anexei a variável DISPLAY ao comando xset . DISPLAY=:1 por si só define a variável DISPLAY para bash , não para xset .

  3. Você também pode adicionar XAUTHORITY="/home/<user>/.Xauthority" no mix.

por 16.11.2015 / 19:41