X11
記錄每次擊鍵並儲存在文件中
我需要記錄每次擊鍵並儲存在使用者目錄中的文件中〜,使用我的帳戶時,我不是 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
您可以在again
detail
的幫助下將鍵碼 (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
命令並執行它。