টার্মিনাল এমুলেটর
মাস্টার সাইডটি টার্মিনালে যাওয়া লাইনটি (টিএক্স / আরএক্স তারের জোড়া) প্রতিস্থাপন করে।
টার্মিনালটি তারের একটিতে প্রাপ্ত অক্ষরগুলি প্রদর্শন করে (তাদের মধ্যে কয়েকটি নিয়ন্ত্রণের অক্ষর এবং এটি কার্সার সরানো, রঙ পরিবর্তন করা ... ইত্যাদি জিনিসগুলি করায়) এবং আপনার টাইপের কীগুলির সাথে সম্পর্কিত অন্য অক্ষরে অক্ষর প্রেরণ করে।
এক্সটারমের মতো টার্মিনাল এমুলেটরগুলি তারের অক্ষরগুলি প্রেরণ ও গ্রহণের পরিবর্তে আলাদা নয়, তারা মাস্টার সাইডে তাদের ফাইল বিবরণীতে অক্ষরগুলি পড়েন এবং লেখেন। একবার তারা স্লেভ টার্মিনাল তৈরি করে এবং আপনার শেলটি এটি শুরু করার পরে, তারা আর এটি স্পর্শ করে না। তারের জুড়ি অনুকরণ করার পাশাপাশি, এক্সটার্ম সেই ফাইল বিবরণীর মাধ্যমে কিছু লাইন শৃঙ্খলা বৈশিষ্ট্যকে মাস্টার সাইডেও পরিবর্তন করতে পারে। উদাহরণস্বরূপ, তারা আকারের বৈশিষ্ট্যগুলি আপডেট করতে পারে যাতে অ্যাপ্লিকেশনগুলিতে একটি সাইনচিনচ প্রেরণ করা যায় যা স্লেভ পিটিআইয়ের সাথে যোগাযোগ করে পরিবর্তিত আকার সম্পর্কে তাদের জানাতে।
এগুলি ছাড়াও, টার্মিনাল / টার্মিনাল এমুলেটরটিতে সামান্য বুদ্ধি রয়েছে।
আপনি টার্মিনাল ডিভাইসে যা লেখেন (পিটিআই ক্রীতদাসের মতো) সেখানে আপনি প্রদর্শিত হওয়ার অর্থ যা আপনি এটি থেকে পড়েছেন তা আপনি সেখানে টাইপ করেছেন তাই টার্মিনাল এমুলেটরটি পড়তে বা লিখতে কোনও অর্থ হয় না does । তারা অন্য প্রান্তে এক হয়।
Tty লাইন শৃঙ্খলা
অনেক বুদ্ধি হয় TTY লাইন শৃঙ্খলা । লাইন শৃঙ্খলা হ'ল একটি সফ্টওয়্যার মডিউল (ড্রাইভারের মধ্যে থাকা, কার্নেলের মধ্যে থাকা) একটি সিরিয়াল / পিটিআই ডিভাইসের উপরে চাপ দেওয়া হয় যা সেই ডিভাইস এবং লাইন / তারের (একটি পাইটির জন্য মাস্টার সাইড) মধ্যে বসে থাকে।
একটি সিরিয়াল লাইনে অন্য প্রান্তে টার্মিনাল থাকতে পারে তবে নেটওয়ার্কিংয়ের জন্য একটি মাউস বা অন্য কম্পিউটারও থাকতে পারে। সিরিয়াল ডিভাইস (বা পিটিআই ডিভাইস) এর উপরে নেটওয়ার্ক ইন্টারফেস পেতে উদাহরণস্বরূপ আপনি একটি এসএলআইপি লাইন শৃঙ্খলা সংযুক্ত করতে পারেন, বা আপনার একটি টিটি লাইনের শৃঙ্খলা থাকতে পারে। Tty লাইন শৃঙ্খলা হ'ল কমপক্ষে সিরিয়াল এবং pty ডিভাইসের জন্য লিনাক্সে ডিফল্ট লাইন শৃঙ্খলা। লিনাক্সে, আপনি এর সাথে লাইন শৃঙ্খলা পরিবর্তন করতে পারেন ldattach
।
টিটি লাইনের শৃঙ্খলা নিষ্ক্রিয় করার প্রভাব আপনি জারি করে দেখতে পারেন stty raw -echo
(নোট করুন যে ব্যাশ প্রম্পট বা অন্যান্য ইন্টারেক্টিভ অ্যাপ্লিকেশনগুলি vi
টার্মিনালটি তাদের যথাযথ মোডে সেট করে, যাতে আপনি এটির cat
সাথে অভিজ্ঞতার মতো বোবা প্রয়োগ ব্যবহার করতে চান )। তারপরে, স্লেভ টার্মিনাল ডিভাইসে যা কিছু লেখা আছে তা Xterm পড়ার জন্য অবিলম্বে মাস্টার সাইডে পরিণত করে এবং মাস্টার সাইডে xterm দ্বারা রচিত প্রতিটি অক্ষর তাত্ক্ষণিক দাস ডিভাইস থেকে পড়ার জন্য উপলব্ধ available
টার্মিনাল ডিভাইস অভ্যন্তরীণ লাইন সম্পাদক প্রয়োগ করা হয় যেখানে লাইন শৃঙ্খলা । উদাহরণস্বরূপ stty icanon echo
(যেমন ডিফল্ট হিসাবে), আপনি টাইপ করার সময় a
, এক্সটার্ম a
মাস্টারকে লেখেন , তারপরে লাইন শৃঙ্খলাটি এটিকে আবার প্রতিধ্বনিত করে ( প্রদর্শনের a
জন্য পড়ার জন্য উপলব্ধ করে xterm
তোলে), তবে গোলামের পাশে পড়ার জন্য কিছু উপলব্ধ করে না । তারপর যদি আপনি ব্যাকস্পেস টাইপ করুন, xterm একটি পাঠায় ^?
বা ^H
(যে চরিত্রেও, লাইন শৃঙ্খলা ^?
বা ^H
অনুরূপ erase
লাইন শৃঙ্খলা সেটিং) মাস্টার একটি ফিরে পাঠায় ^H
, space
এবং ^H
জন্য xterm
নিশ্চিহ্নa
আপনি কেবলমাত্র তার স্ক্রিনে টাইপ করেছেন এবং স্লেভ দিক থেকে অ্যাপ্লিকেশন পড়ার জন্য এখনও কিছু পাঠায় না, এটি a
আপনি আগে টাইপ করেছেন তা সরাতে এটির অভ্যন্তরীণ লাইন সম্পাদক বাফার আপডেট করে ।
তারপরে আপনি এন্টার টিপলে, এক্সটার্ম প্রেরণ করে ^M
(সিআর), যা লাইন শৃঙ্খলা ইনপুটটিতে একটি ^ জে (এলএফ) এ রূপান্তর করে এবং স্লেভ সাইডে পড়ার জন্য আপনি এতদূর যা প্রবেশ করেছেন তা প্রেরণ করে (একটি অ্যাপ্লিকেশন রিডিং যা /dev/pts/x
গ্রহণ করবে আপনি এলএফ সহ টাইপ করেছেন, তবে a
এটি মুছে ফেলার পরে নয়) তবে মাস্টার সাইডে, এটি একটি সিআর এবং এলএফ প্রেরণ করে পরবর্তী লাইনটিতে এবং স্ক্রিনের শুরুতে to
লাইন শৃঙ্খলাটি টার্মিনালের অগ্রভাগ প্রক্রিয়া গোষ্ঠীতে সংকেত প্রেরণেরSIGINT
জন্যও দায়ী যখন এটি ^C
মাস্টার দিকে কোনও অক্ষর গ্রহণ করে etc.
অনেক ইন্টারেক্টিভ টার্মিনাল অ্যাপ্লিকেশন সেগুলি প্রয়োগ করতে সেই লাইন শৃঙ্খলার বেশিরভাগ বৈশিষ্ট্য অক্ষম করে। তবে যে কোনও ক্ষেত্রে, সাবধান থাকুন যে টার্মিনালের ( xterm
) এটির সাথে সামান্য সম্পৃক্ততা রয়েছে (এটি প্রদর্শন করার জন্য যা বলা হয়েছে তা প্রদর্শন ব্যতীত)।
এবং প্রতি প্রক্রিয়া এবং প্রতি টার্মিনাল ডিভাইসে কেবলমাত্র একটি অধিবেশন থাকতে পারে। একটি অধিবেশনটিতে একটি নিয়ন্ত্রণকারী টার্মিনাল সংযুক্ত থাকতে পারে তবে তা করতে হবে না (সমস্ত সেশন টার্মিনাল ছাড়াই শুরু হয় যতক্ষণ না তারা একটি খুলবে)। xterm
, আপনার শেলটি কার্যকর করতে প্রক্রিয়ায় এটি সাধারণত একটি নতুন অধিবেশন তৈরি করে (এবং সেই টার্মিনালটি যেখানে আপনি xterm
যদি চালু করেন তবে সেটিকে আলাদা করে দেবে ), সেই নতুন /dev/pts/x
টার্মিনাল ডিভাইসটিকে নতুন অধিবেশনটিতে সংযুক্ত করে এটি প্রসারিত নতুন খুলুন । এরপরে এটি আপনার শেলটিকে সেই প্রক্রিয়াতে কার্যকর করবে, সুতরাং আপনার শেলটি সেশন লিডার হয়ে যাবে। আপনার শেল বা session অধিবেশনের কোনও ইন্টারেক্টিভ শেল সাধারণত প্রক্রিয়া গ্রুপগুলির সাথে এবং tcsetpgrp()
এই টার্মিনালের জন্য অগ্রভাগ এবং পটভূমির কাজগুলি সেট করতে জাগ্রত করবে।
টার্মিনাল ডিভাইসে টিটি শৃঙ্খলা (সিরিয়াল বা পিটিআই) দিয়ে কোন তথ্য সংরক্ষণ করা হয় , stty
কমান্ডটি সাধারণত এটি প্রদর্শন করে এবং পরিবর্তন করে। সমস্ত শৃঙ্খলা কনফিগারেশন: টার্মিনাল স্ক্রিন আকার, স্থানীয়, ইনপুট আউটপুট পতাকা, বিশেষ অক্ষরের জন্য সেটিংস (যেমন ^ সি, ^ জেড ...), ইনপুট এবং আউটপুট গতি (ptys এর জন্য প্রাসঙ্গিক নয়)। যে অনুরূপ tcgetattr()
/ tcsetattr()
ফাংশন যা লিনাক্স মানচিত্রে TCGETS
/ TCSETS
ioctls, এবং TIOCGWINSZ
/ TIOCSWINSZ
স্ক্রিন সাইজ জন্য। আপনি তর্ক করতে পারেন যে বর্তমান পূর্বভূমি প্রক্রিয়া গোষ্ঠীটি টার্মিনাল ডিভাইসে ( tcsetpgrp()
/ tcgetpgrp()
, TIOC{G,S}PGRP
ioctls) বা বর্তমান ইনপুট বা আউটপুট বাফারে সঞ্চিত অন্য তথ্য ।
নোট করুন যে টার্মিনাল ডিভাইসে সজ্জিত স্ক্রিন আকারের তথ্য বাস্তবতা প্রতিফলিত করতে পারে না। টার্মিনাল এমুলেটরটি সাধারণত উইন্ডোটি পুনরায় আকার দেওয়ার সময় এটি (মাস্টার আকারের একই আইওসিটিএল মাধ্যমে) সেট করে দেবে, তবে কোনও অ্যাপ্লিকেশন দাসের পাশে আইওসিটিএল কল করলে বা পুনরায় আকার প্রেরণ না করা হলে এটি সিঙ্ক থেকে বেরিয়ে যেতে পারে case একটি এসএসএস সংযোগের ক্ষেত্রে যা উদাহরণস্বরূপ sshd
যদি তা ssh
উপেক্ষা করে থাকে তবে অন্য একটি পেটি তৈরি হয় SIGWINCH
) কিছু টার্মিনালগুলিকেও পালানোর ক্রমগুলির মাধ্যমে তাদের আকার জিজ্ঞাসা করা যেতে পারে, সুতরাং কোনও অ্যাপ্লিকেশন সেভাবে এটি জিজ্ঞাসা করতে পারে এবং সেই তথ্যের সাথে লাইন শৃঙ্খলা আপডেট করতে পারে।
আরও বিশদগুলির জন্য, আপনি উদাহরণস্বরূপ দেবিয়ান termios
ও tty_ioctl
ম্যান পৃষ্ঠাতে একবার দেখতে পারেন ।
অন্যান্য লাইনের শৃঙ্খলাগুলির সাথে খেলতে:
সিউডো-টার্মিনাল দিয়ে একটি মাউস অনুকরণ করুন:
socat pty,link=mouse fifo:fifo
sudo inputattach -msc mouse # sets the MOUSE line discipline and specifies protocol
xinput list # see the new mouse there
exec 3<> fifo
printf '\207\12\0' >&3 # moves the cursor 10 pixels to the right
উপরে, পিটিটির মাস্টার সাইডটি নামী পাইপ ( fifo
) এ সকেট দ্বারা সমাপ্ত হয় । আমরা সেই ফিফোটিকে এমন একটি প্রক্রিয়াতে (শেল) সংযুক্ত করি যা 0x87 0x0a 0x00 লিখে থাকে যা মাউস সিস্টেমের প্রোটোকলের অর্থ no button pressed, delta(x,y) = (10,0)
। এখানে, আমরা (শেল) একটি টার্মিনাল অনুকরণ করছি না, তবে একটি মাউস, আমরা প্রেরিত 3 বাইট টার্মিনাল ডিভাইস থেকে একটি অ্যাপ্লিকেশন দ্বারা (সম্ভাব্য রূপান্তরিত) পড়তে হবে না ( mouse
উপরে এটি socat
কোনও /dev/pts/x
ডিভাইসের দ্বারা তৈরি একটি সিমলিংক ) , তবে মাউস ইনপুট ইভেন্ট হিসাবে ব্যাখ্যা করতে হবে।
একটি SLIP ইন্টারফেস তৈরি করুন:
# on hostA
socat tcp-listen:12345,reuseaddr pty,link=interface
# after connection from hostB:
sudo ldattach SLIP interface
ifconfig -a # see the new interface there
sudo ifconfig sl0 192.168.123.1/24
# on hostB
socat -v -x pty,link=interface tcp:hostA:12345
sudo ldattach SLIP interface
sudo ifconfig sl0 192.168.123.2/24
ping 192.168.123.1 # see the packets on socat output
উপরে, সিরিয়াল ওয়্যারটি socat
হোস্টএ এবং হোস্টবি-এর মধ্যে টিসিপি সকেট হিসাবে অনুকরণ করা হয় । এসএলআইপি লাইন শৃঙ্খলা ইন্টারফেসে বিতরণের জন্য এসআইএলপি এনপ্যাপুলেটেড আইপি প্যাকেট হিসাবে সেই ভার্চুয়াল লাইনের উপরে বিনিময় করা বাইটগুলি ব্যাখ্যা করে sl0
।