x11 – Grabe cada pulsación de tecla y almacénela en un archivo

Pregunta:

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 puedo 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:

xinput test puede 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 de clave de los códigos de clave, puede postprocesar esa salida con:

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

Agregue > file.log para almacenar en un archivo de registro. o | tee file.log para iniciar sesión y verlo.

xinput consulta la extensión Xinput 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 comando común para hacer eso. Eso tampoco requiere privilegios de root.

Si el servidor X y xinput admiten la versión 2 de XinputExtension, puede usar test-xi2 lugar de test que 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 de clave (en detail ) a un símbolo de clave con la ayuda de xmodmap -pke nuevamente, y la máscara de bits modificadora effective 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 Mayús + 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 puede copiar un comando xinput desde un sistema compatible allí y ejecutarlo.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım