xinput test
एक्स सर्वर के लिए सभी कीबोर्ड घटनाओं की रिपोर्ट कर सकते हैं। ग्नू प्रणाली पर:
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
एक्स सर्वर के XinputExtension पर सवाल। आप एक मानक के रूप में प्राप्त करने जा रहे हैं (मैं एक्स उपयोगिताओं को कवर करने वाले किसी भी मानक के बारे में नहीं जानता) या ऐसा करने के लिए सामान्य आदेश के जितना करीब हूं। यह भी रूट विशेषाधिकार की आवश्यकता नहीं है।
यदि एक्स सर्वर और xinput समर्थन xinputExtension का संस्करण 2 है, तो आप test-xi2
इसके बजाय उपयोग कर सकते हैं test
जो अधिक जानकारी देता है, विशेष रूप से संशोधक की स्थिति (शिफ्ट, 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
वहां संगत सिस्टम से कमांड कॉपी कर सकते हैं और उसे निष्पादित कर सकते हैं।