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 regraudev é 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
-
Espero que você tenha certeza de que seu
DISPLAYé realmente:1, não:0. -
Observe como eu anexei a variável
DISPLAYao comandoxset.DISPLAY=:1por si só define a variávelDISPLAYparabash, não paraxset. -
Você também pode adicionar
XAUTHORITY="/home/<user>/.Xauthority"no mix.