Notieren Sie jeden Tastendruck und speichern Sie ihn in einer Datei

31

Ich muss jeden Tastendruck aufzeichnen und in einer Datei im Benutzerverzeichnis ~ speichern. Wenn ich mein Konto verwende, bin ich kein Sudoer und kann keine Programme (wie logKeys ) installieren . Wie könnte ich das mit dem Terminal machen?

HINWEIS: Diese Frage ist kein Duplikat der anderen Erwähnungsfrage. In dieser Frage frage ich nach jedem Tastendruck, während der Fragesteller in der anderen nach dem Tastendruck in der Terminalsitzung fragt.

Mitro
quelle
Meinen Sie ein Schlüsselzeichen / Byte, das von einem bestimmten Endgerät stammt, oder ein Drücken / Loslassen einer Taste, selbst wenn eine Tastatur an den Hostcomputer angeschlossen ist?
Stéphane Chazelas
Jedes verbundene kryboard
Mitro
2
@etherfish es ist kein Duplikat, denn ich meine nicht nur in Terminalsitzungen, sondern bei jedem Tastendruck, auch auf dem Desktop, wenn kein Programm läuft.
Mitro
1
In einer GUI (X11) Sitzung? Oder auf einer Linux-Konsole? Was hat ein Terminal damit zu tun, da Sie nicht nur aufzeichnen möchten, was Sie in ein Terminal eingegeben haben?
Gilles 'SO- hör auf böse zu sein'
1
@AlessioMTX Du hast recht. Mein Fehler.
Ätherfisch

Antworten:

47

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 Schlüsselnamen aus den Schlüsselcodes erhalten möchten, können Sie diese Ausgabe mit den folgenden Schritten nachbearbeiten:

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

Hinzufügen > file.log, um in einer Protokolldatei zu speichern. Oder | tee file.logum sich beide anzumelden und es anzusehen.

xinputfragt die XinputExtension des X-Servers ab. Das ist so nah, wie Sie es als Standard bekommen werden (mir ist kein Standard bekannt, der X-Dienstprogramme abdeckt) oder allgemeiner Befehl, dies zu tun. Das erfordert auch keine root-Rechte.

Wenn der X-Server und xinput Version 2 der XinputExtension unterstützen, können Sie test-xi2anstelle testdessen weitere Informationen verwenden, 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 Schlüsselcode (in detail) mit Hilfe von xmodmap -pkewieder in einen Schlüsselschlüssel und die effectiveModifikator-Bitmaske mit Hilfe 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 Shift + Alt + q drücke, wenn die Num-Taste aktiviert ist.

Beachten Sie, dass Sie keine Superuser-Berechtigungen benötigen, um ein Programm zu installieren . Wenn Sie Schreibzugriff auf irgendwo auf dem Dateisystem, wo die Ausführungsberechtigung erteilt wird (Ihr Home - Verzeichnis, /tmp, /var/tmp...) , dann können Sie eine Kopie xinputBefehl von einem kompatibelen System gibt und ausführen.

Stéphane Chazelas
quelle
Es ist sehr gut, die Ausgabe ist Tastendruck n1 Tastendruck n2 Tastenfreigabe. Gibt es eine Möglichkeit, den Buchstaben anstelle der Zahl anzuzeigen? Und wie speichert man in einer Datei das "Protokoll"? PS: Leider ist dieses Programm auf meinem PC nicht standardmäßig installiert, und ich kann im Moment nichts installieren. Ich habe es auf einem anderen PC versucht.
Mitro
Außerdem kann die Nummer nicht erkennen, ob ich 2 oder "
Mitro
2
@AlessioMTX, alle Tastendrücke werden protokolliert, einschließlich der Umschalt- und Feststelltasten. Siehe auch meine Bearbeitung für Tastenbeschriftungen / Symbole anstelle von Tastencodes.
Stéphane Chazelas
1
@AlessioMTX, für das Sie xinput 1.6.1oder neuer benötigen --root. X-Dienstprogramme können einzeln von xorg.freedesktop.org/releases/individual/app heruntergeladen werden . Wenn Sie nicht aus dem Quellcode kompilieren möchten. Debian hat xinput 1.6.1 für verschiedene Architekturen für Linux oder kfreebsd.
Stéphane Chazelas
1
@AlessioMTX, das ist für Ereignisse auf dem X-Server gedacht. xmodmapist mindestens seit 1987 in der Implementierung von Referenz X enthalten. Über welches System sprechen wir hier? Könnte es sein, dass xmodmapnicht in Ihrem $PATH( /usr/dt/binoder anderen?).
Stéphane Chazelas
3

Haben Sie darüber nachgedacht, den scriptBefehl zu verwenden?

Ätherfisch
quelle
Es ist nicht das, wonach ich suche. Ich habe aus dem Link gelesen, aber es ist nur für Terminal-Sitzung.
Mitro