কী-বোর্ড ইনপুট এবং পাঠ্য আউটপুট কীভাবে কাজ করে?


85

ধরুন আমি Aএকটি টেক্সট সম্পাদকে কী টিপলাম aএবং এটি নথিতে অক্ষরটি সন্নিবেশ করিয়ে স্ক্রিনে প্রদর্শন করবে। আমি জানি সম্পাদক অ্যাপ্লিকেশনটি হার্ডওয়্যারের সাথে সরাসরি যোগাযোগ করছে না (এর মধ্যে একটি কর্নেল এবং স্টাফ রয়েছে), তাই আমার কম্পিউটারের ভিতরে কী চলছে?

উত্তর:


100

বিভিন্ন পরিস্থিতিতে আছে; আমি সবচেয়ে সাধারণ বিষয়গুলি বর্ণনা করব describe ধারাবাহিক ম্যাক্রোস্কোপিক ইভেন্টগুলি হ'ল:

  1. ইনপুট: কী প্রেসের ইভেন্টটি কীবোর্ড হার্ডওয়্যার থেকে অ্যাপ্লিকেশনটিতে স্থানান্তরিত হয়।
  2. প্রক্রিয়াজাতকরণ: অ্যাপ্লিকেশন সিদ্ধান্ত নেয় যে কীটি Aটিপানো হয়েছিল তাই এটি অবশ্যই অক্ষরটি প্রদর্শন করবে a
  3. আউটপুট: অ্যাপ্লিকেশনটি aস্ক্রিনে প্রদর্শনের আদেশ দেয় ।

জিইউআই অ্যাপ্লিকেশন

ইউনিক্স সিস্টেমগুলির ডি ফ্যাক্টো স্ট্যান্ডার্ড গ্রাফিক্যাল ইউজার ইন্টারফেসটি এক্স উইন্ডো সিস্টেম , প্রায়শই এক্স 11 নামে পরিচিত কারণ এটি অ্যাপ্লিকেশন এবং ডিসপ্লে সার্ভারের মধ্যে এটির মূল প্রোটোকলের 11 তম সংস্করণে স্থিতিশীল হয়েছিল। এক্স সার্ভার নামে পরিচিত একটি প্রোগ্রাম অপারেটিং সিস্টেম কার্নেল এবং অ্যাপ্লিকেশনগুলির মধ্যে বসে; এটি স্ক্রিনে উইন্ডো প্রদর্শন এবং ফোকাসযুক্ত উইন্ডোতে কী প্রেসগুলি প্রেরণ সহ পরিষেবাদি সরবরাহ করে।

ইনপুট

+----------+              +-------------+         +-----+
| keyboard |------------->| motherboard |-------->| CPU |
+----------+              +-------------+         +-----+
             USB, PS/2, …                 PCI, …
             key down/up

প্রথমে কী প্রেস এবং কী রিলিজ সম্পর্কিত তথ্য কীবোর্ড থেকে কম্পিউটারে এবং কম্পিউটারের অভ্যন্তরে প্রেরণ করা হয়। বিস্তারিত হার্ডওয়্যার ধরণের উপর নির্ভর করে। আমি এই অংশে বেশি থাকতে পারব না কারণ চেইনের এই অংশ জুড়ে তথ্য একই রকম রয়েছে: একটি নির্দিষ্ট কী চাপানো বা প্রকাশ করা হয়েছিল।

         +--------+        +----------+          +-------------+
-------->| kernel |------->| X server |--------->| application |
         +--------+        +----------+          +-------------+
interrupt          scancode             keysym
                   =keycode            +modifiers

যখন একটি হার্ডওয়্যার ইভেন্ট ঘটে, সিপিইউ একটি বাধা দেয় , যার ফলে কার্নেলের কিছু কোড কার্যকর হয়। এই কোডটি সনাক্ত করে যে হার্ডওয়্যার ইভেন্টটি একটি কী প্রেস বা কী রিলিজ যা কীবোর্ড থেকে আসে এবং স্ক্যান কোডটি রেকর্ড করে যা কীটি সনাক্ত করে।

