udev 규칙은 키보드 백라이트를 켭니다

udev 규칙은 키보드 백라이트를 켭니다

나는 백라이트가 있는 매우 간단한 범용 게임 키보드를 가지고 있습니다. 일반적으로 백라이트를 사용하는 일반적인 방법은 를 사용하는 것입니다 xset led 3. 이것이 실제로 작동하는지 확인할 수 있습니다. 하지만 컴퓨터가 두 대이기 때문에 주변 스위치를 통해 앞뒤로 전환할 수 있는데, 한 환경에서 다른 환경으로 전환할 때 USB를 뽑았다가 다시 연결해야 하기 때문에 문제가 발생합니다.

나는 /etc/udev/rules.d/keyboard.rules다음 규칙에 따라 파일을 작성했습니다.

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

단독으로 실행 하면 /bin/bash -c \"DISPLAY=:1;xset led 3;\"잘 작동하지만 단순한 규칙은 아닌 것 같습니다. 가끔씩만 켜지고, 켜지면 깜박인 다음 즉시 꺼집니다. 여러 번 확인한 결과 내 idVender 및 idProduct가 올바른 것으로 확인되었습니다.

Bus 003 Device 079: ID 258a:0001

또 무엇을 놓칠 수 있습니까?

답변1

문제는 귀하의 규칙이 여러 번 실행된다는 것입니다(이런 경우인지 확인할 수 있습니다 udevadm monitor). 각 xset명령은 LED 상태를 전환하여 LED가 잠시 깜박인 다음 다시 꺼지게 합니다. 규칙을 더욱 구체적으로 만들어야 합니다. 예를 들면 다음과 같습니다.

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

그래도 도움이 되지 않으면 더 자세히 조사하여 규칙의 속성을 지정해 보시기 바랍니다 bInterfaceClass.bInterfaceSubClass

편집하다:

하드웨어에 대한 또 다른 이론은 udev키보드가 LED 명령을 받아들일 준비가 되지 않았을 때 규칙이 너무 일찍 실행된다는 것입니다. 무슨 일이 일어났는지 보고해 보세요 "/bin/bash -c \"sleep 5;DISPLAY=:1 xset led 3;\"". 그 외에 몇 가지 주의사항이 있습니다.

  1. DISPLAY나는 당신이 당신의 것이 :1이고 아닌지 를 확신하기를 바랍니다 :0.

  2. 명령 DISPLAY에 변수를 추가하는 방법에 주목하세요 . 변수 자체를 가 아닌 로 설정하십시오 .xsetDISPLAY=:1DISPLAYbashxset

  3. XAUTHORITY="/home/<user>/.Xauthority"그것에 추가하고 싶을 수도 있습니다 .

답변2

/etc/udev/rules.d/keyboardled.rules

ACTION=="추가", ATTRS{idVendor}=="1c4f", ATTRS{idProduct}=="0002", RUN+="/bin/sh -c 'DISPLAY=:0.0 XAUTHORITY=/home/nill/.Xauthority sh -c "xset led 3" &'"

작동 중입니다... =D

관련 정보