कस्टम निर्मित कीबोर्ड से एक कुंजी का कोडकोड प्राप्त करें


12

मैं एक रास्पबेरी पाई के साथ एक Minitel को कंप्यूटर में बदलने की कोशिश कर रहा हूं।

यह एक मिनिटेल है:

यहाँ छवि विवरण दर्ज करें

इसलिए मैंने मिनीटेल कीबोर्ड के मैट्रिक्स को USB कीबोर्ड पीसीबी से मिलाया, जैसे: यहाँ छवि विवरण दर्ज करें

सब कुछ ठीक काम कर रहा है, मैं अपने कस्टम कीबोर्ड से कुछ कुंजी प्राप्त करता हूं। मुझे उचित रूप से चाबियों को फिर से भरने की जरूरत है।

तो मैं एक प्रोग्राम बनाने की कोशिश कर रहा हूं जो मुझे aसंबंधित कीकोड को दबाने और फंसाने के लिए कहेगा , और फिर मेरे कस्टम कीबोर्ड की सभी कुंजियों के साथ, अंतिम रूप से xmodmap फ़ाइल बनाने के लिए।

मेरे पास एकमात्र समस्या यह है कि मैं यह पता नहीं लगा सकता कि मैं उस कीकोड को कैसे प्राप्त कर सकता हूं (और केवल यही!)। मैंने कोशिश की, xevलेकिन इसे फ़िल्टर करने के लिए बहुत अधिक डेटा प्रदर्शित है।

मुझे पता है कि मैं हाथ से सभी कीकोड को ट्रैक कर सकता हूं, लेकिन मैं 10 मिनट में बदल दूंगा, इसलिए मैं जल्दी रास्ता पसंद करूंगा!


MESS प्रोजेक्ट के लिए आप Minitel (रों) से ROM (ओं) को डंप कर सकते हैं? वर्तमान में यह हार्डवेयर पूर्ववत है और निश्चित रूप से ऐतिहासिक महत्व का है।
sendmoreinfo

क्यों नहीं, लेकिन मुझे नहीं पता कि कैसे करना है!
xavier.seignard

जवाबों:


6

मुझे लगता है कि आप इसे शेल या इसी तरह करने की कोशिश कर रहे हैं (अन्यथा, आप सीधे एक्स लाइब्रेरी का उपयोग करेंगे)। यदि हां, तो आपको xinput --test «device-name»पार्स करने में बहुत आसान लग सकता है ।

दुर्भाग्य से, यह वास्तव में शेल-स्क्रिप्टिंग फ्रेंडली नहीं है। लेकिन आप इसके साथ काम कर सकते हैं stdbuf। यह तब तक चलता है जब तक आप इसे मार नहीं देते, लेकिन आपकी शेल स्क्रिप्ट इसे पाइप कर सकती है read

तो, आप कुछ इस तरह से कर सकते हैं:

stty -echo
stdbuf -oL xinput test 'AT Translated Set 2 keyboard' \
    | perl -nE 'BEGIN {$| = 1} m/^key press\s+(\d+)/ and say $1' \
    | for key in q w e r t y; do
         echo -n "Please press $key: "
         read -r keycode
         echo "key $key = $keycode"
    done
stty echo

आपको "एटी ट्रांसलेटेड सेट 2 कीबोर्ड" के स्थान पर सही कीबोर्ड नाम का उपयोग करना होगा। आप इसे पा सकते हैं xinput list:

anthony@Zia:~$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=8    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]

दुर्भाग्य से, आपको एक विशिष्ट उपकरण का उपयोग करना होगा - आप कोर कीबोर्ड का उपयोग नहीं कर सकते।

(इसके अलावा, आपको उपरोक्त कुंजी में xinput को मारने का एक तरीका खोजने की आवश्यकता होगी, या जब आप सभी कुंजियों को दर्ज कर लेंगे तो कंट्रोल-सी को हिट करने के लिए खुद को संतुष्ट कर सकते हैं। और आप शायद क्वर्टी से अधिक कुंजी को सूचीबद्ध करना चाहते हैं। )


धन्यवाद अपमान! कि पूरी तरह से मेरी जरूरत फिट बैठता है! मैंने idइसके नाम के बजाय कीबोर्ड का उपयोग किया , क्योंकि मेरा 2 समान नामों के साथ संघर्ष था। तो xinput test 18जहां 18 मेरे कीबोर्ड की आईडी है।
xavier.seignard

अगर मैं एक कमांड के साथ ऐसा कर सकता हूं जो लंबे समय तक नहीं चल रहा है (यानी पहली कुंजी दबाए जाने के बाद रुक जाता है और कुंजी कोड लौटाता है) तो यह एक तरह का सपना होगा :)
xavier.seignard

@ xavier.seignard मैंने कोशिश की और एक उपयोगिता नहीं पा सका जो ऐसा करता है। लेकिन xinput स्रोत को लेना और इसे इस तरह से काम करना काफी आसान होगा ... चेक test.c, ऐसा लगता है कि प्रासंगिक फ़ंक्शन है print_events। शायद n घटनाओं के बाद रोकने के लिए झंडे को जोड़ने के लिए एक पैच ले जाएगा ?
सितंबर को

@ xavier.seignard मैं बस एक तरह से दौड़ा कि ऐसा करने के लिए ... xinput --query-stateवर्तमान स्थिति देता है, और तुरंत बाहर निकलता है। आप इसे व्यस्त कर सकते हैं।
व्युत्पन्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.