シェルスクリプトを介してキーストロークを記録する方法は?私の目標は、Ubuntuシステムでログインセッションのキーボードクリック数を記録することです。
注:私はキーストローク自体を記録したくなく、クリック数だけを記録したいと思います。だから結局こう言います。
94853 hits today.
ベストアンサー1
X11(グラフィックスデスクトップ)セッションでのみ監視
XInputレイヤーを使用している場合(最新のXを実行している場合)xinput test «keyboard-id»
(xinput
Debianパッケージで)、ニュースとリリースイベントが提供されます。を実行してキーボードIDを取得できますxinput list
。この名前を使用することもできます。
xinput test 'AT Translated Set 2 keyboard' | grep -c 'key press'
パイプを使用すると、xinput
かなり大きなバッファがあることに注意してください。したがって、残念ながらいくつかの鍵を失う可能性があります。 XI2 APIを直接使用することでこれを防ぐことができますが、シェルでは簡単ではありません。
状況によっては、デスクトップ環境またはファイルからログインスクリプトのいずれかでスクリプトを非常に簡単に起動できます.xsession
。xinput
X11 接続が切断されるため、ログアウト時に終了する必要があります。したがって、セッションの開始時間と終了時間を追跡するのは非常に簡単です。
システム全体の監視(すべてのセッション、テキストモードを含む)
または監視したい場合みんなinput-events
X11セッションだけでなく(少なくともDebianのinput-utilsパッケージの一部として)、システムでキーストロークを使用できます。これはrootとして実行する必要があります。lsinput
正しい入力デバイス(私のシステムではゼロ)を見つけるには:
input-events 0 | grep -c 'EV_KEY.*pressed'
これを行うには、セッションの開始時と終了時期を把握する必要があります(例:peterphのdbus提案)。