Jeden Tastendruck aufzeichnen und in einer Datei speichern

Jeden Tastendruck aufzeichnen und in einer Datei speichern

Ich muss jeden Tastendruck aufzeichnen undspeichernin einer Datei im Benutzerverzeichnis ~, wenn ich mein Konto verwende, bin ich nicht sudoer und kann keine Programme installieren (wielogKeys) in irgendeiner Weise. Wie kann ich dies über das Terminal tun?

NOTIZ:Diese Frage ist kein Duplikat der anderen erwähnten Frage. In dieser Frage frage ich nach jedem Tastenanschlag, während in der anderen Frage der Fragesteller nach Tastenanschlägen in einer Terminalsitzung gefragt hat.

Antwort1

xinput testkann alle Tastaturereignisse an den X-Server melden. Auf einem GNU-System:

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

Wenn Sie die Tastennamen aus den Tastencodes erhalten möchten, können Sie die Ausgabe wie folgt nachbearbeiten:

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

> file.logZum Speichern in einer Protokolldatei hinzufügen . Oder | tee file.logzum Protokollieren und Anzeigen.

xinputfragt die XinputExtension des X-Servers ab. Näher kommt man diesem Standard (mir ist kein Standard bekannt, der X-Dienstprogramme abdeckt) oder allgemeinen Befehl nicht näher. Dafür sind auch keine Root-Rechte erforderlich.

Wenn der X-Server und xinput Version 2 der XinputExtension unterstützen, können Sie test-xi2stattdessen verwenden test, was weitere Informationen liefert, insbesondere den Status der Modifikatoren (Umschalt, Strg, Alt ...). Beispiel:

$ 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

Sie können den Tastencode (in detail) mithilfe von xmodmap -pkeagain in ein Keysym und die effectiveModifikator-Bitmaske mithilfe von in etwas Hilfreicheres übersetzen xmodmap -pm. Zum Beispiel:

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]"
    }
  }'

würde ausgeben:

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

wenn ich Umschalt+Alt+q drücke, während die Num-Lock-Taste aktiviert ist.

Beachten Sie, dass Sie keine Superuser-Berechtigungen benötigen, umInstallierenein Programm. Wenn Sie Schreibzugriff auf eine Stelle im Dateisystem haben, für die Ausführungsberechtigungen erteilt wurden (Ihr Home-Verzeichnis, /tmp... /var/tmp), können Sie einen xinputBefehl von einem kompatiblen System dorthin kopieren und ausführen.

Antwort2

Haben Sie schon einmal darüber nachgedacht,scriptBefehl?

verwandte Informationen