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.