xinput test
peut signaler tous les événements du clavier au serveur X. Sur un système GNU:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*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
pour stocker dans un fichier journal. Ou | tee file.log
pour vous connecter et le voir.
xinput
interroge la XinputExtension du serveur X. C'est aussi proche que possible de la norme (je ne connais aucune norme qui couvre les utilitaires X) ou d'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 à la test-xi2
place 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 keycode (in detail
) en un keysym à l'aide de xmodmap -pke
nouveau, et le effective
bitmask de modification 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 /^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]"
}
}'
produirait:
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 de privilèges de super-utilisateur pour installer un programme. Si vous avez accès en écriture à quelque part sur le système de fichiers où l' autorisation d' exécution est accordé (votre répertoire personnel, /tmp
, /var/tmp
...) , vous pouvez copier une xinput
commande à partir d' un système compatible et il l' exécuter.