udev 규칙에 문제가 있습니다

udev 규칙에 문제가 있습니다

Bluetooth 키보드를 연결할 때 .sh 스크립트를 실행하는 데 문제가 있습니다.

다음 udev 규칙을 사용하고 있습니다.

ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="./scripts/icleverkeybindings.sh" 

키보드를 연결해도 스크립트가 활성화되지 않는 것 같습니다. 또한 "./scripts/iceverkeybindings.sh", "/bin/bash /scripts/iceverkeybindings.sh" 및 "sh /scripts/iceverkeybindings.sh"도 시도했습니다. 이 스크립트가 왜 활성화되지 않는지 이해할 수 없습니다.

대신 다음 udev 규칙을 사용하면

ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="/bin/mkdir /home/joe/tempfolder" 

그런 다음 키보드를 연결하면 /home/joe/tempfolder 폴더가 생성됩니다.

/etc/udev/rules.d/50-addiceverkeybindings.sh에 규칙을 저장했습니다. 권한 등은 다음과 같습니다: -rw-r--r-- 1 joe root 80 Aug 11 19:53 50-addiceverkeyboard.rules.

내가 실행하려는 스크립트는 다음과 같습니다.

#!/bin/bash

sleep 1
cheese

remote_id=$(
    xinput list |
    sed -n 's/.*iClever IC-BK06 Keyboard  .*id=\([0-9]*\).*keyboard.*/\1/p'
)
[ "$remote_id" ] || exit

xkbcomp -i $remote_id /scripts/icleverlayout.xkb $DISPLAY

ls -la는 -rwxr-xr-x 1 joe root 222 Aug 11 20:00 iceverkeybindings.sh를 제공합니다.

터미널에서 간단히 /scripts/iceverkeybindings.sh를 호출하면 제대로 작동합니다.

스크립트는 내 키보드의 키 바인딩을 변경하고, xinput이 키보드가 있다는 것을 알기 전에 스크립트가 호출되는 경우를 대비해 일시 중지를 추가했으며, 확실히 호출되는지 여부를 확인하기 위해 치즈를 추가했습니다.

스크립트가 호출되도록 규칙을 변경하는 방법을 알려줄 수 있는 사람이 있나요?

감사해요

편집: 명확히 하기 위해 /scripts/ 폴더를 만들었으므로 /scripts/iceverkeybindings.sh는 절대 파일 경로입니다.

답변1

그것은 말한다 man udev:

   RUN{type}
       Add a program to the list of programs to be executed after
       processing all the rules for a specific event, depending on
       "type":

       "program"
           Execute an external program specified as the assigned
           value. If no absolute path is given, the program is
           expected to live in /lib/udev; otherwise, the absolute
           path must be specified.

확인할 수 있는 다른 로그는 무엇입니까 udev?

Aug 11 21:57:43 ja-VirtualBox systemd-udevd[2998]: failed to execute '/lib/udev/./scripts/icleverkeybindings.sh' './scripts/icleverkeybindings.sh': No such file or directory

또는 시스템화되지 않은 시스템:

[769712.027218] udevd[13015]: failed to execute '/lib/udev/./scripts/icleverkeybindings.sh' './scripts/icleverkeybindings.sh': No such file or directory

그렇긴 하지만, icleverkeybindings.shudev 규칙에서 다음과 같이 절대 경로를 전달해야 합니다:

ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="/path/to/icleverkeybindings.sh"

또는 udev 규칙에 파일 이름을 icleverkeybindings.sh입력 하고 사용하십시오./lib/udev

ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="icleverkeybindings.sh"

icleverkeybindings.sh 두 경우 모두 실행 가능 비트가 설정되어 있는지 확인해야 합니다. 그렇지 않은 경우:

Aug 11 22:07:49 ja-VirtualBox systemd-udevd[3345]: failed to execute '/lib/udev/icleverkeybindings.sh' 'icleverkeybindings.sh': Permission denied
Aug 11 22:07:49 ja-VirtualBox systemd-udevd[3325]: Process 'icleverkeybindings.sh' failed with exit code 2.

관련 정보