키 누르기 이벤트를 중단하지 않고 키 누르기 시 프로그램 실행

키 누르기 이벤트를 중단하지 않고 키 누르기 시 프로그램 실행

(전역) 키 입력을 명령에 바인딩하고 여전히 키 입력 완료를 방해하지 않는 것이 가능합니까? 내 말은, 바인딩키 솔루션을 사용하려고 하면여기 다른 곳에 게시됨:

# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command"
  q

그러면 "q" 키는 다른 경우처럼 완료되지 않습니다. 예를 들어 문자 "q"는 터미널에 인쇄되지 않습니다.

xdotool다음과 같이 "q" 키 누르기를 보내는 데 사용됩니다 .

# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command && xdotool key q"
  q

xdotool실행된 "q" 키가 바인딩을 통해 또 다른 "some_command"를 실행하기 때문에 루프가 발생합니다 .

좀 더 명확하게 하기 위해 "q" 키를 눌러 평소처럼 실행하고 싶습니다.게다가일부 외부 명령을 실행합니다. 위의 솔루션바꾸다일부 외부 명령을 실행하는 "q" 키 누름 이벤트입니다. 문제는 해당 외부 명령이 "q" 키 누름도 시뮬레이션하는 경우 바인딩이 외부 명령을 다시 시작하고 무한 루프에 빠지게 된다는 것입니다.

답변1

좋습니다. 제가 찾은 해결책을 게시하겠습니다. 하지만 다른 사람이 더 나은 해결책을 가지고 있을 수도 있습니다. 답변을 드린 후여기, 실행 중에 누른 모든 키를 볼 수 있습니다

xinput test <keyboad_id>

터미널에서. 그런 다음 해당 명령의 출력을 "키 릴리스 24"(키보드에서 "q"를 놓았을 때의 출력)와 같은 문자열을 감시하는 프로그램에 파이프하는 간단한 경우입니다. 그런 다음 프로그램은 원하는 대로 작업을 수행합니다. 이 문자열과 일치합니다.

예를 들어, "q" 키를 누르는 것을 캡처하여 다음과 같은 소리를 낼 수 있습니다.

xinput test <keyboard_id> | while read in ; do
  [[ $in = "key press   24" ]] && aplay /usr/share/sounds/purple/alert.wav
done

분명히 우리는 다른 입력을 관찰하고 필요에 따라 다른 작업을 실행할 수도 있습니다.

관련 정보