すべてのキーストロークを記録し、ユーザーディレクトリのファイルに保存する必要があります。アカウントを使用する場合、私はsudoerではなく、プログラム(logKeysなど)をインストールできません。ターミナルを使用してどのようにできますか?
注:この質問は、他の言及の質問の複製ではありません。この質問では、すべてのキーストロークについて質問していますが、質問者はターミナルセッションでキーストロークについて質問しました。
すべてのキーストロークを記録し、ユーザーディレクトリのファイルに保存する必要があります。アカウントを使用する場合、私は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ユーティリティをカバーする標準を認識していません)またはそれを行うための一般的なコマンドとして取得しようとしているものに近いものです。また、ルート権限も必要ありません。
XサーバーとxinputがXinputExtensionのバージョン2をサポートしている場合、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
キーコード(内detail
)をキーシムに変換するには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]
num-lockがオンのときにShift + Alt + qを押すと。
プログラムをインストールするためにスーパーユーザー権限を持っている必要はないことに注意してください。実行許可が与えられているファイルシステムのどこか(ホームディレクトリ/tmp
、/var/tmp
...)に書き込みアクセス権がある場合はxinput
、互換性のあるシステムからコマンドをコピーして実行できます。
xinput
1.6.1
またはそれ以降の--root
。Xユーティリティは、xorg.freedesktop.org/releases/individual/appから個別にダウンロードできます。ソースからコンパイルしたくない場合。Debianには、Linuxまたはkfreebsdのいくつかのアーキテクチャ用のxinput 1.6.1があります。
xmodmap
少なくとも1987年以来、リファレンスXの実装に含まれています。ここで話しているシステムは何ですか?それがいる可能性がありxmodmap
、あなたではありません$PATH
(/usr/dt/bin
または他の?)。