এক্স সার্ভারটি একটি ডিভাইস ফাইলের মাধ্যমে ইনপুট ইভেন্টগুলি পড়ে , উদাহরণস্বরূপ /dev/input/eventNNNলিনাক্সে (যেখানে এনএনএন একটি নম্বর)। যখনই কোনও ইভেন্ট আছে, কার্নেলটি সিগন্যাল করে যে সেই ডিভাইস থেকে পড়ার জন্য ডেটা রয়েছে। ডিভাইস ফাইলটি স্ক্যান কোডের সাহায্যে কী-আপ / ডাউন ইভেন্টগুলি প্রেরণ করে, যা হার্ডওয়্যার দ্বারা প্রেরিত মানের সাথে অভিন্ন বা নাও হতে পারে (কার্নেল স্ক্যান কোডটি একটি কীবোর্ড-নির্ভর মান থেকে একটি সাধারণ মান হিসাবে অনুবাদ করতে পারে, এবং লিনাক্স না স্ক্যান কোডগুলি এটি জানে না এমন পুনঃপ্রেরণ করবেন না )।

এক্স স্ক্যান কোডটিকে কল করে যে এটি একটি কীকোড পড়ে । এক্স সার্ভার একটি সারণী রক্ষণাবেক্ষণ করে যা মূল কোডগুলিকে মূল শব্দগুলিতে অনুবাদ করে ("কী প্রতীক" এর জন্য সংক্ষিপ্ত)। যেহেতু keysyms যেমন নাম Keycodes সাংখ্যিক হয় A, aacute, F1, KP_Add, Control_L, ... keysym নির্ভর করে যার উপর সংশোধক কী চাপা হয় (ভিন্ন হতে পারে Shift, Ctrl, ...)।

কী-কোডগুলি থেকে কীওয়ার্ডগুলিতে ম্যাপিংটি কনফিগার করার জন্য দুটি পদ্ধতি রয়েছে:

  • xmodmap হ'ল traditional তিহ্যবাহী প্রক্রিয়া। এটি কী-কোডগুলির একটি তালিকাতে (সাধারণভাবে পরিবর্তিত, স্থানান্তরিত, ...) ক্যাপোডের একটি সাধারণ টেবিল।
  • এক্সকেবি হ'ল আরও শক্তিশালী, তবে আরও জটিল ব্যবস্থার সাথে আরও সংশোধনকারীদের আরও ভাল সমর্থন, বিশেষত দ্বৈত-ভাষা কনফিগারেশনের জন্য, অন্যদের মধ্যে।

অ্যাপ্লিকেশনগুলি X সার্ভারের সাথে সংযোগ স্থাপন করে এবং যখন একটি অ্যাপ্লিকেশনটির উইন্ডোতে ফোকাস থাকে তখন কোনও কী চাপলে একটি বিজ্ঞপ্তি পান। বিজ্ঞপ্তিটি ইঙ্গিত দেয় যে একটি নির্দিষ্ট কিজিয়াম চাপা বা প্রকাশ করা হয়েছিল পাশাপাশি বর্তমানে কোনটি সংশোধনকারী চাপছেন। আপনি xevটার্মিনাল থেকে প্রোগ্রামটি চালিয়ে কিওয়ার্ড দেখতে পাচ্ছেন । অ্যাপ্লিকেশনটি তথ্য সহ কী করে তা নির্ভর করে; কিছু অ্যাপ্লিকেশনগুলিতে কনফিগারযোগ্য কী বাইন্ডিং রয়েছে।

একটি সাধারণ কনফিগারেশনে, আপনি যখন Aকোনও সংশোধক ছাড়াই লেবেলযুক্ত কী টিপেন a, এটি অ্যাপ্লিকেশনটিতে কীসটি প্রেরণ করে ; যদি অ্যাপ্লিকেশনটি এমন কোনও মোডে থাকে যেখানে আপনি পাঠ্য টাইপ করছেন, এটি অক্ষরটি সন্নিবেশ করিয়েছে a

কীবোর্ড লেআউট এবং এক্সমোডম্যাপের সম্পর্ক কীবোর্ড ইনপুটটিতে আরও বিশদে যায়। লিনাক্সে মাউস ইভেন্টগুলি কীভাবে কাজ করে? নিম্ন স্তরে মাউস ইনপুটটির একটি ওভারভিউ দেয়।

