Como posso executar um script de shell no evento do dispositivo de entrada

1

Eu tenho um apresentador remoto USB que aparece como um teclado.

Usando evtest , posso ver os eventos de entrada do dispositivo.

Como posso capturar esses eventos em um script de shell?

Eu tinha visto algumas soluções usando C , mas eu preferiria algo com apenas bash , se possível.

Eu já tentei algo com xbindkeys , mas meus eventos de teclado também foram capturados e eu não quero isso.

Eu também li algo sobre udev rules , mas parece-me que essas regras são úteis apenas para conectar e desconectar eventos.

    
por paulequilibrio 06.03.2018 / 02:45

3 respostas

3

@paulequilibrio thanx ao seu post Eu modifiquei o seu script para obter mi IR remote next, prev e stop buttons trabalhando com o Rhythmbox sem lirc no Ubuntu 18.04, isso adicionou ao auto run o seu maravilhoso ...

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
    
por 01.10.2018 / 09:42
2

Este exemplo está monitorando toques no touchpad:

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

Você pode modificá-lo facilmente para suas necessidades.

    
por 06.03.2018 / 08:37
0

@JeffSchaller, obrigado pelas edições.

Com base na resposta do @IporSircer (obrigado!), consegui criar o seguinte script:

#!/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

Usando evtest , consegui descobrir o número do evento /dev/input/event18 para o dispositivo, mas esse número pode variar dependendo dos dispositivos em seu sistema e em que ordem eles estavam conectados

Por causa disso, usei udevadm info /dev/input/event18 para descobrir o ID exclusivo do dispositivo

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

Por fim, usando evtest novamente, consegui capturar todos os eventos do dispositivo para usá-los na instrução case .

    
por 06.03.2018 / 15:05