Registra ogni sequenza di tasti e memorizza in un file


31

Devo registrare ogni sequenza di tasti e memorizzare in un file nella directory dell'utente ~, quando utilizzo il mio account, non sono sudoer e non posso installare programmi (come logKeys ) in alcun modo. Come potrei farlo usando il terminale?

NOTA: questa domanda non è un duplicato dell'altra domanda menzionata; in questa domanda sto chiedendo di ogni battitura, mentre nell'altro il richiedente ha chiesto della battuta nella sessione terminale.


Intendi un carattere / byte chiave proveniente da un determinato dispositivo terminale o qualsiasi pressione / rilascio chiave anche da qualsiasi tastiera collegata al computer host?
Stéphane Chazelas,

Ogni kryboard collegato
Mitro,

2
@etherfish non è un duplicato perché, non intendo solo nella sessione terminale, ma ogni sequenza di tasti, anche nel desktop, quando nessun programma è in esecuzione.
Mitro,

1
In una sessione della GUI (X11)? O su una console Linux? Cosa c'entra un terminale con questo, dal momento che non vuoi solo un record di ciò che hai digitato in un terminale?
Gilles 'SO- smetti di essere malvagio'

1
@AlessioMTX Hai ragione. Errore mio.
etherfish

Risposte:


47

xinput testpuò segnalare tutti gli eventi della tastiera al server X. Su un sistema GNU:

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

Se si desidera ottenere i nomi delle chiavi dai codici delle chiavi, è possibile postelaborare l'output con:

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

Aggiungi > file.logper archiviare in un file di registro. O | tee file.logper accedere e vederlo entrambi.

xinputinterroga XinputExtension del server X. Questo è il più vicino possibile allo standard (non sono a conoscenza di alcuno standard che copra le utility X) o al comando comune per farlo. Anche questo non richiede i privilegi di root.

Se il server X e xinput supportano la versione 2 di XinputExtension, è possibile utilizzare al test-xi2posto del testquale fornisce ulteriori informazioni, in particolare lo stato dei modificatori (shift, ctrl, alt ...). Esempio:

$ 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

Puoi tradurre il keycode (in detail) in un keysym con l'aiuto di xmodmap -pkenuovo, e il effectivemodificatore bitmask in qualcosa di più utile con l'aiuto di xmodmap -pm. Per esempio:

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

produrrebbe:

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

quando premo Maiusc + Alt + q quando il blocco numerico è attivo.

Si noti che non è necessario disporre dei privilegi di superutente per installare un programma. Se si dispone di accesso in scrittura da qualche parte sul file system in cui eseguire l'autorizzazione viene concessa (la directory home, /tmp, /var/tmp...) quindi è possibile copiare un xinputcomando da un sistema compatibile lì ed eseguirlo.


È molto buono, l'output è il tasto premere il tasto n1 premere il tasto n2 rilascio .. C'è un modo per mostrare la lettera instad del numero? E come archiviare in un file il "registro"? PS: sfortunatamente il mio PC non ha questo programma installato per impostazione predefinita, e al momento non riesco a installare nulla, ho provato su un altro PC.
Mitro,

Inoltre il numero non può riconoscere se sto usando 2 o "
Mitro

2
@AlessioMTX, tutte le pressioni dei tasti verranno registrate anche se comprese quelle di Shift e Capslock. Vedi anche la mia modifica per le etichette / i simboli delle chiavi anziché i codici chiave.
Stéphane Chazelas,

1
@AlessioMTX, ne avrai bisogno xinput 1.6.1o più recente --root. Le utility X possono essere scaricate singolarmente da xorg.freedesktop.org/releases/individual/app . Se non vuoi compilare dal sorgente. Debian ha un xinput 1.6.1 per diverse architetture per Linux o kfreebsd.
Stéphane Chazelas,

1
@AlessioMTX, pensato per eventi sul server X. xmodmapè stato nell'implementazione di riferimento X almeno dal 1987. Di quale sistema stiamo parlando qui? Potrebbe essere che xmodmapnon sia nel tuo $PATH( /usr/dt/bino altro?).
Stéphane Chazelas,

3

Hai considerato l'utilizzo del scriptcomando?


Non è quello che sto cercando. Ho letto dal link ma è solo per la sessione terminale.
Mitro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.