GNU/Linux >> Tutoriels Linux >  >> Linux

Enregistrer chaque frappe et stocker dans un fichier ?

Je dois enregistrer chaque frappe et stocker dans un fichier du répertoire utilisateur ~, lorsque j'utilise mon compte, je ne suis pas sudoer et je ne peux en aucun cas installer de programmes (comme logKeys). Comment pourrais-je le faire en utilisant le terminal ?

REMARQUE : Cette question n'est pas un doublon de l'autre question de mention ; dans cette question, je pose des questions sur chaque frappe, tandis que dans l'autre, le demandeur a posé des questions sur la frappe dans la session terminale.

Réponse acceptée :

xinput test peut rapporter tous les événements de clavier au serveur X. Sur un système GNU :

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

Si vous souhaitez obtenir des noms de clé à partir des codes de clé, vous pouvez post-traiter cette sortie avec :

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

Ajouter > file.log à stocker dans un fichier journal. Ou | tee file.log pour se connecter et le voir.

xinput interroge le XinputExtension du serveur X. C'est aussi proche que vous allez obtenir en tant que norme (je ne connais aucune norme qui couvre les utilitaires X) ou une commande commune pour le faire. Cela ne nécessite pas non plus de privilèges root.

Si le serveur X et xinput prennent en charge la version 2 de XinputExtension, vous pouvez utiliser test-xi2 au lieu de test qui donne plus d'informations, notamment l'état des modificateurs (shift, ctrl, alt...). Exemple :

$ 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

Vous pouvez traduire le code clé (en detail ) à un keysym à l'aide de xmodmap -pke encore une fois, et le effective modifier le masque de bits en quelque chose de plus utile avec l'aide de xmodmap -pm . Par exemple :

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

afficherait :

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

lorsque j'appuie sur Maj + Alt + q lorsque le verrouillage numérique est activé.

Notez que vous n'avez pas besoin d'avoir des privilèges de super-utilisateur pour installer un programme. Si vous avez un accès en écriture à quelque part sur le système de fichiers où l'autorisation d'exécution est accordée (votre répertoire personnel, /tmp , /var/tmp …) alors vous pouvez copier un xinput commande depuis un système compatible et exécutez-la.

Connexe :Ssh – Comment accélérer la connexion ssh trop lente ?
Linux
  1. Un superbloc, un inode, un dentry et un fichier ?

  2. Substitution de processus et tuyau ?

  3. Autorisations de fichiers et sauvegarde ?

  4. Comment enregistrer chaque commande tapée dans bash et chaque opération de fichier ?

  5. Rediriger et canaliser la sortie ?

Comment enregistrer et rejouer des sessions de terminal Linux à l'aide des commandes "script" et "scriptreplay"

Fichiers d'inventaire et de configuration Ansible

HDDTemp crontab toutes les heures dans le fichier

Comment enregistrer de l'audio et l'enregistrer en tant que fichier MP3 avec Audacity

Stocker la sortie de la commande date et watch dans un fichier

Montage fstab et cifs, possible de stocker les informations d'authentification en dehors de fstab ?