আউটপুট

+-------------+        +----------+          +-----+         +---------+
| application |------->| X server |---····-->| GPU |-------->| monitor |
+-------------+        +----------+          +-----+         +---------+
               text or              varies          VGA, DVI,
               image                                HDMI, …

একটি চরিত্র প্রদর্শনের দুটি উপায় রয়েছে।

দেখুন XWindows ফন্টের বিভিন্ন ধরণের উদ্দেশ্য কী? এক্স 11 এর অধীনে ক্লায়েন্ট-সাইড এবং সার্ভার-সাইড পাঠ্য রেন্ডারিংয়ের আলোচনার জন্য।

এক্স সার্ভার এবং গ্রাফিক্স প্রসেসিং ইউনিট (ভিডিও কার্ডের প্রসেসর) এর মধ্যে যা ঘটে তা খুব হার্ডওয়ার-নির্ভর। সাধারণ সিস্টেমে মেমরি অঞ্চলে এক্স সার্ভারের একটি ফ্রেমবফার বলা হয় যা জিপিইউ প্রদর্শনের জন্য গ্রহণ করে। একবিংশ শতাব্দীর পিসি বা স্মার্টফোনে পাওয়া উন্নত সিস্টেমগুলি আরও ভাল পারফরম্যান্সের জন্য জিপিইউকে সরাসরি কিছু অপারেশন করার অনুমতি দেয়। শেষ পর্যন্ত, জিপিইউ স্ক্রিনের সামগ্রী পিক্সেলকে পিক্সেল দ্বারা প্রতি সেকেন্ডের প্রতিটি ভগ্নাংশ মনিটরে প্রেরণ করে।

টার্মিনালে চলমান পাঠ্য মোড অ্যাপ্লিকেশন in

যদি আপনার পাঠ্য সম্পাদকটি টার্মিনালে চলছে এমন একটি পাঠ্য মোড অ্যাপ্লিকেশন, তবে এটি টার্মিনাল যা উপরের বিভাগটির প্রয়োজনে অ্যাপ্লিকেশন। এই বিভাগে, আমি পাঠ্য মোড অ্যাপ্লিকেশন এবং টার্মিনালের মধ্যে ইন্টারফেসটি ব্যাখ্যা করি। প্রথমে আমি এক্স 11 এর অধীনে চলমান টার্মিনাল এমুলেটরটির কেস বর্ণনা করি । 'টার্মিনাল', 'শেল', 'টিটি' এবং 'কনসোল' এর মধ্যে ঠিক পার্থক্য কী? এখানে দরকারী পটভূমি হতে পারে। এটি পড়ার পরে, আপনি আরও বিস্তারিত পড়তে চাইতে পারেন প্রতিটি সিউডো-টার্মিনাল (পিটিওয়াই) উপাদান (সফ্টওয়্যার, মাস্টার সাইড, স্লেভ সাইড) এর দায়িত্বগুলি কী?

ইনপুট

      +-------------------+               +-------------+
----->| terminal emulator |-------------->| application |
      +-------------------+               +-------------+
keysym                     character or
                           escape sequence

টার্মিনাল এমুলেটরটি " ডাউন Leftথাকাকালীন চাপ দেওয়া হয়েছিল " এর মতো ইভেন্টগুলি গ্রহণ Shiftকরে। টার্মিনাল এমুলেটর এবং পাঠ্য মোড অ্যাপ্লিকেশনটির মধ্যে ইন্টারফেসটি হল সিউডো-টার্মিনাল (পিটিআই) , একটি অক্ষর ডিভাইস যা বাইটগুলি সংক্রমণ করে। যখন টার্মিনাল এমুলেটর একটি কী প্রেস ইভেন্টটি গ্রহণ করে, এটি এটিকে এক বা একাধিক বাইটে রূপান্তরিত করে যা অ্যাপ্লিকেশনটি পিটিআই ডিভাইস থেকে পড়তে পারে।

