GNU/Linux >> Tutoriales Linux >  >> Linux

¿Registrar cada pulsación de tecla y almacenarla en un archivo?

Necesito registrar cada pulsación de tecla y almacenar en un archivo en el directorio de usuario ~, cuando uso mi cuenta, no soy sudoer y no puedo instalar programas (como logKeys) de ninguna 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.

Respuesta aceptada:

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

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

Si desea obtener los nombres de las claves a partir de los códigos de las claves, puede posprocesar esa salida con:

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

Agregar > file.log para almacenar en un archivo de registro. O | tee file.log tanto para iniciar sesión como para verlo.

xinput consulta la XinputExtension del servidor X. Eso es lo más cercano que obtendrá como 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 usar test-xi2 en lugar de test que da 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 keysym con la ayuda de xmodmap -pke de nuevo, y el effective modificador máscara de bits 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 /^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]"
    }
  }'

generarí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 para instalar un programa. Si tiene acceso de escritura a algún lugar del sistema de archivos donde se otorga el permiso de ejecución (su directorio de inicio, /tmp , /var/tmp …) entonces puedes copiar un xinput comando desde un sistema compatible allí y ejecútelo.

Relacionado:Ssh:¿cómo acelerar el inicio de sesión ssh demasiado lento?
Linux
  1. ¿Un Superblock, Inode, Dentry Y Un Archivo?

  2. ¿Cómo Glob Todos los Archivos Ocultos Excepto el Directorio Actual y Principal?

  3. ¿Por qué Ls -l no muestra la hora o el año de cada archivo?

  4. GZip cada archivo por separado

  5. Subprocesos y descriptores de archivos

Cómo grabar y reproducir sesiones de terminal de Linux usando los comandos 'script' y 'scriptreplay'

Archivos de inventario y configuración de Ansible

HDDTemp crontab cada hora en el archivo

Cómo grabar audio y guardar como archivo MP3 usando Audacity

unix - cabeza Y cola del archivo

Almacene la salida del comando de fecha y reloj en un archivo