GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Jeden Tastendruck aufzeichnen und in einer Datei speichern?

Ich muss jeden Tastendruck aufzeichnen und speichern in einer Datei im Benutzerverzeichnis ~, wenn ich mein Konto verwende, bin ich nicht sudoer und ich kann keine Programme (wie logKeys) in irgendeiner Weise 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 in der anderen der Fragesteller nach Tastendruck in der Terminalsitzung gefragt hat.

Akzeptierte Antwort:

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

xinput list |
  grep -Po 'id=Kd+(?=.*slaves*keyboard)' |
  xargs -P0 -n1 xinput test

Wenn Sie Tastennamen aus den Tastencodes erhalten möchten, können Sie diese Ausgabe nachbearbeiten mit:

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

Fügen Sie > file.log hinzu in einer Protokolldatei zu speichern. Oder | tee file.log sowohl anmelden als auch ansehen.

xinput fragt die XinputExtension des X-Servers ab. Das ist so nah wie möglich als Standard (mir ist kein Standard bekannt, der X-Dienstprogramme abdeckt) oder als allgemeiner Befehl dafür. Das erfordert auch keine Root-Rechte.

Wenn der X-Server und xinput Version 2 der XinputExtension unterstützen, können Sie test-xi2 verwenden statt test die mehr Informationen liefert, insbesondere den Zustand der Modifikatoren (Shift, 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 Keycode übersetzen (im detail ) zu einem Keysym mit Hilfe von xmodmap -pke wieder, und der effective Modifizierer-Bitmaske zu etwas Hilfreicherem mit Hilfe von xmodmap -pm . Zum Beispiel:

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

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 für die Installation keine Superuser-Rechte benötigen ein Programm. Wenn Sie Schreibzugriff auf eine Stelle im Dateisystem haben, wo die Ausführungsberechtigung erteilt wird (Ihr Home-Verzeichnis, /tmp , /var/tmp …) dann kannst du einen xinput kopieren Befehl von einem kompatiblen System dorthin und führen Sie ihn aus.

Siehe auch:Ssh – Wie kann man die zu langsame SSH-Anmeldung beschleunigen?
Linux
  1. `^m` und wie wird man es los?

  2. Wie kann man jede versteckte Datei außer dem aktuellen und dem übergeordneten Verzeichnis globbeln?

  3. Wie protokolliere ich jeden in Bash eingegebenen Befehl und jede Dateioperation?

  4. Ausgabe umleiten und leiten?

  5. Threads und Dateideskriptoren

So zeichnen Sie Linux-Terminalsitzungen mit den Befehlen „script“ und „scriptreplay“ auf und geben sie wieder

Ansible Inventar- und Konfigurationsdateien

HDDTemp crontab jede Stunde in die Datei

So nehmen Sie mit Audacity Audio auf und speichern es als MP3-Datei

GZip jede Datei separat

Speichern Sie die Ausgabe von date und watch in einer Datei