ターミナルにフォーカスしていないときに「読み取り」が機能するようにする

ターミナルにフォーカスしていないときに「読み取り」が機能するようにする

Vボタンが押されたときにプログラム内のボタンをスパムする次のスクリプトがあります

#!/bin/bash
winid=$(xdotool search "application name here" | head -n1)
while true; do
read -rsn1 input
if [ "$input" = "v" ]; then
    xdotool keydown --window $winid "button"
    xdotool keyup --window $winid "button"
fi
done

ただし、これは端末にフォーカスがある場合にのみ機能します。すべてのキーの押下をリッスンする方法はありますか?

答え1

これは、ユーザー:

cat /dev/input/$(grep -E  'Handlers|EV=' /proc/bus/input/devices | \
                 grep -B1 'EV=120013' |  grep -Eo 'event[0-9]+') | \
while read -rsn1 foo ; do echo "$foo" ; done | nl

出力(までCtrl+C キー):

     1  ԥ
     2  �W
     3  ^
     4  
     5  

コードはどちらからでも読み取れます/dev/入力/イベント*ファイルは現在キーボードに対応しています。各キー押下を別々の行にエコーし、各行に番号を付けます。キー押下はすぐに蓄積されるため、行番号はルーチンが動作していることを示すのに役立ちます。

小さなフォアグラウンド ウィンドウでテキスト エディターを開き、エディターにテキストを入力すると、バックグラウンド ターミナルで数字がスクロールすることがわかります。


上記のコードgrepは以下から借用しましたジェイコブPの答えはここにあります: Linux キーボード イベント キャプチャ /dev/inputX

関連情報