Shell-Script

如何在輸入設備事件上執行 shell 腳本

  • October 1, 2018

我有一個顯示為鍵盤的 USB 遠端展示器。

使用evtest我可以看到來自設備的輸入事件。

如何在 shell 腳本中擷取這些事件?

我看到了一些解決方案,C但我更喜歡只有bash在可能的情況下才使用的東西。

我已經嘗試過使用xbindkeys,但是我的鍵盤事件也被擷取了,我不希望這樣。

我還閱讀了一些關於udev rules但在我看來這些規則僅對插入和拔出事件有用的東西。

@paulequilibrio 感謝您的文章我修改了您的腳本以在 Ubuntu 18.04 中使用不帶 lirc 的 Rhythmbox 獲得 mi IR 遙控器下一個、上一個和停止按鈕,這添加到自動執行它的奇妙…

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

這個例子是監控觸摸板上的點擊:

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

您可以根據需要輕鬆修改它。

引用自:https://unix.stackexchange.com/questions/428399