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.sh
udev 규칙에서 다음과 같이 절대 경로를 전달해야 합니다:
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.