입력 장치 이벤트에서 쉘 스크립트를 실행하는 방법

입력 장치 이벤트에서 쉘 스크립트를 실행하는 방법

키보드로 나타나는 USB 원격 발표자가 있습니다.

을 사용하면 evtest장치에서 들어오는 입력 이벤트를 볼 수 있습니다.

쉘 스크립트에서 이러한 이벤트를 어떻게 캡처할 수 있습니까?

나는 몇 가지 솔루션이 사용되는 것을 보았지만 가능한 경우에만 사용되는 솔루션을 C선호합니다 .bash

몇 가지를 시도했지만 xbindkeys키보드 이벤트도 캡처되므로 원하지 않습니다.

나는 또한 몇 가지 내용을 읽었 udev rules지만 이러한 규칙은 플러그 앤 플러그 이벤트에만 유용한 것 같습니다.

답변1

@paulequilibrio 게시물을 보내 주셔서 감사합니다. mi IR 원격이 다음, 이전 및 중지 버튼이 Ubuntu 18.04에서 lirc 없이 Rhythmbox와 작동하도록 스크립트를 수정하여 자동 실행의 경이로움을 추가했습니다...

device='/dev/input/by-id/usb-Formosa21_Beanbag_Emulation_Device_000052F1-event-if00'

#key_playpause='*type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1*'
key_stop='*type 1 (EV_KEY), code 128 (KEY_STOP), value 1*'
key_next='*type 1 (EV_KEY), code 407 (KEY_NEXT), value 1*'
key_previous='*type 1 (EV_KEY), code 412 (KEY_PREVIOUS), value 1*'

sudo evtest "$device" | while read line; do
    case $line in
#       ($key_playpause)    notify-send "Play/Pause" && rhythmbox-client --playpause ;;
        ($key_stop)     notify-send "Stop" && rhythmbox-client --stop ;;
        ($key_next)     notify-send "Next" && rhythmbox-client --next ;;
        ($key_previous)     notify-send "Previous" && rhythmbox-client --previous ;;
    esac
done

답변2

@JeffSchaller, 편집해 주셔서 감사합니다.

@IporSircer의 답변(감사합니다!)을 바탕으로 다음 스크립트를 만들 수 있었습니다.

#!/bin/bash

device='/dev/input/by-id/usb-Targus_Laser_Presentation_Remote-if02-event-kbd'
event_blank='*code 48 (KEY_B), value 1*'
event_esc='*code 1 (KEY_ESC), value 1*'
event_f5='*code 63 (KEY_F5), value 1*'
event_prev='*code 104 (KEY_PAGEUP), value 1*'
event_next='*code 109 (KEY_PAGEDOWN), value 1*'

evtest "$device" | while read line; do
  case $line in
    ($event_blank) echo "BLANK SCREEN" ;;
    ($event_f5)    echo "F5" ;;
    ($event_esc)   echo "ESCAPE" ;;
    ($event_prev)  echo "PREVIOUS" ;;
    ($event_next)  echo "NEXT" ;;
  esac
done

이벤트 번호를 이용해서 장치를 evtest찾을 수 있었는데 /dev/input/event18, 그 번호는 시스템에 있는 장치와 연결된 순서에 따라 다를 수 있습니다.

udevadm info /dev/input/event18그래서 기기의 고유 ID를 알아 내곤 했는데요

S: input/by-id/usb-Targus_Laser_Presentation_Remote-if02-event-kbd

마지막으로 다시 사용하여 장치에서 모든 이벤트를 캡처하여 명령문에 사용할 evtest수 있었습니다 .case

답변3

이 예에서는 터치패드 클릭을 모니터링합니다.

xinput test-xi2 --root "AlpsPS/2 ALPS DualPoint TouchPad" \
| grep --line-buffered "EVENT type 15 (RawButtonPress)"| while read line; do
    paplay --volume 22000 -d $PULSE_SINK $HOME/scripts/data/click.aiff
done

필요에 따라 쉽게 수정할 수 있습니다.

관련 정보