2015-06-03 9 views
6

मेरे पास एक सर्वर बहु-उपयोगकर्ता मोड में चल रहा है जो एक कीबोर्ड और मॉनिटर से जुड़ा हुआ है। एक अलग कंप्यूटर पर, मैं सर्वर पर एसएसएच करना चाहता हूं और एक प्रोग्राम चलाता हूं जो कुंजीपटल से इनपुट कैप्चर करता है और पाठ को मॉनीटर पर प्रिंट करता है। कुंजीपटल और मॉनिटर का उपयोग किसी भी अन्य उद्देश्य के लिए कभी नहीं किया जाएगा।मैं कुंजीपटल घटनाओं को कैप्चर कैसे कर सकता हूं और लिनक्स पर टेक्स्ट-डिस्प्ले के रूप में मॉनीटर का उपयोग कैसे कर सकता हूं?

अभी, सर्वर बूट होने पर, मॉनिटर पर एक (टेक्स्ट) लॉगिन स्क्रीन प्रदर्शित होती है। मुझे पता है कि मैं संबंधित /dev/tty डिवाइस पर लिख सकता हूं। हालांकि, कीबोर्ड भी एक ही स्थान पर लिखता है।

मैं कीबोर्ड ईवेंट कैप्चर कैसे कर सकता हूं और लिनक्स पर टेक्स्ट-डिस्प्ले के रूप में मॉनीटर का उपयोग कैसे कर सकता हूं?

मैं लिनक्स पर हार्डवेयर इंटरफेसिंग के आसपास कुछ मूल बातें खो सकता हूं। मुझे क्या जानने की ज़रूरत है?

इनाम समय से बाहर चल रहा है - किसी को मैं उसी के अनुसार पुरस्कार हूँ आगे बाहर इस मांस के लिए चाहता है:

मैं प्रारंभ होने से प्रवेश करने में कोई कार्यक्रमों को रोकने के लिए निम्नलिखित किया:

systemctl mask [email protected] 
systemctl mask systemd-logind 
systemctl mask [email protected] 

तो मैं कर रहा हूँ मेरे कार्यक्रम चलाने जब साथ आवश्यक:

openvt -c 1 -f /path/to/my/program 

यह एक पूरी तरह से संतोषजनक समाधान, कि परेशान करने -f के अलावा होगा। tty1 पर क्या चल रहा है? क्या ऐसा कुछ है जो मैं इसे रोकने के लिए कर सकता हूं? क्या मुझे इसे रोकना चाहिए?

विशेष रूप से, इस समाधान मेरी जरूरतों को पूरा करता है- जहाँ तक मुझे यह समझ के रूप में, मैं tty के ऊपर ले जा रहा हूँ और इस तरह अपनी stdin तक पहुँच प्राप्त नजर रखने के लिए और stdout (मुद्रण (कीबोर्ड से उत्पादन प्राप्त))।

+0

क्यों लॉगिन पर उचित कार्यक्रम चलाने के लिए एसएसडीडी नहीं है? –

+0

क्या आप विस्तृत कर सकते हैं? मुझे "प्रोग्राम कैसे शुरू करें" और "कार्यक्रम अपने लक्ष्यों को कैसे पूरा करता है" के बीच कनेक्शन नहीं देखता है। – ToBeReplaced

+0

ओह, मैं देखता हूं। जिस कीबोर्ड और मॉनिटर के साथ आप इंटरफेस करना चाहते हैं वह * सर्वर * से जुड़ा हुआ है। यही है 'openvt' के लिए है। –

उत्तर

2

यदि आप निम्न स्तर के प्रोग्रामिंग पर जाने के इच्छुक हैं तो आपको stdin या stdout को संभालना नहीं है। बस कीबोर्ड डिवाइस और कंसोल डिवाइस से सीधे बात करें।

से input-events के स्रोत कोड पर नज़र डालें। यह कीबोर्ड, माउस या किसी अन्य इनपुट डिवाइस को पढ़ने के लिए कच्चे डेटा का उपयोग करता है। उपकरण फ़ाइल डिस्क्रिप्टर में

ioctl(fd,EVIOCGRAB,1) 

:

कीबोर्ड की डिफ़ॉल्ट प्रसंस्करण से बचने के लिए यह (CLI में -g) हड़पने मोड का उपयोग करता है कि एक करने के लिए अनुवाद। /dev/input/event* से कच्ची घटनाओं को पढ़ना कम या ज्यादा सरल है: #include <linux/input.h>, पकड़ लें, और फिर डिवाइस से struct input_event संरचनाएं पढ़ें।

कंसोल के लिए लिखने के लिए, यदि आप TTY पागलपन के साथ गड़बड़ नहीं करना चाहते हैं, और अब है कि आप निम्न स्तर मोड में हैं, तो आप /dev/vcs के लिए सीधे लिखने के लिए पसंद कर सकते हैं, या रंग के लिए /dev/vcsa (एकविशेषता) आउटपुट के लिए।

असल में vcs में एक बाइट प्रति स्क्रीन सेल है जिसमें दिखाए गए वर्ण का कोड शामिल है। vcs में दो बाइट्स हैं: चरित्र और गुण। विवरण के लिए man vcs देखें।

संबंधित मुद्दे

 संबंधित मुद्दे