GNU/Linux >> Linux の 問題 >  >> Linux

すべてのキーストロークを記録してファイルに保存しますか?

すべてのキーストロークとストアを記録する必要があります ユーザーディレクトリのファイルで〜、私のアカウントを使用しているとき、私はsudoerではなく、プログラム(logKeysなど)をインストールできません。ターミナルを使用してこれを行うにはどうすればよいですか?

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

承認された回答:

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

xinput list |
  grep -Po 'id=Kd+(?=.*slaves*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 ログに記録して表示します。

xinput Xサーバーの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

キーコードを翻訳できます(detailxmodmap -pkeを使用してkeysymに 繰り返しますが、effective xmodmap -pmを使用して、ビットマスクをより役立つものに変更します。 。例:

xinput test-xi2 --root | perl -lne '
  BEGIN{$"=",";
    open X, "-|", "xmodmap -pke";
    while (<X>) {$k{$1}=$2 if /^keycodes+(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]

num-lockがオンのときにShift+Alt+qを押すと。

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

関連:Ssh –遅すぎるsshログインを高速化する方法は?
Linux
  1. `^ m`そしてそれを取り除く方法は?

  2. 現在のディレクトリと親ディレクトリを除くすべての隠しファイルをグロブする方法は?

  3. ファイルのアクセス許可と保存?

  1. Ls -lがすべてのファイルの時間や年を表示しないのはなぜですか?

  2. vsFTPDのインストールと構成

  3. すべてのファイルを個別に GZip

  1. unix - ファイルの先頭と末尾

  2. date および watch コマンドの出力をファイルに保存する

  3. fstab と cifs のマウント、認証情報を fstab の外部に保存することは可能ですか?