X11

記錄每次擊鍵並儲存在文件中

  • September 14, 2020

我需要記錄每次擊鍵並儲存在使用者目錄中的文件中〜,使用我的帳戶時,我不是 sudoer 並且我無法以任何方式安裝程序(如logKeys)。我怎麼能使用終端這樣做?

**注意:**這個問題不是其他提及問題的重複;在這個問題中,我詢問了每個按鍵,而在另一個問題中,提問者詢問了終端會話中的按鍵。

xinput test可以將所有鍵盤事件報告給 X 伺服器。在 GNU 系統上:

xinput list |
 grep -Po 'id=\K\d+(?=.*slave\s*keyboard)' |
 xargs -P0 -n1 xinput test

如果您想從鍵碼中獲取鍵名,您可以使用以下命令對該輸出進行後處理:

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

添加> file.log以儲存在日誌文件中。或者| tee file.log同時記錄並查看它。

xinput查詢 X 伺服器的 XinputExtension。這與您將獲得的標準(我不知道任何涵蓋 X 實用程序的標準)或通用命令一樣接近。這也不需要root權限。

如果 X 伺服器和 xinput 支持版本 2 的 XinputExtension,您可以使用它test-xi2來代替test提供更多資訊,特別是修飾符的狀態(shift、ctrl、alt…)。例子:

$ 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

您可以在againdetail的幫助下將鍵碼 (in )轉換為鍵符,在. 例如:xmodmap -pke``effective``xmodmap -pm

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

會輸出:

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

當我在數字鎖定打開時按 Shift+Alt+q。

請注意,您無需擁有超級使用者權限即可安裝程序。/tmp如果您對授予執行權限的文件系統上的某個位置(您的主目錄, …)具有寫訪問權限,/var/tmp那麼您可以從那裡的兼容系統複製xinput命令並執行它。

引用自:https://unix.stackexchange.com/questions/129159