Ich muss jeden Tastendruck aufzeichnen und speichern in einer Datei im Benutzerverzeichnis ~, wenn ich mein Konto verwende, bin ich nicht sudoer und ich kann keine Programme (wie logKeys) in irgendeiner Weise installieren. Wie könnte ich das mit dem Terminal machen?
HINWEIS: Diese Frage ist kein Duplikat der anderen Erwähnungsfrage; In dieser Frage frage ich nach jedem Tastendruck, während in der anderen der Fragesteller nach Tastendruck in der Terminalsitzung gefragt hat.
Akzeptierte Antwort:
xinput test
kann alle Tastaturereignisse an den X-Server melden. Auf einem GNU-System:
xinput list |
grep -Po 'id=Kd+(?=.*slaves*keyboard)' |
xargs -P0 -n1 xinput test
Wenn Sie Tastennamen aus den Tastencodes erhalten möchten, können Sie diese Ausgabe nachbearbeiten mit:
awk 'BEGIN{while (("xmodmap -pke" | getline) > 0) k[$2]=$4}
{print $0 "[" k[$NF] "]"}'
Fügen Sie > file.log
hinzu in einer Protokolldatei zu speichern. Oder | tee file.log
sowohl anmelden als auch ansehen.
xinput
fragt die XinputExtension des X-Servers ab. Das ist so nah wie möglich als Standard (mir ist kein Standard bekannt, der X-Dienstprogramme abdeckt) oder als allgemeiner Befehl dafür. Das erfordert auch keine Root-Rechte.
Wenn der X-Server und xinput Version 2 der XinputExtension unterstützen, können Sie test-xi2
verwenden statt test
die mehr Informationen liefert, insbesondere den Zustand der Modifikatoren (Shift, 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 Keycode übersetzen (im detail
) zu einem Keysym mit Hilfe von xmodmap -pke
wieder, und der effective
Modifizierer-Bitmaske zu etwas Hilfreicherem mit Hilfe von xmodmap -pm
. Zum Beispiel:
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]"
}
}'
würde ausgeben:
KeyPress 24 [q] 0x19 [Shift,Alt,Num_Lock]
wenn ich Shift+Alt+q drücke, wenn die Num-Taste aktiviert ist.
Beachten Sie, dass Sie für die Installation keine Superuser-Rechte benötigen ein Programm. Wenn Sie Schreibzugriff auf eine Stelle im Dateisystem haben, wo die Ausführungsberechtigung erteilt wird (Ihr Home-Verzeichnis, /tmp
, /var/tmp
…) dann kannst du einen xinput
kopieren Befehl von einem kompatiblen System dorthin und führen Sie ihn aus.