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वहां संगत सिस्टम से कमांड कॉपी कर सकते हैं और उसे निष्पादित कर सकते हैं।