Shell-Script
如何在輸入設備事件上執行 shell 腳本
我有一個顯示為鍵盤的 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
您可以根據需要輕鬆修改它。