प्रत्येक कीस्ट्रोक को रिकॉर्ड करें और एक फाइल में स्टोर करें


31

मुझे उपयोगकर्ता निर्देशिका में एक फ़ाइल में प्रत्येक कीस्ट्रोक को रिकॉर्ड करने और स्टोर करने की आवश्यकता है ~, अपने खाते का उपयोग करते समय, मैं sudoer नहीं हूं और मैं किसी भी तरह से प्रोग्राम (जैसे logKeys ) स्थापित नहीं कर सकता । मैं टर्मिनल का उपयोग कैसे कर सकता हूं?

नोट: यह प्रश्न अन्य उल्लेख प्रश्न का डुप्लिकेट नहीं है; इस सवाल में मैं हर कीस्ट्रोक के बारे में पूछ रहा हूं, जबकि दूसरे में टर्मिनल सत्र में कीस्ट्रोक के बारे में पूछा।


क्या आपका मतलब किसी दिए गए टर्मिनल डिवाइस से आने वाले किसी भी मुख्य चरित्र / बाइट से है, या होस्ट कंप्यूटर से जुड़े किसी भी कीबोर्ड से भी कोई कुंजी प्रेस / रिलीज है?
स्टीफन चेजेलस

हर जुड़ा kryboard
Mitro

2
@ कैटफ़िश यह एक डुप्लिकेट नहीं है क्योंकि, मेरा मतलब केवल टर्मिनल सत्र में नहीं है, लेकिन प्रत्येक कीस्ट्रोक, डेस्कटॉप में भी है, जब कोई प्रोग्राम नहीं चल रहा है।
मितरो

1
GUI (X11) सत्र में? या लिनक्स कंसोल पर? एक टर्मिनल को इसके साथ क्या करना है, क्योंकि आप केवल एक रिकॉर्ड नहीं चाहते हैं कि आपने टर्मिनल में क्या लिखा है?
गाइल्स का SO- बुराई पर रोक

1
@AlessioMTX आप सही हैं। मेरी गलती।
इथरफिश

जवाबों:


47

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


यह बहुत अच्छा है, आउटपुट कुंजी प्रेस n1 कुंजी प्रेस n2 कुंजी रिलीज है। क्या संख्या के पत्र इंस्टैड को दिखाने का कोई तरीका है? और "लॉग" फ़ाइल में कैसे स्टोर करें? पुनश्च: दुर्भाग्य से मेरे पीसी में यह प्रोग्राम डिफ़ॉल्ट रूप से स्थापित नहीं है, और मैं इस समय कुछ भी स्थापित नहीं कर सकता, मैंने दूसरे पीसी पर कोशिश की।
मितरो

इसके अलावा अगर मैं 2 या "का उपयोग कर रहा हूं तो संख्या पहचान नहीं सकती है
मित्रो

2
@AlessioMTX, Shift और Capslock वाले सहित सभी प्रमुख प्रेस लॉग इन किया जाएगा। कीकोड के बजाय कुंजी लेबल / प्रतीकों के लिए मेरा संपादन भी देखें।
स्टीफन चेज़लस

1
@AlessioMTX, के लिए आपको आवश्यकता होगी xinput 1.6.1या नई --root। X उपयोगिताओं को व्यक्तिगत रूप से xorg.freedesktop.org/releases/inducation/app से डाउनलोड किया जा सकता है । यदि आप स्रोत से संकलन नहीं करना चाहते हैं। लिनक्स या kfreebsd के लिए कई आर्किटेक्चर के लिए डेबियन का xinput 1.6.1 है
स्टीफन चेज़लस

1
@AlessioMTX, जो एक्स सर्वर की घटनाओं के लिए है। xmodmapसंदर्भ एक्स कार्यान्वयन में 1987 से कम से कम है। हम यहां किस व्यवस्था की बात कर रहे हैं? क्या ऐसा हो सकता है जो xmodmapआपके $PATH( /usr/dt/binया अन्य?) में नहीं है।
स्टीफन चेज़लस

3

क्या आपने scriptकमांड का उपयोग करने पर विचार किया है ?


यह वह नहीं है जिसकी मुझे तलाश है। मैं लिंक से पढ़ता हूं लेकिन यह केवल टर्मिनल सत्र के लिए है।
मित्रो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.