Grabe cada pulsación de tecla y almacénelo en un archivo


31

Necesito registrar cada pulsación de tecla y almacenar en un archivo en el directorio de usuarios ~, 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 de mención; En esta pregunta, estoy preguntando 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.


¿Se refiere a algún carácter / byte de tecla que provenga de un dispositivo terminal dado, o al presionar / soltar una tecla incluso desde cualquier teclado conectado a la computadora host?
Stéphane Chazelas

Cada kryboard conectado
Mitro

2
@etherfish no es un duplicado porque, no me refiero solo a la sesión de terminal, sino a cada pulsación de tecla, también en el escritorio, cuando no se está ejecutando ningún programa.
Mitro

1
En una sesión GUI (X11)? ¿O en una consola Linux? ¿Qué tiene que ver un terminal con esto, ya que no solo quieres un registro de lo que escribiste en un terminal?
Gilles 'SO- deja de ser malvado'

1
@AlessioMTX Estás en lo correcto. Mi error.
etherfish

Respuestas:


47

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 procesar posteriormente esa salida con:

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

Agregar > file.loga la tienda en un archivo de registro. O | tee file.logpara iniciar sesión y verlo.

xinputconsulta la extensión Xinput 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 usar en test-xi2lugar de lo testque 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 detailclave (in ) a un keyym con la ayuda de xmodmap -pkenuevo, y la effectivemáscara de bits del modificador 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]"
    }
  }'

daría salida:

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 en algún lugar del sistema de archivos donde se concede permiso de ejecución (su directorio de inicio /tmp, /var/tmp...), puede copiar un xinputcomando de un sistema compatible allí y ejecutarlo.


Es muy bueno, la salida es presionar la tecla n1 presionar la tecla n2 soltar la tecla. ¿Hay alguna manera de mostrar la letra instad del número? ¿Y cómo almacenar en un archivo el "registro"? PD: desafortunadamente mi PC no tiene este programa instalado por defecto, y no puedo instalar nada en este momento, lo intenté en otra PC.
Mitro

Además, el número no puede reconocer si estoy usando 2 o "
Mitro

2
@AlessioMTX, todas las pulsaciones de teclas se registrarán, incluidas las de Shift y Capslock. Vea también mi edición para etiquetas / símbolos clave en lugar de códigos clave.
Stéphane Chazelas

1
@AlessioMTX, necesitará xinput 1.6.1o más reciente --root. Las utilidades X se pueden descargar individualmente desde xorg.freedesktop.org/releases/individual/app . Si no quieres compilar desde la fuente. Debian tiene un xinput 1.6.1 para varias arquitecturas para Linux o kfreebsd.
Stéphane Chazelas

1
@AlessioMTX, eso es para eventos en el servidor X. xmodmapha estado en la implementación de referencia X desde 1987 al menos. ¿De qué sistema estamos hablando aquí? ¿Podría ser que xmodmapno está en tu $PATH( /usr/dt/binu otro?).
Stéphane Chazelas

3

¿Has considerado usar el scriptcomando?


No es lo que estoy buscando. Leí desde el enlace, pero es solo para sesión terminal.
Mitro
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.