Registre cada pulsación de tecla y guárdela en un archivo

Registre cada pulsación de tecla y guárdela en un archivo

Necesito registrar cada pulsación de tecla yalmacenaren un archivo en el directorio de usuario ~, cuando uso mi cuenta, no soy sudoer y no puedo instalar programas (comoclaves de registro) de cualquier manera. ¿Cómo podría hacerlo usando la terminal?

NOTA:Esta pregunta no es un duplicado de la otra pregunta mencionada; en esta pregunta pregunto sobre cada pulsación de tecla, mientras que en la otra el autor de la pregunta preguntó sobre la pulsación de tecla en la sesión de terminal.

Respuesta1

xinput testpuede informar todos los eventos del teclado al servidor X. En un sistema GNU:

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

Si desea obtener nombres clave de los códigos clave, puede posprocesar esa salida con:

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

Agregar > file.logpara almacenar en un archivo de registro. O | tee file.loginiciar sesión y verlo.

xinputconsulta la XinputExtension del servidor X. Eso es lo más parecido a un estándar (no conozco ningún estándar que cubra las utilidades X) o un comando común para hacerlo. Eso tampoco requiere privilegios de root.

Si el servidor X y xinput admiten la versión 2 de XinputExtension, puede utilizar test-xi2en lugar de testla cual proporciona más información, en particular el estado de los modificadores (shift, ctrl, alt...). Ejemplo:

$ 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

Puede traducir el código clave (en detail) a un símbolo de clave con la ayuda de xmodmap -pkenuevamente, y la effectivemáscara de bits modificadora a algo más útil con la ayuda de xmodmap -pm. Por ejemplo:

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

saldría:

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

cuando presiono Shift+Alt+q cuando el bloqueo numérico está activado.

Tenga en cuenta que no necesita tener privilegios de superusuario parainstalarun programa. Si tiene acceso de escritura en algún lugar del sistema de archivos donde se otorga el permiso de ejecución (su directorio de inicio, /tmp... /var/tmp), entonces puede copiar un xinputcomando desde un sistema compatible allí y ejecutarlo.

Respuesta2

¿Ha considerado utilizar elscript¿dominio?

información relacionada