Ich muss jeden Tastendruck aufzeichnen undspeichernin einer Datei im Benutzerverzeichnis ~, wenn ich mein Konto verwende, bin ich nicht sudoer und kann keine Programme installieren (wielogKeys) in irgendeiner Weise. Wie kann ich dies über das Terminal tun?
NOTIZ:Diese Frage ist kein Duplikat der anderen erwähnten Frage. In dieser Frage frage ich nach jedem Tastenanschlag, während in der anderen Frage der Fragesteller nach Tastenanschlägen in einer Terminalsitzung gefragt hat.
Antwort1
xinput test
kann alle Tastaturereignisse an den X-Server melden. Auf einem GNU-System:
xinput list |
grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
xargs -P0 -n1 xinput test
Wenn Sie die Tastennamen aus den Tastencodes erhalten möchten, können Sie die Ausgabe wie folgt nachbearbeiten:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
> file.log
Zum Speichern in einer Protokolldatei hinzufügen . Oder | tee file.log
zum Protokollieren und Anzeigen.
xinput
fragt die XinputExtension des X-Servers ab. Näher kommt man diesem Standard (mir ist kein Standard bekannt, der X-Dienstprogramme abdeckt) oder allgemeinen Befehl nicht näher. Dafür sind auch keine Root-Rechte erforderlich.
Wenn der X-Server und xinput Version 2 der XinputExtension unterstützen, können Sie test-xi2
stattdessen verwenden test
, was weitere Informationen liefert, insbesondere den Status der Modifikatoren (Umschalt, Strg, Alt ...). Beispiel:
$ 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
Sie können den Tastencode (in detail
) mithilfe von xmodmap -pke
again in ein Keysym und die effective
Modifikator-Bitmaske mithilfe von in etwas Hilfreicheres übersetzen xmodmap -pm
. Zum Beispiel:
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]"
}
}'
würde ausgeben:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
wenn ich Umschalt+Alt+q drücke, während die Num-Lock-Taste aktiviert ist.
Beachten Sie, dass Sie keine Superuser-Berechtigungen benötigen, umInstallierenein Programm. Wenn Sie Schreibzugriff auf eine Stelle im Dateisystem haben, für die Ausführungsberechtigungen erteilt wurden (Ihr Home-Verzeichnis, /tmp
... /var/tmp
), können Sie einen xinput
Befehl von einem kompatiblen System dorthin kopieren und ausführen.
Antwort2
Haben Sie schon einmal darüber nachgedacht,script
Befehl?