すべてのキー入力を記録してファイルに保存する

すべてのキー入力を記録してファイルに保存する

すべてのキー入力を記録する必要があり、ユーザーディレクトリ内のファイル~で、自分のアカウントを使用すると、sudoerではないため、プログラム(ログキー) を何らかの方法で実行できません。ターミナルを使用してこれを行うにはどうすればよいでしょうか?

注記:この質問は、他の質問の重複ではありません。この質問では、すべてのキーストロークについて質問していますが、他の質問では、質問者はターミナル セッションでのキーストロークについて質問しています。

答え1

xinput testすべてのキーボードイベントをXサーバーに報告できます。GNUシステムの場合:

xinput list |
  grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
  xargs -P0 -n1 xinput test

キーコードからキー名を取得する場合は、次のようにして出力を後処理できます。

awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
     {print $0 "[" k[$NF] "]"}'

> file.logログ ファイルに保存するために追加します。または| tee file.log、ログに記録して表示することもできます。

xinputX サーバーの XinputExtension を照会します。これは、標準 (X ユーティリティをカバーする標準については知りません) または一般的なコマンドとして取得できるものに最も近いものです。また、ルート権限も必要ありません。

X サーバーと xinput が XinputExtension バージョン 2 をサポートしている場合は、 のtest-xi2代わりに を使用できます。これによりtest、特に修飾子の状態 (shift、ctrl、alt など) に関する詳細情報が提供されます。例:

$ xinput test-xi2 --root
EVENT type 2 (KeyPress)
    device: 11 (11)
    detail: 54
    flags:
    root: 846.80/451.83
    event: 846.80/451.83
    buttons:
    modifiers: locked 0 latched 0 base 0x4 effective: 0x4
    group: locked 0 latched 0 base 0 effective: 0
    valuators:
    windows: root 0x26c event 0x26c child 0x10006e6

再びの助けを借りて、キーコード ( 内detail) をキーシムに変換し、の助けを借りて、修飾子ビットマスクをより便利なものに変換することができます。たとえば、次のようになります。xmodmap -pkeeffectivexmodmap -pm

xinput test-xi2 --root | perl -lne '
  BEGIN{$"=",";
    open X, "-|", "xmodmap -pke";
    while (<X>) {$k{$1}=$2 if /^keycode\s+(\d+) = (\w+)/}
    open X, "-|", "xmodmap -pm"; <X>;<X>;
    while (<X>) {if (/^(\w+)\s+(\w*)/){($k=$2)=~s/_[LR]$//;$m[$i++]=$k||$1}}
    close X;
  }
  if (/^EVENT type.*\((.*)\)/) {$e = $1}
  elsif (/detail: (\d+)/) {$d=$1}
  elsif (/modifiers:.*effective: (.*)/) {
    $m=$1;
    if ($e =~ /^Key/){
      my @mods;
      for (0..$#m) {push @mods, $m[$_] if (hex($m) & (1<<$_))}
      print "$e $d [$k{$d}] $m [@mods]"
    }
  }'

出力は次のようになります:

KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]

NumLock がオンのときに Shift + Alt + q を押すと。

スーパーユーザー権限は必要ありません。インストールプログラム。実行権限が付与されているファイルシステム上のどこか(ホームディレクトリ、...)に書き込みアクセス権がある場合は/tmp、互換性のあるシステムからコマンド/var/tmpをコピーして実行できます。xinput

答え2

使用を検討しましたか?script指示?

関連情報