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
DISPLAY
ao comandoxset
.DISPLAY=:1
por si só define a variávelDISPLAY
parabash
, não paraxset
. -
Você também pode adicionar
XAUTHORITY="/home/<user>/.Xauthority"
no mix.