ASCII সীমার বাইরে মুদ্রণযোগ্য অক্ষরগুলি অক্ষর এবং এনকোডিংয়ের উপর নির্ভর করে এক বা একাধিক বাইট হিসাবে প্রেরণ করা হয় । উদাহরণস্বরূপ, ইউনিকোড অক্ষর সেটটির ইউটিএফ -8 এনকোডিং - এ, ASCII পরিসরের অক্ষরগুলি একক বাইট হিসাবে এনকোড করা হয়েছে, তবে এই ব্যাপ্তির বাইরের অক্ষরগুলি একাধিক বাইট হিসাবে এনকোড করা হয়েছে।

মূল প্রক্রিয়া যে একটা ফাংশন কী বা যেমন সংশোধনকারীদের সঙ্গে একটি মুদ্রণযোগ্য অক্ষর মিলা Ctrlবা Altএকটি হিসাবে পাঠানো হয় পালাবার ক্রম । এস্কেপ সিকোয়েন্সগুলিতে সাধারণত অক্ষর থেকে বেরিয়ে আসা (বাইট মান 27 = 0x1B = \033, কখনও কখনও ^[বা হিসাবে প্রদর্শিত হয় \e) এক বা একাধিক মুদ্রণযোগ্য অক্ষর থাকে। কয়েকটি কী বা কী সংমিশ্রণে ASCII- ভিত্তিক এনকোডিংগুলিতে তাদের সাথে সম্পর্কিত একটি নিয়ন্ত্রণ অক্ষর রয়েছে (এটি বর্তমানে ইউনিকোড সহ অনেকগুলি ব্যবহৃত হয়): Ctrl+ letter1–26 পরিসরে একটি চরিত্রের মান দেয়, Escতা হ'ল পালানোর চরিত্র উপরোক্ত আলোচনা থেকে দেখা এবং হিসাবে একই Ctrl+ + [, Tabহিসাবে একই Ctrl+ + I,Returnইত্যাদি Ctrl+ হিসাবে একইM

বিভিন্ন টার্মিনাল প্রদত্ত কী বা কী সংমিশ্রণের জন্য বিভিন্ন পালানোর সিকোয়েন্স প্রেরণ করে। ভাগ্যক্রমে, কথোপকথনটি সত্য নয়: একটি ক্রম দেওয়া থাকলে বাস্তবে একটি এনকোডে থাকা মূল কী সংমিশ্রণ রয়েছে। এর ব্যতিক্রমটি হল 127 = 0x7f = অক্ষর \0177যা প্রায়শই Backspaceতবে কখনও কখনও হয় Delete

একটি টার্মিনালে, আপনি যদি একটি কী সংমিশ্রণ অনুসারে Ctrl+ টাইপ করেন তবে Vএটি মূল সংমিশ্রণ থেকে আক্ষরিকভাবে পালানোর ক্রমের প্রথম বাইট সন্নিবেশ করায়। যেহেতু এস্কেপ সিকোয়েন্সগুলি সাধারণত প্রথমটির পরে কেবল মুদ্রণযোগ্য অক্ষর নিয়ে থাকে তাই এটি পুরো পালানোর ক্রমটি অক্ষরে অক্ষরে serোকায়। দেখুন কী বাইন্ডিং টেবিল? এই প্রসঙ্গে zsh একটি আলোচনার জন্য।

টার্মিনাল কিছু পরিবর্তক সমন্বয় জন্য একই পালাবার ক্রম প্রেরণ করা হতে পারে (যেমন অনেক টার্মিনাল উভয়ের জন্য একটি স্থান অক্ষর প্রেরণ Spaceএবং Shift+ + Space; xterm পরিবর্তক সমন্বয় পার্থক্য একটি মোড আছে কিন্তু জনপ্রিয় দে আ স গ্রন্থাগার উপর ভিত্তি করে টার্মিনাল না )। কয়েকটি কী মোটেও সঞ্চারিত হয় না, উদাহরণস্বরূপ সংশোধক কী বা কীগুলি যা টার্মিনাল এমুলেটরের একটি বাঁধার ট্রিগার করে (যেমন একটি অনুলিপি বা পেস্ট কমান্ড)।

যদি এটি চান তবে এস্কেপ সিকোয়েন্সগুলি প্রতীকী কী নামগুলিতে অনুবাদ করা অ্যাপ্লিকেশনটির উপর নির্ভর করে।

আউটপুট

+-------------+               +-------------------+
| application |-------------->| terminal emulator |--->
+-------------+               +-------------------+
               character or
               escape sequence

আউটপুট ইনপুট চেয়ে বরং সহজ। যদি অ্যাপ্লিকেশনটি পিটিআই ডিভাইস ফাইলটিতে একটি অক্ষর আউটপুট করে, টার্মিনাল এমুলেটর এটি বর্তমান কার্সার অবস্থানে প্রদর্শন করে। (টার্মিনাল এমুলেটর একটি কার্সার অবস্থানে বজায় রাখে, এবং স্ক্রল যদি কার্সার পর্দার নীচে আওতায় ফেলা হয়।) আবেদন এছাড়াও আউটপুট পালাবার ক্রম (বেশিরভাগই শুরু করতে ^[বা ^]) টার্মিনাল যেমন কার্সরটি না সরিয়ে যেমন কর্ম সঞ্চালনের জন্য বলতে, পাঠ্য বৈশিষ্ট্য (রঙ, গা bold়,…), বা স্ক্রিনের অংশ মুছে ফেলা হচ্ছে।

Escape টার্মিনাল এমুলেটর দ্বারা সমর্থিত সিকোয়েন্স বর্ণনা করা হয় termcap বা terminfo ডাটাবেস। সর্বাধিক টার্মিনাল এমুলেটর আজকাল মোটামুটি ঘনিষ্ঠভাবে সঙ্গে সংযুক্ত করা হয় xtermLESSQLMCAP_ * ভেরিয়েবলের ডকুমেন্টেশন দেখুন ? টার্মিনাল সক্ষমতার তথ্য ডাটাবেসগুলির দীর্ঘ আলোচনার জন্য, এবং কার্সারটি ঝলকানো থেকে কীভাবে থামানো যায় এবং আমি যে মেশিনটি ছিটিয়েছিলাম সেগুলি ব্যবহার করতে আমি কী আমার স্থানীয় মেশিনের টার্মিনাল রঙগুলি সেট করতে পারি? কিছু ব্যবহার উদাহরণের জন্য।

অ্যাপ্লিকেশনটি একটি পাঠ্য কনসোলে চলছে

যদি অ্যাপ্লিকেশনটি সরাসরি টেক্সট কনসোলটিতে চলমান থাকে, যেমন টার্মিনাল এমুলেটর অ্যাপ্লিকেশনটির পরিবর্তে কার্নেল দ্বারা সরবরাহ করা একটি টার্মিনাল, একই নীতি প্রয়োগ করা হয়। টার্মিনাল এবং অ্যাপ্লিকেশনটির মধ্যবর্তী ইন্টারফেসটি এখনও একটি বাইট স্ট্রিম যা অক্ষর সঞ্চারিত করে, বিশেষ কী এবং কমান্ডগুলি এস্কেপ সিকোয়েন্স হিসাবে এনকোডেড রয়েছে।

দূরবর্তী অ্যাপ্লিকেশন, নেটওয়ার্কের মাধ্যমে অ্যাক্সেস করা

রিমোট টেক্সট অ্যাপ্লিকেশন

যদি আপনি কোনও রিমোট মেশিনে যেমন কোনও এসএসএইচ দিয়ে প্রোগ্রাম চালনা করেন তবে নেটওয়ার্ক যোগাযোগ প্রোটোকল পিটিআই স্তরে ডেটা রিলে করে।

+-------------+           +------+           +-----+           +----------+
| application |<--------->| sshd |<--------->| ssh |<--------->| terminal |
+-------------+           +------+           +-----+           +----------+
               byte stream        byte stream       byte stream
               (char/seq)         over TCP/…        (char/seq)

এটি বেশিরভাগ স্বচ্ছ, ব্যতীত কখনও কখনও দূরবর্তী টার্মিনাল ডেটাবেস স্থানীয় টার্মিনালের সমস্ত ক্ষমতা জানতে পারে না।

রিমোট এক্স 11 অ্যাপ্লিকেশন

সার্ভারের অ্যাপ্লিকেশনগুলির মধ্যে যোগাযোগ প্রোটোকলটি নিজেই একটি বাইট স্ট্রিম যা এসএসএইচের মতো কোনও নেটওয়ার্ক প্রোটোকল এর মাধ্যমে প্রেরণ করা যায়।

+-------------+            +------+        +-----+            +----------+
| application |<---------->| sshd |<------>| ssh |<---------->| X server |
+-------------+            +------+        +-----+            +----------+
               X11 protocol        X11 over       X11 protocol
                                   TCP/…

এটি বেশিরভাগ স্বচ্ছ, মুভি ডিকোডিং এবং 3 ডি রেন্ডারিংয়ের মতো কিছু ত্বরণ বৈশিষ্ট্যগুলির জন্য যা অ্যাপ্লিকেশন এবং প্রদর্শনের মধ্যে সরাসরি যোগাযোগের জন্য উপলব্ধ নয় except


সম্পূর্ণরূপে নিশ্চিত নয়, তবে যেহেতু উত্তরটি বরং সাধারণভাবে বিশদযুক্ত তাই আমি ভাবছি যে "অ্যাপ্লিকেশনটি একটি টেক্সট কনসোলটিতে চলমান" বলছে এমন অংশটিতে বৈশিষ্ট্যটি নাও থাকতে পারে যা এখানে man 5 keymapsঅনুবাদ করার জন্য ব্যবহৃত keycodesহয় scancodes। যদিও মূলত অনুরূপ হিসাবে উল্লেখ করা হয়েছে এটি এখনও সরঞ্জাম / প্রোগ্রামগুলির সম্পূর্ণ আলাদা সেট এবং এটি সম্ভবত আরও কিছু অন্তর্দৃষ্টি যোগ্য। এর পরে উত্তরটি +1 এবং এম্বেডযুক্ত সম্পর্কিত প্রশ্নের কারণে দুর্দান্ত।
humanityANDpeace

আমি খুঁজে পেয়েছি PgUpএবং Ctrl+PgUptty1 (TERM = লিনাক্স) এর মধ্যে পৃথক পৃথক। কীসিম -> নিয়ন্ত্রণ সিকোয়েন্স ম্যাপিং কনফিগার করা যায়?
স্টিভ্যাসিক

@ স্টিবাবাসিক হ্যাঁ, একটি কী-ম্যাপ লোড সহ loadkeysলিনাক্স কনসোল কীবোর্ড-লেআউট ট্যাগযুক্ত প্রশ্নের সন্ধান করুন ।
গিলস

@ গিলিস ধন্যবাদ! এটি লক্ষণীয় যে লোডকিরা ম্যাপিং কীকোড -> কিজিম এবং কীসিম -> এসেস্ক ক্রম উভয়ই পরিবর্তন করে (এটি প্রাথমিকভাবে আমার কাছে স্পষ্ট ছিল না)।
স্টিভ্যাসিক

1
বাহ, এটি স্ট্যাকেক্সচেঞ্জে আমি দেখেছি এমন সেরা উত্তরগুলির মধ্যে একটি হতে হবে - সুসংহত, প্রশ্নের উত্তর দেয়, প্রাসঙ্গিক প্রসঙ্গ সরবরাহ করে, অন্যান্য দরকারী উত্তরগুলি জড়িত করে, এমনকি এএসসিআইআইয়ের চমৎকার শিল্পও রয়েছে!
জনট্রন

4

আপনি যদি এটি কোনও ইউনিক্স সিস্টেমে দেখতে চান যা বোঝার মতো যথেষ্ট ছোট, তবে এক্সভি 6 এ খনন করুন । এটি কমবেশি পৌরাণিক ইউনিক্স 6th ষ্ঠ সংস্করণ যা জন সিংহের বিখ্যাত ভাষ্য , সমীজদাত হিসাবে দীর্ঘ প্রচারিত, এর ভিত্তি হয়ে ওঠে । এটির কোডটি এএনএসআই সি এর অধীনে সংকলন করতে এবং মাল্টিপ্রসেসরের মতো আধুনিক বিকাশগুলি আমলে নেওয়ার জন্য পুনরায় কাজ করা হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.