GNU/Linux >> Linux Esercitazione >  >> Linux

Registra ogni sequenza di tasti e archivia in un file?

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

NOTA: Questa domanda non è un duplicato dell'altra domanda di menzione; in questa domanda chiedo di ogni sequenza di tasti, mentre nell'altra il richiedente ha chiesto informazioni sulla sequenza di tasti nella sessione del terminale.

Risposta accettata:

xinput test può riportare tutti gli eventi della tastiera al server X. Su un sistema GNU:

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

Se vuoi ottenere i nomi delle chiavi dai codici delle chiavi, puoi post-elaborare l'output con:

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

Aggiungi > file.log da memorizzare in un file di registro. Oppure | tee file.log sia per accedere che per vederlo.

xinput interroga XinputExtension del server X. È il più vicino possibile come standard (non sono a conoscenza di nessuno standard che copra le utilità X) o un comando comune per farlo. Anche questo non richiede i privilegi di root.

Se il server X e xinput supportano la versione 2 di XinputExtension, puoi usare test-xi2 invece di test che fornisce maggiori 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 codice chiave (in detail ) a un keysym con l'aiuto di xmodmap -pke di nuovo, e il effective modificatore bitmask in qualcosa di più utile con l'aiuto di xmodmap -pm . Ad esempio:

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

produrrebbe:

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

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

Tieni presente che non è necessario disporre dei privilegi di superutente per installare un programma. Se hai accesso in scrittura a un punto del file system in cui è concessa l'autorizzazione all'esecuzione (la tua home directory, /tmp , /var/tmp …) quindi puoi copiare un xinput comando da un sistema compatibile lì ed eseguirlo.

Correlati:Ssh – Come velocizzare l'accesso ssh troppo lento?
Linux
  1. Un Superblock, Inode, Dentry e un file?

  2. Sostituzione del processo e tubo?

  3. Permessi e salvataggio dei file?

  4. GZip ogni file separatamente

  5. Thread e descrittori di file

Come registrare e riprodurre sessioni del terminale Linux utilizzando i comandi "script" e "scriptreplay".

Inventario Ansible e file di configurazione

HDDTemp crontab ogni ora nel file

Come registrare l'audio e salvarlo come file MP3 usando Audacity

Memorizza l'output del comando date e watch in un file

Montaggio di fstab e cifs, possibile memorizzare le informazioni di autenticazione al di fuori di fstab?